角色
适用于: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
表格模型中的角色定义模型的成员权限。 角色的成员可以根据角色权限定义对模型执行操作。 使用读取权限定义的角色还可以通过使用行级筛选器在行级别提供更多的安全性。
对于 Azure Analysis Services 和 Power BI 语义模型,用户必须位于Microsoft Entra ID 中。 用户名和组由组织电子邮件地址或用户主体名称(UPN)指定。 对于 SQL Server Analysis Services,角色包含由 Windows 用户名或 Windows 组指定的用户成员以及权限(读取、进程、管理员)。
重要
如果使用 Visual Studio 创建角色并将用户添加到将部署到 Azure Analysis Services 或 Power BI 的表格模型项目,请使用 集成工作区。
重要
若要让用户使用报告客户端应用程序连接到已部署的模型,必须创建至少具有读取权限的一个角色。 将报告客户端应用的用户作为成员添加到角色。
本文中的信息适用于使用 SSDT 中的“角色管理器”对话框定义角色的表格模型作者。 在模型创作过程中定义的角色适用于模型工作区数据库。 部署模型数据库后,模型数据库管理员可以使用 SSMS 管理(添加、编辑、删除)角色成员。
了解角色
Analysis Services 中使用角色来管理模型数据访问。 有两种类型的角色:
服务器角色是一个固定角色,它提供对 Analysis Services 服务器实例的管理员访问权限。 服务器角色不适用于 Power BI。 相反,Power BI使用
工作区角色。 数据库角色由模型作者和管理员定义,用于控制对模型数据库和数据的访问权限。
为表格模型定义的角色是数据库角色。 这些角色包含具有特定权限的用户或组,这些用户或组定义这些成员可以对模型数据库执行的操作。 角色在数据库中创建为单独的对象,仅适用于在其中创建角色的数据库。 模型作者将用户和组添加到角色。 默认情况下,模型作者对工作区数据库服务器具有管理员权限;对于已部署的模型,角色成员由管理员添加。
可以使用行筛选器进一步定义表格模型中的角色,也称为 行级别安全性。 行筛选器使用 DAX 表达式定义表中的行,以及用户可以查询的许多方向的任何相关行。 只能为 读取 和 读取和处理 权限定义使用 DAX 表达式的行筛选器。 在 Power BI 中,模型角色在 Power BI Desktop 中定义,仅适用于行级别安全性。 若要了解详细信息,请参阅本文后面的 行筛选器。
默认情况下,创建新的表格模型项目时,项目没有定义任何角色。 使用 SSDT 中的“角色管理器”对话框定义角色。 在模型创作期间定义角色时,这些角色将应用于模型工作区数据库。 部署模型时,相同的角色将应用于已部署的模型。 部署模型后,服务器角色(Analysis Services 管理员)和数据库管理员可以使用 SSMS 管理与模型关联的角色和与每个角色关联的成员。
权限
本节中所述的角色权限仅适用于 Azure Analysis Services 和 SQL Server Analysis Services。 在 Power BI 中,为语义模型定义权限。 若要了解详细信息,请参阅 管理语义模型访问。
每个角色都有一个定义的数据库权限(除了合并的读取和进程权限除外)。 默认情况下,新角色具有“无” 权限。 将成员添加到具有 None 权限的角色时,除非授予其他权限,否则成员无法修改数据库、运行进程操作、查询数据或查看数据库。
组或用户可以是任意数量的角色的成员,每个角色都具有不同的权限。 当用户是多个角色的成员时,为每个角色定义的权限是累积的。 例如,如果用户是具有读取权限的角色的成员,并且是具有 None 权限的角色的成员,该用户具有读取权限。
每个角色都可以定义以下权限:
权限 | 描述 | 使用 DAX 的行筛选器 |
---|---|---|
没有 | 成员无法对模型数据库架构进行任何更改,并且无法查询数据。 | 行筛选器不适用。 此角色中的用户看不到任何数据 |
读 | 允许成员查询数据(基于行筛选器),但看不到 SSMS 中的模型数据库,无法对模型数据库架构进行任何更改,并且用户无法处理模型。 | 可以应用行筛选器。 只有行筛选器 DAX 公式中指定的数据对用户可见。 |
读取和处理 | 成员可以通过运行包含进程命令的脚本或包来查询数据(基于行级筛选器)并运行进程操作,但不能对数据库进行任何更改。 具有权限的用户无法在 SSMS 中查看模型数据库。 | 可以应用行筛选器。 只能查询行筛选器 DAX 公式中指定的数据。 |
过程 | 成员可以通过运行包含进程命令的脚本或包来运行进程操作。 成员无法修改模型数据库架构,无法查询数据,也不能在 SSMS 中查询模型数据库。 | 行筛选器不适用。 此角色中无法查询任何数据 |
管理员 | 成员可以对模型架构进行修改,并且可以查询模型设计器、报告客户端和 SSMS 中的所有数据。 | 行筛选器不适用。 可以在此角色中查询所有数据。 |
注意
具有读取和读取和处理权限的成员可以根据行筛选器查询数据,但看不到 SSMS 中的模型数据库。 成员无法更改模型数据库架构,并且无法处理模型。 但是,在 SQL Server Analysis Services 2019 及更早版本中,成员可以使用 DMV 来确定度量值定义。 SQL Server Analysis Services 2022 及更高版本阻止访问 DMV 以提高安全性。
行筛选器
行筛选器(通常称为 Power BI中的
只能为具有 读取 和 读取和处理 权限的角色定义行筛选器。 默认情况下,如果未为特定表定义行筛选器,则具有读取或读取和处理权限的角色的成员可以查询表中的所有行,除非交叉筛选从另一个表应用。
为特定表定义行筛选器后,计算结果为 TRUE/FALSE 值的 DAX 公式定义可由该特定角色的成员查询的行。 DAX 公式中不包含的行无法查询。 例如,对于“销售”角色的成员,如果“客户”表具有以下行筛选器表达式,=Customers [Country] = “USA”,则 Sales 角色的成员将仅看到美国的客户。
行筛选器适用于指定的行和相关行。 当表具有多个关系时,筛选器会为处于活动状态的关系应用安全性。 行筛选器将与为相关表定义的其他行文件器相交,例如:
桌子 | DAX 表达式 |
---|---|
地区 | =Region[Country]=“USA” |
ProductCategory | =ProductCategory[Name]=“Bicycles” |
交易 | =Transactions[Year]=2020 |
这些权限对 Transactions 表的净影响是,成员可以查询客户在美国的数据行,产品类别为自行车,年为 2020 年。 用户无法查询美国以外的任何事务,或者任何不是自行车的事务,或者 2020 年没有的任何事务,除非他们是授予这些权限的另一个角色的成员。
可以使用筛选器 (=FALSE()来拒绝对整个表的所有行的访问。
若要详细了解 Power BI 中的模型角色,请参阅 Power BI中的
动态安全性
动态安全允许根据当前登录的用户的用户名或从连接字符串返回的 CustomData 属性定义行级别安全性。 若要实现动态安全性,必须包括一个表,其中包含用户的登录名(Windows 用户名)值,以及可用于在模型中定义特定权限的字段。 例如,包括一个 dimEmployees 表,其中包含登录 ID(域\用户名)以及模型中每个员工的部门值。
若要实现动态安全性,可以使用以下函数作为 DAX 公式的一部分返回当前登录的用户的用户名或连接字符串中的 CustomData 属性:
功能 | 描述 |
---|---|
USERNAME 函数 (DAX) | 返回当前登录的用户的域\用户名。 |
CUSTOMDATA 函数 (DAX) | 返回连接字符串中的 CustomData 属性。 |
可以使用 LOOKUPVALUE 函数返回 Windows 用户名与 USERNAME 函数返回的用户名或 CustomData 函数返回的字符串相同的列的值。 查询可以受到限制,其中 LOOKUPVALUE 返回的值与相同或相关表中的值匹配。
例如,使用此公式:
='dimDepartment'[DepartmentId]=LOOKUPVALUE('dimEmployees'[DepartmentId], 'dimEmployees'[LoginId], USERNAME(), 'dimEmployees'[LoginId], 'dimDepartment'[DepartmentId])
LOOKUPVALUE 函数返回 dimEmployees[DepartmentId] 列的值,其中 dimEmployees[LoginId] 与当前登录的用户的 LoginID 相同,USERNAME 返回的值和 dimEmployees[DepartmentId] 的值与 dimDepartment[DepartmentId] 的值相同。 然后,LOOKUPVALUE 返回的 DepartmentId 中的值用于限制 dimDepartment 表中查询的行,以及由 DepartmentId 相关的任何表。 仅返回 DepartmentId 也位于 LOOKUPVALUE 函数返回的 DepartmentId 值中的行。
dimEmployees
LastName | FirstName | LoginId | DepartmentName | DepartmentId |
---|---|---|---|---|
棕色 | 凯文 | Adventure-works\kevin0 | 营销 | 7 |
布拉德利 | 大卫 | Adventure-works\david0 | 营销 | 7 |
Dobney | JoLynn | Adventure-works\JoLynn0 | 生产 | 4 |
Baretto DeMattos | 宝拉 | Adventure-works\Paula0 | 人力资源 | 2 |
dimDepartment
DepartmentId | DepartmentName |
---|---|
1 | 企业 |
2 | 行政总经理和管理 |
3 | 库存管理 |
4 | 制造业 |
5 | 质量保证 |
6 | 研发 |
7 | 销售和市场营销 |
测试角色
在 Visual Studio 中创建模型项目时,可以使用“在 Excel 中分析”功能来测试已定义角色的有效性。 在模型设计器的
脚本角色
可以使用 表格模型脚本语言(TMSL) 来创建或修改 Roles 对象来编写已部署模型和语义模型的角色。 可以在 SSMS 中或使用 Invoke-ASCmd PowerShell cmdlet 执行 TMSL 脚本。
另请参阅
创建和管理角色
透视
在 Excel 中
USERNAME 函数 (DAX)
LOOKUPVALUE 函数 (DAX)
CUSTOMDATA 函数 (DAX)