我想在 SQL Server 2016 中构建一堆新数据库(几十个)。但是,我希望所有用户都访问一个数据库(现在称为 SECURITY),并将安全性应用于该数据库,其中每个用户将被授予访问其部门的单一模式的权限。SQL Server 2016 是否允许继承安全性,因此您不必在每个数据库中构建这些用户,并在每个数据库中应用相同的安全性?其中一些模式将只有视图,其中的定义读取其他数据库中的模式和表。
DEV_SECURITY 中的一些模式将允许在视图、表和存储过程上读/写和删除/创建,以确保安全,但也允许另一个数据库。
这是否需要我在所有数据库中构建这些用户及其安全性,或者我是否可以通过仅在安全性中构建它们来简化?
你问的是所有权链。
在一个简单的情况下,当我们在一个数据库中时,当您授予对视图的权限并且该视图由拥有所有基础表的同一主体拥有时,您什么都不做:用户将在没有任何权限的情况下访问该视图底层表。
在您的情况下,有多个数据库,我们正在谈论 跨数据库所有权链接
您应该阅读上面文章中的这一段,以了解启用 crossdb 所有权链时的潜在威胁。
您可以在此处阅读更多相关信息:在 SQL Server 中启用跨数据库访问。
简而言之,要使其正常工作,除了拥有相同所有者的要求之外,您还应该启用两个数据库以 db chainig:
ALTER DATABASE ... SET DB_CHAINING ON
。在这种情况下,您仍然可以只授予对您的视图的权限,而不授予对其他数据库表的权限,但是您仍然应该将您的用户映射到所有感兴趣的数据库中。否则,当您离开数据库时,通过视图所有权链从其他数据库访问表时会中断,您应该授予所有基础表的权限。