使用服务主体自动完成 Premium 工作区和语义模型任务

服务主体是在租户中创建的 Microsoft Entra ID 应用注册,用于执行无人参与的资源和服务级别操作。 服务主体是独特类型的用户标识,具有应用名称、应用程序 ID、租户 ID 和表示密码的客户端机密或证书。

Power BI Premium 使用与 Power BI Embedded 相同的服务主体功能。 有关详细信息,请参阅使用服务主体嵌入 Power BI 内容

在 Power BI Premium 中,可以搭配使用服务主体与 XMLA (XML Analysis) 终结点来自动执行语义模型管理任务,例如预配工作区、部署模型以及使用以下工具刷新语义模型:

  • PowerShell。
  • Azure 自动化。
  • Azure 逻辑应用。
  • 自定义客户端应用程序。

只有新工作区支持使用服务主体的 XMLA 终结点连接。 不支持经典工作区。 服务主体只具有在其分配的工作区中执行任务所需的权限。 权限是通过工作区访问分配的,与常规 UPN(用户主体名称)帐户非常类似。

若要执行写入操作,容量的语义模型工作负载必须为读写操作启用 XMLA 终结点。 通过 Power BI Desktop 发布的语义模型应启用增强的元数据格式功能。

创建服务主体

通过 Azure 门户或 PowerShell 将服务主体创建为应用注册。 在创建服务主体时,请确保分别复制并保存应用名称、应用程序(客户端)ID、目录(租户)ID 和客户端密码。 若要查看创建服务主体的步骤,请参阅:

创建 Microsoft Entra 安全组

默认情况下,服务主体有权访问为其启用的任何租户设置。 这包括访问特定安全组或整个组织,具体视管理设置而定。

若要限制服务主体访问特定租户设置,可以允许访问特定安全组。 也可以为服务主体创建专用安全组,并将它排除在相应租户设置之外。 若要创建安全组和添加服务主体,请参阅创建基本组并使用 Microsoft Entra ID 添加成员

启用服务主体

管理员必须先在 Power BI 管理门户中启用服务主体访问权限,你才能在 Power BI 中使用服务主体。

  1. 转到 Power BI 管理门户,选择“租户设置”。
  2. 滚动到“开发人员设置”,然后展开“允许服务主体使用 Power BI API”。
  3. 选择“启用”。
  4. 若要将权限应用于安全组,请选择“特定安全组(建议)”。
  5. 输入组名称。
  6. 选择“应用”。

显示管理门户的屏幕截图,其中选择了租户设置。展开了“允许服务主体使用 Power BI API”,并突出显示了“已启用”。

工作区访问权限

为了让服务主体具有执行 Premium 工作区和语义模型操作所需的权限,必须将服务主体添加为工作区成员或管理员。此处描述了如何在 Power BI 服务中使用工作区访问,但也可使用添加组用户 REST API

  1. 在 Power BI 服务的工作区中选择“更多”>“工作区访问”。

    显示工作区列表的屏幕截图。突出显示了“更多”图标和工作区访问权限。

  2. 按应用程序的名称进行搜索,然后以“管理员”或“成员”身份将服务主体添加到工作区。

    显示访问对话框的屏幕截图,其中显示了服务主体名称。选择了“管理员”。

XMLA 终结点的连接字符串

在创建服务主体、为租户启用服务主体并将服务主体添加到工作区访问中后,就可以将它用作 XMLA 终结点连接字符串中的用户标识。 不同之处在于,你指定的不是 user idpassword 参数,而是应用程序 ID、租户 ID 和应用程序机密。

Data Source=powerbi://api.powerbi.com/v1.0/myorg/<workspace name>; Initial Catalog=<dataset name>;User ID=app:<appId>@<tenantId>;Password=<app_secret>;

PowerShell

打开 PowerShell 会话以运行以下示例代码。

使用 SQLServer 模块

以下示例将 AppIdTenantIdAppSecret 用于对语义模型刷新操作进行身份验证:

Param (
        [Parameter(Mandatory=$true)] [String] $AppId,
        [Parameter(Mandatory=$true)] [String] $TenantId,
        [Parameter(Mandatory=$true)] [String] $AppSecret
       )
$PWord = ConvertTo-SecureString -String $AppSecret -AsPlainText -Force

$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $AppId, $PWord

Invoke-ProcessTable -Server "powerbi://api.powerbi.com/v1.0/myorg/myworkspace" -TableName "mytable" -DatabaseName "mydataset" -RefreshType "Full" -ServicePrincipal -ApplicationId $AppId -TenantId $TenantId -Credential $Credential

分析管理对象 (AMO) 和 ADOMD.NET

通过客户端应用程序和 Web 应用进行连接时,可以使用 NuGet 提供的 AMO 和 ADOMD 客户端库 15.1.42.26(2020 年 6 月)及更高版本的可安装包来支持在连接字符串中使用服务主体,方法是使用 app:AppID 语法以及密码或 cert:thumbprint

以下示例使用 appIDpassword 值执行模型数据库刷新操作:

string appId = "xxx";
string authKey = "yyy";
string connString = $"Provider=MSOLAP;Data source=powerbi://api.powerbi.com/v1.0/<tenant>/<workspacename>;Initial catalog=<datasetname>;User ID=app:{appId};Password={authKey};";
Server server = new Server();
server.Connect(connString);
Database db = server.Databases.FindByName("adventureworks");
Table tbl = db.Model.Tables.Find("DimDate");
tbl.RequestRefresh(RefreshType.Full);
db.Model.SaveChanges();