我有一个 Azure SQL 托管实例,我需要在该实例上对某些表实施行级安全性以过滤某些用户查询的数据。
我的所有用户都使用 Azure Active Directory 身份验证进行身份验证,并且他们可以根据他们在我的 SQL 实例上配置的特定 AAD 组的成员身份访问数据库。(即在 SQL 中,我没有为登录或数据库访问或选择权限配置任何单个用户,只有 AAD 组)。
我正在尝试找到一种使用相同模型实现行级安全性的方法。所以我想通过引用我需要过滤掉表中行的特定 AAD 组来实现它。
例如
用户Bob属于 AAD 组DepartmentA。
DepartmentA组在我的 SQL 托管实例上启用以登录,并被授予SELECT
对数据库 DatabaseA 中所有表的权限
我想通过编写一个策略来过滤TableA中具有行级安全性的行,该策略让我的DepartmentA组中的所有用户只能看到与其部门相关的记录(假设部门名称写在表列上)。
有什么方法可以实现吗?
我发现了类似的功能IS_MEMBER()
,IS_ROLEMEMBER()
但它们似乎只适用于普通的 Windows 域,而不适用于 Azure AD。
谢谢
一个用户可以是可以访问您的数据库的多个安全组的成员。因此,USER_NAME() 系列函数都不会返回角色安全主体。
您可以通过查询sys.user_token或为特定角色运行IS_ROLEMEMBER来查找用户的所有活动组成员身份。
只要您已将该安全组添加为用户,IS_ROLEMEMBER() 就适用于 AAD 安全组。例如
或者,对于 MI