多个架构示例

本部分提供有关何时以及如何使用多个架构分离数据库用户的示例。这些示例分为两类:使用多个专用架构;组合使用专用架构(即仅限单个用户的架构)和共享架构(即跨多个用户共享的架构)。

使用多个专用架构

使用多个专用架构可以在涉及敏感信息时有效地将数据库用户彼此分离。通常,用户仅被授予一个架构及其内容的访问权限,从而提供架构级别的数据库安全性。数据库用户可以同时运行不同的应用程序、同一应用程序的多个副本,甚至同一应用程序的多个实例。这样一来,您便可以合并一个数据库上的应用程序,从而减少管理开销,同时更有效地利用资源。以下示例突出强调使用多个专用架构。

使用多个架构分离用户及其唯一的应用程序

在本示例中,两位数据库用户都为同一家公司工作。一位用户 (HRUser) 使用人力资源 (HR) 应用程序访问敏感的个人资料(如工资),而另一位用户 (MedUser) 通过医疗保健管理应用程序访问与公司医疗保健成本有关的信息。HRUser 不应能够访问公司医疗保健成本信息,而 MedUser 不应能够查看员工个人资料。

为了允许这些用户访问他们需要的数据,同时限制他们查看不应看到的数据,我们创建了两个具有适当用户访问权限的架构,如下所示:

  • HRSchema — 此架构归 HRUser 所有,且通过 HR 应用程序进行访问。

  • HRSchema — 此架构归 MedUser 所有,且通过医疗保健管理应用程序进行访问。

使用多个架构支持多租户

本示例与最后一个示例相类似,它也是通过将用户分离到不同的架构中,限制对敏感数据的访问。但在这种情况下,每位用户都使用同一应用程序的一个虚拟实例。

一个相关示例是零售市场分析公司,该公司向大型零售商提供数据和“软件即服务”(SaaS),帮助他们确定使用哪些促销方法能够最有效地推动客户销售额。

在本示例中,每位数据库用户相当于一位零售商,且每位用户只能访问自己的架构。零售市场分析公司需向每位零售客户提供同一应用程序的一个虚拟实例,且每个实例指向该用户的特定架构,以便在其中创建和更新表。这些架构中的表是由同一应用程序的实例创建的,所以使用相同名称,但由于它们处于单独的架构中,因此不会发生冲突。

此数据库中的架构示例可以是:

  • MartSchema — 归一家大型连锁百货商店 MartUser 所有的架构。

  • PharmSchema — 归一家大型连锁药店 PharmUser 所有的架构。

使用多个架构迁移至应用程序的新版本

使用多个架构是迁移至新软件应用程序版本的一种有效方法。在这种情况下,需创建一个新架构来支持软件的新版本,原有架构将保留到不再需要为止,以支持软件的原始版本。这称为“滚动应用程序升级”。

例如,公司可能使用 HR 应用程序存储员工资料。以下架构可用于软件的原始版本和更新版本:

  • HRSchema — 此架构归原始 HR 应用程序的架构用户 HRUser 所有。

  • V2HRSchema — 此架构归新版 HR 应用程序的架构用户 V2HRUser 所有。

组合使用专用架构和共享架构

在上述示例显示的情况中,数据库中的所有架构都是专用的,且用户之间不共享信息。但是,用户可能希望共享公共信息。例如,在零售案例中,MartUser 和 PharmUser 可能希望将其每个商店的特定产品销售额与整个行业内每个商店销售额的平均值相比较。由于此信息是行业平均值,不是特定于任何零售连锁店,因此可以将其放置在两位用户都被授予 USAGE 权限的架构中。

此数据库中的架构示例可能是:

  • MartSchema — 归一家大型连锁百货商店 MartUser 所有的架构。

  • PharmSchema — 归一家大型连锁药店 PharmUser 所有的架构。

  • IndustrySchema — 此架构归 DBUser(来自零售市场分析公司)所有,而 MartUser 和 PharmUser 对此架构具有 USAGE 权限。零售商不太可能获得除 USAGE(对于此架构)和 SELECT(对于其中的一个或多个表)以外的任何权限。