使用服务主体自动完成 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 中使用服务主体。
- 转到 Power BI 管理门户,选择“租户设置”。
- 滚动到“开发人员设置”,然后展开“允许服务主体使用 Power BI API”。
- 选择“启用”。
- 若要将权限应用于安全组,请选择“特定安全组(建议)”。
- 输入组名称。
- 选择“应用”。
工作区访问权限
为了让服务主体具有执行 Premium 工作区和语义模型操作所需的权限,必须将服务主体添加为工作区成员或管理员。此处描述了如何在 Power BI 服务中使用工作区访问,但也可使用添加组用户 REST API。
在 Power BI 服务的工作区中选择“更多”>“工作区访问”。
按应用程序的名称进行搜索,然后以“管理员”或“成员”身份将服务主体添加到工作区。
XMLA 终结点的连接字符串
在创建服务主体、为租户启用服务主体并将服务主体添加到工作区访问中后,就可以将它用作 XMLA 终结点连接字符串中的用户标识。 不同之处在于,你指定的不是 user id
和 password
参数,而是应用程序 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 模块
以下示例将 AppId
、TenantId
和 AppSecret
用于对语义模型刷新操作进行身份验证:
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
。
以下示例使用 appID
和 password
值执行模型数据库刷新操作:
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();