我有以下环境:
在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
我在MyDomain
中有一个带有Sales
数据库的SQL Server实例。
Sales
数据库包含一个名为Products
的表,如下所示:
最终用户使用其域帐户(单点登录)访问Products
表以读取数据
商业案例:
Country = USA
的产品,同样德国用户只会看到德国产品。我的方法:
使用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语句在产品数据库中创建了一个视图
SELECT *
FROM Products
WHERE Country = GetCurrentUserCountry()
这是我的问题:
如何在GetCurrentUserCountry()
函数中确定连接用户所属的数据库角色?
换句话说:如果Donald执行上面的select语句,那么函数必须返回'USA',如果Fritz执行语句,那么函数必须返回'GER'
我的期望如下:
SQL Server授予对Donald和Fritz的访问权限,因为他们的域组已注册并映射到Sales
数据库
因此必须可以检索已连接用户的数据库角色
答案 0 :(得分:0)
在GetCurrentUserCountry()函数中,我使用了系统函数IS_MEMBER(' MyDomain_Sales_USA')和IS_MEMBER(' MyDomain_Sales_GER'),这种方法很好,但有一个小的缺点,因为我必须每次创建新的国家/地区组时都会更新该功能。