设置有效标识

已完成

在生成嵌入令牌时,可以使用“针对客户”方案设置有效标识。

应用逻辑将首先创建一个或多个 effectiveidentity 对象的列表。 每个对象可以包含以下参数。

  • Datasets -(必需)DatasetID 列表。

  • Username -(可选)对于内部托管模型,它是由 USERNAME 或 USERPRINCIPALNAME 函数返回的文本值。 对于外部托管模型,它是连接到模型的用户名。

  • Roles -(可选)角色名称列表。

  • CustomData -(可选)由 CUSTOMDATA 函数返回的文本值。

  • IdentityBlob -(可选)Azure AD 访问令牌,它是用于与 Microsoft Azure SQL 数据库建立 DirectQuery 连接的基于令牌的标识。 它允许在没有数据模型 RLS 的情况下强制实施数据权限。 本单元稍后会介绍此主题。

你可能会传入数据集列表,因为嵌入令牌将用于嵌入连接到不同数据集的许多 Power BI 项目,或者因为仪表板包含连接到多个数据集的磁贴。 传入多个角色的列表时,将同时强制实施所有角色,这意味着用户可以看到角色授予的数据的联合。

以下示例创建一个包含一个 effectiveidentity 对象的列表。 它将传入当前应用用户的用户名、区域角色和工作区中第一个(且可能是唯一一个)数据集。

// Create effective identity for the first dataset
var datasetId = datasets[0].Id.ToString();
var effectiveIdentities = new List<EffectiveIdentity>() {
	new EffectiveIdentity(
		username: userProfile.Username,
		roles: new List<string> {"Region"},
		datasets: new List<string> {datasetId})
};

接下来,为了生成嵌入令牌,应用会将列表传递给 GenerateTokenRequestV2 方法的 identities 参数。 (还有其他生成嵌入令牌的方法;每种方法都允许传入有效标识的列表。)

// Bundle token requests for the reports, datasets, and the workspace
var tokenRequest = new GenerateTokenRequestV2(
    reports: reportTokenRequests,
    datasets: datasetTokenRequests,
    targetWorkspaces: workspaceRequests,
    identities: effectiveIdentities
) ;

以下主题提供有关为每个 Power BI 数据集类型设置有效标识的更多详细信息。

为内部托管的导入表设置有效标识

传递有效标识以使用导入表连接到内部托管模型时,请考虑以下参数:

  • 模型中至少必须定义一个角色。

  • 必须传递用户名,但不需要是真正的用户名。 传入的值由 USERNAME 或 USERPRINCIPALNAME 函数返回。

  • 有效标识必须至少定义一个角色。

为内部托管的 DirectQuery 表设置有效标识

若要为内部托管的 DirectQuery 表设置有效标识,请针对内部托管导入表使用相同的指南。

此外,还可以使用基于令牌的标识。 基于令牌的标识允许使用 Azure AD 访问令牌指定嵌入令牌的有效标识,但前提是源是 Azure SQL 数据库。 生成嵌入令牌时,应用会将访问令牌传递给 IdentityBlob 参数。 在这种情况下,不需要将值传递给 username 参数。

使用基于令牌的标识要求数据集所有者将数据源设置为使用最终用户的 OAuth2 凭据。 这样,Power BI 使用有效的标识用户名连接到数据源。 这意味着数据库可以强制实施 RLS 而不是数据模型。

有关基于令牌的标识的详细信息,请参阅 Power BI Embedded 的行级别安全性(Azure SQL 数据库的基于令牌的标识)。

为 Azure Analysis Services 设置有效标识

若要在使用 Azure Analysis Services 模型时设置有效标识,需要确保嵌入标识(服务主体或主用户帐户)至少具有对模型的读取权限。

如果未传递有效标识,并且嵌入标识帐户是 Analysis Services 管理员,则所有应用用户都可查看所有模型数据。 当嵌入标识帐户不是 Analysis Services 管理员时,数据可见性受该帐户分配的角色的限制。

注意

使用带有 Azure Analysis Services 模型的服务主体时,服务主体必须具有 Azure Analysis Services 实例权限。 使用包含服务主体的安全组来实现此目的,这不起作用。

传递有效标识以使用 Azure Analysis Services 模型时,请考虑以下参数:

  • 模型中至少必须定义一个角色。

  • 用户名必须是主用户帐户(UPN 格式)或服务主体 (ObjectID)。

  • 当没有任何角色属于有效标识时,将应用分配给有效标识帐户的角色。

  • USERNAME 函数将返回有效标识用户名。

为 SQL Server Analysis Services 设置有效标识

若要在使用 SQL Server Analysis Services 模型时设置有效标识,需要确保网关数据源凭据设置为 Analysis Services 管理员。

有效标识(服务主体或主用户帐户)必须是网关管理员或对网关数据源具有 ReadOverrideEffectiveIdentity 权限。 只能使用 Power BI REST API 设置此权限。

如果未传递有效标识,并且嵌入标识帐户是 Analysis Services 管理员,则所有用户都可查看所有模型数据。 当嵌入标识帐户不是 Analysis Services 管理员时,数据可见性受该帐户分配的角色的限制。

传递有效标识以使用 SQL Server Analysis Services 模型时,请考虑以下参数:

  • 模型中至少必须定义一个角色。

  • 用户名必须是 Windows 帐户,使用 UPN 或 DOMAIN\username 格式。

  • 用户名必须对模型具有读取权限。

  • 当没有任何角色属于有效标识时,将应用分配给有效标识用户名的角色。

  • USERNAME 函数将返回有效标识用户名。

  • 不支持使用 CUSTOMDATA 函数。

比较数据集类型

下表比较了四种数据集类型的有效标识参数设置。

参数 内部托管的导入表 内部托管的 DirectQuery 表 Azure Analysis Services SQL Server Analysis Services
用户名 将由 USERNAME 和 USERPRINCIPALNAME 函数返回的任何文本值 将由 USERNAME 和 USERPRINCIPALNAME 函数返回的任何文本值 它用于向服务进行身份验证。 它必须是主用户帐户(UPN 格式)或服务主体 (ObjectID)。 它用于向服务进行身份验证。 它必须是 Windows 帐户,使用 UPN 或 DOMAIN\username 格式。
CustomData 支持 支持 支持 不支持
角色 有效标识必须至少定义一个角色 有效标识必须至少定义一个角色 如果未传递任何角色,则会应用分配给有效标识帐户的角色 如果未传递任何角色,则会应用分配给有效标识帐户的角色
IdentityBlob 是的,当源数据是 Azure SQL 数据库时(应强制执行 RLS 要求)
其他信息 需要网关。 有效标识帐户必须是网关管理员。