使用服務主體來自動執行 Premium 工作區與語意模型工作
服務主體是在租用戶內建立的 Microsoft Entra ID「應用程式註冊」,其用於執行自動資源與服務等級作業。 服務主體是一種唯一的使用者身分識別,其具有應用程式名稱、應用程式識別碼、租用戶識別碼,以及密碼的「用戶端祕密」或憑證。
Power BI Premium 使用與 Power BI Embedded 相同的服務主體功能。 若要深入了解,請參閱搭配服務主體內嵌 Power BI 內容。
在 Power BI Premium 中,您可以將服務主體與 XMLA (XML Analysis) 端點搭配使用,透過下列方式自動執行語意模型管理工作,例如佈建工作區、部署模型和語意模型重新整理:
- PowerShell。
- Azure 自動化。
- Azure Logic Apps。
- 自訂用戶端應用程式。
只有新的工作區可透過使用服務主體來支援 XMLA 端點連線。 傳統工作區則不受支援。 服務主體僅具有在指派給它的工作區上執行工作所需的權限。 權限是透過工作區存取指派的,這與一般 UPN (使用者主體名稱) 帳戶非常相似。
若要執行寫入作業,容量的語意模型工作負載必須為讀寫作業啟用 XMLA 端點。 從 Power BI Desktop 發佈的語意模型應啟用增強型中繼資料格式功能。
建立服務主體
服務主體可在 Azure 入口網站中作為應用程式註冊建立,或使用 PowerShell 建立。 建立服務主體時,請務必分別複製並儲存應用程式名稱、應用程式 (用戶端) 識別碼、目錄 (租用戶) 識別碼,以及用戶端祕密。 如需如何建立服務主體的步驟,請參閱:
建立 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
參數。
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();