我们希望在 Active Directory 中的 SQL Server 2008 上使用 Windows 身份验证。
是否可以将 AD 组用作服务器的登录名,然后将实际的 AD USER 映射到数据库用户?
这个想法是让一个 AD 组具有基本的登录访问权限,然后细化角色和对单个数据库用户列表的访问权限。
我们还使用行级安全性,这样每个用户都可以访问一个国家。
我们希望在 Active Directory 中的 SQL Server 2008 上使用 Windows 身份验证。
是否可以将 AD 组用作服务器的登录名,然后将实际的 AD USER 映射到数据库用户?
这个想法是让一个 AD 组具有基本的登录访问权限,然后细化角色和对单个数据库用户列表的访问权限。
我们还使用行级安全性,这样每个用户都可以访问一个国家。
首先,您想要的方式不会真正起作用。您不能在一个数据库上拥有一个登录名和多个用户。如果您尝试,则会收到以下错误:
您真正应该做的是创建您的通用组并为其创建登录名和用户。这将为每个人提供基本权限。接下来为您要处理的每个国家/地区创建一个广告组。将您的个人添加到这些组中。然后为这些组创建登录名和用户,为他们提供您想要的个人访问权限。
这样做的好处是,如果有人离开公司,您只需将他们从 AD 组中移出并让其他人进入。或者如果必须将第二个人(或更多)添加到一个国家/地区,这是一件微不足道的事情。
编辑:例如:
广告组:DOMAIN\Sales
广告组:DOMAIN\Sales_US
广告组:DOMAIN\Sales_Canada
所有三个组都创建了 SQL 登录 所有三个组还在销售数据库上创建了一个用户。
DOMAIN\Sales 组被授予对表 Inventory 和 InventoryPricing 的 SELECT 访问权限 DOMAIN\Sales_US 组被授予对视图 vw_Sales_US 的 SELECT 权限并在存储过程 usp_Add_US_Sale 和 usp_Edit_US_Sale 上执行 DOMAIN\Sales_Canada 组被授予对视图 vw_Sales_Canada 和的 SELECT 权限在存储过程 usp_Add_Canada_Sale 和 usp_Edit_Canada_Sale 上执行
这使 Bob 可以访问美国信息和共享信息,而 Joe 可以访问加拿大信息和共享信息。
后来,玛丽取代了鲍勃在美国的销售,并且由于加拿大的销售急剧增加,鲍勃加入了乔的加拿大销售。
唯一需要进行的更改是从 DOMAIN\Sales_US 中删除 Bob,添加 Mary 并将 Bob 添加到 DOMAIN\Sales_Canada
是的,您可以将 AD Windows 组用作服务器的登录名,然后将各个AD Windows 登录名映射到相应数据库中的数据库用户。由于 Windows 组登录仅添加访问 SQL Server 和启用来宾用户的任何数据库(master、msdb、tempdb)的权限,因此不会授予其他数据库任何权限。
因此,可以将各个用户分配给不同的数据库,因为 USER 它授予数据库权限。
(当然,如果您将组映射到数据库,那么组中的每个人都可以获得数据库的权限。)
您的行级安全性基于我假设的用户。如果您将 Windows 组添加到数据库,默认情况下(除非您明确命名它们)Windows 组成员将拥有名为“域\登录”的用户。
我知道这是一个老话题,但我实际上是在寻求做同样的事情,并认为我会分享我的解决方案。
确实,默认情况下 CREATE USER 要求您将其分配给服务器主体(登录)。但是,您可以在要创建的用户上指定“WITHOUT LOGIN”(在此示例中,我要为其分配特定权限的单个组成员)。在这种情况下,我仍然将我的数据库主体指定为使用域和 .
我同意一个更好的实现仍然是将单个用户分配给特定的组并以这种方式分配权限(在行级安全性的情况下......有理由想要更改可以访问这些行的用户。确保一致性,如果如果新用户加入或现有用户离开,您可以使用一个组或至少一个角色来执行此操作)。
就我而言,我希望能够为用户分配在 SSISDB 中维护自己的环境变量的能力(我知道,这是 2012 年的一项功能,但此安全实现在 08 和 08R2 中可用),其中唯一拥有编辑这些变量的任何企业都是个人用户,例如他们对未经 Windows 身份验证的数据源的密码。