配置行级安全性 (RLS)

通过调整为表定义的角色或表格权限即可更改 RLS。 在特定角色中选择某个表格权限时,可在“表达式编辑器”窗口中查看此 DAX 筛选表达式。 此筛选表达式是 RLS 配置中最关键的部分,用于决定用户能看到哪些数据。
- 关于数据安全和 RLS/OLS: RLS 与 OLS 的功能概览。
- 设置/修改 RLS 配置(本文): 如何在 Dataset 中配置 RLS。
- 修改/设置 OLS 配置: 如何在 Dataset 中配置 OLS。
- 使用模拟身份测试 RLS/OLS: 如何使用 Tabular Editor 轻松验证数据安全。
在 Tabular Editor 3 中配置 RLS
下面概述了对现有 RLS 常见的一些修改:
1。 删除角色
要从模型中删除角色,只需选中角色对象后按 Del,或右键并选择“删除”。

Note
只要模型中至少还存在另一个角色,原本分配到该角色的所有用户将无法再查看模型数据。
2。 添加新角色
要在模型中添加角色:
- 右键单击“角色”对象类型: 这将打开一个对话框,供你创建新角色。
- 选择“Create” > “角色”: 给新角色命名。

- 将
Model Permission属性设置为Read: 这是确保该角色的所有成员都能访问 Dataset 的必要设置。

- 设置权限: 按下文所述设置 RLS 表格权限和/或 OLS 对象权限。
3。 移除 RLS
要从模型中移除 RLS,必须删除所有表格权限。 要从模型中移除数据安全性,必须删除所有角色。
Note
删除所有角色后,只要用户对 Dataset 具有 Read 权限,就能看到所有数据。
4。 修改表格权限
要修改某个角色的现有表格权限:
- 展开角色: 这将显示表格权限。
- 选择表格权限: 这会在表达式编辑器中显示筛选权限 FILTER 的 DAX。

- 调整 FILTER 表达式 / RLS 表格权限: 建议你在使用前先测试 / 验证 DAX:
- 将 FILTER 表达式复制到新的 DAX 查询窗口,并放在
EVALUATE语句下方。 - 在
ADDCOLUMNS语句中,将其作为 Expression,用于遍历某个表或其子集。 - 执行并观察结果。
- 在动态 RLS 中,将
USERNAME()或USERPRINCIPALNAME()替换为安全表中的已知值。 - 重新运行 DAX 查询,并验证结果是否符合预期。 重复以上步骤,直到满意为止。

EVALUATE
// 创建表以测试你的 RLS
ADDCOLUMNS (
VALUES ( 'Regions'[Territory Directors] ),
"@RLS-Validation",
// RLS 代码
VAR _CurrentUser =
SELECTCOLUMNS (
FILTER (
'Employees',
'Employees'[Employee Email]
// 用用户邮箱替换 USERPRINCIPALNAME() 进行测试
= "gal.aehad@spaceparts.co" // USERPRINCIPALNAME ()
),
"@Name", 'Employees'[Employee Name]
)
RETURN
'Regions'[Territory Directors] IN _CurrentUser
)
// 按 TRUE() 到 FALSE() 的顺序排序
// 为 TRUE() 的行将显示数据
ORDER BY [@RLS-Validation] DESC
5。 为角色添加新的表格权限
要添加新的表格权限:
- 右键单击角色: 选择“添加表格权限……”

- 选择表并点击“确定”: 选择要为其创建权限的表。
- 编写 FILTER 筛选表达式 / RLS 表格权限: 为 FILTER 筛选表达式编写 DAX。 同上,你需要验证此筛选表达式(见 图 5):
- 将 FILTER 筛选表达式复制到新的 DAX 查询窗口,并放在
EVALUATE语句下。 - 将其作为
ADDCOLUMNS语句的表达式,并对表或表的一部分进行迭代。 - 执行并查看结果。
- 将动态 RLS 中的
USERNAME()或USERPRINCIPALNAME()替换为安全表中的已知值。 - 重新运行 DAX 查询,并验证结果是否符合预期。 重复以上步骤,直到满意为止。
6。 为角色分配或移除用户
你可以在 Tabular Editor 中为角色分配或移除用户/组。
- 右键单击__角色__,选择__编辑成员__……

- 在“添加 Windows AD 成员”按钮上单击__下拉按钮__,然后选择__Azure AD 成员__:

- 在__成员名称__属性中指定 Azure AD 用户标识(通常是用户电子邮件地址)。
- 单击__确定__。
- __保存__模型。
Important
如果您的组织在 SQL Server Analysis Services 中使用本地 Active Directory,则需要使用__Windows AD 成员__选项,而不是__Azure AD 成员__。
Note
将 Power BI Dataset 发布到 Power BI 服务后,您还可以通过Dataset 安全设置来管理角色成员。 此外,您还可以通过 SQL Server Management Studio 来管理角色成员(除 Power BI Dataset 外,这也适用于 AAS/SSAS 模型)。