![](/img/trans.png)
[英]Finding Active Directory Group/Roles Assigned on Multiple SQL Servers
[英]How to retrieve SQL Server database roles for an Active Directory domain group
我有以下环境:
在Microsoft Windows NT 6.1(7601)上运行的Microsoft SQL Server Enterprise 64位版本11.0.5623.0
我有一个名为MyDomain的域,所有最终用户都是该域的成员,例如,来自美国的用户Donald和来自德国的用户Fritz
对于每个国家/地区,我都有一个专用的域组,例如MyDomain_Sales_USA组包含美国用户Donald, MyDomain_Sales_GER包含德国用户Fritz
我在具有Sales
数据库的MyDomain
有一个SQL Server实例。
Sales
数据库包含一个名为Products
的表,如下所示:
最终用户使用其域帐户(单点登录)访问“ Products
表以读取数据
业务案例:
Country = USA
用户只能看到Country = USA
的产品,类似地,德国用户也只能看到Germany产品。 我的方法:
使用SQL Server Management Studio,我将域组MyDomain_Sales_USA和MyDomain_Sales_GER添加到SQL Server Security \\ Logins节点,并将每个组映射到Sales数据库。
我在Sales
数据库中创建了两个数据库角色SalesRole_USA
和SalesRole_GER
。 使用数据库角色属性对话框,将MyDomain_Sales_USA
作为成员添加到SalesRole_USA
角色中,并将MyDomain_Sales_GER
到SalesRole_GER
角色中
我使用以下选择语句在产品数据库中创建了一个视图
SELECT * FROM Products WHERE Country = GetCurrentUserCountry()
这是我的问题:
如何在GetCurrentUserCountry()
函数中确定连接的用户属于哪个数据库角色?
换句话说:如果唐纳德执行上述select语句,则该函数必须返回“美国”,如果弗里茨执行该语句,则该函数必须返回“ GER”
我的期望如下:
SQL Server授予对Donald和Fritz的访问权限,因为它们的域组已注册并映射到Sales
数据库
因此,必须有可能为连接的用户检索数据库角色
在GetCurrentUserCountry()函数中,我使用了系统函数IS_MEMBER('MyDomain_Sales_USA')和IS_MEMBER('MyDomain_Sales_GER'),这很好,但有一个小缺点,因为每次创建新的国家/地区组时都必须更新该函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.