以编程方式为 Power BI 配置凭据
- 版本 :2023.1(当前版本)
以编程方式为 Power BI 配置凭据
✔️ 应用拥有数据 ✔️ 用户拥有数据
按照本文中的步骤以编程方式为 Power BI 配置凭据。 以编程方式配置凭据还允许加密凭据。
备注
调用用户必须是数据集所有者或网关管理员。还可以使用服务主体。 例如,服务主体可以是数据集所有者。
云数据源及其相应的凭据在用户级别进行管理。
更新数据源的凭据流
调用 Get Datasources 发现数据集的数据源。 每个数据源的响应正文都包含类型、连接详细信息、网关和数据源 ID。
C#复制
// Select a datasourcevar datasources = pbiClient.Datasets.GetDatasources(datasetId).Value;var datasource = datasources.First();
根据更新数据源示例生成凭据字符串。 凭据字符串的内容取决于凭据的类型。
C#复制
var credentials = new BasicCredentials(username: "username", password :"*****");
备注
如果你使用的是云数据源,请不要执行本部分中的后续步骤。 调用 Update Datasource 以使用在步骤 1 中获取的网关 ID 和数据源 ID 设置凭据。
.NET SDK v3
.NET SDK v2
调用 Get Gateway 检索网关公钥。
C#复制
var gateway = pbiClient.Gateways.GetGatewayById(datasource.GatewayId);
加密凭据。
C#复制
var credentialsEncryptor = new AsymmetricKeyEncryptor(gateway.publicKey);
.NET SDK v3
.NET SDK v2
使用加密凭据生成凭据详细信息。
将 AsymetricKeyEncryptor 类与在步骤 3 中检索到的公钥结合使用。
C#复制
var credentialDetails = new CredentialDetails(
credentials,
PrivacyLevel.Private,
EncryptedConnection.Encrypted,
credentialsEncryptor);.NET SDK v3
.NET SDK v2
调用 Update Datasource 设置凭据。
C#复制
pbiClient.Gateways.UpdateDatasource(datasource.GatewayId.Value, datasource.DatasourceId.Value, new UpdateDatasourceRequest(credentialDetails));
为数据网关配置新的数据源
在计算机上安装本地数据网关。
调用 Get Gateways 检索网关 ID 和公钥。
C#复制
// Select a gatewayvar gateways = pbiClient.Gateways.GetGateways().Value;var gateway = gateways.First();
使用步骤 2 中检索到的网关公钥,按照更新数据源的凭据流部分所述的流程操作,生成凭据详细信息。
生成请求正文。
C#复制
var request = new PublishDatasourceToGatewayRequest(
dataSourceType: "SQL",
connectionDetails: "{\"server\":\"myServer\",\"database\":\"myDatabase\"}",
credentialDetails: credentialDetails,
dataSourceName: "my sql datasource");调用 Create Datasource API。
C#复制
pbiClient.Gateways.CreateDatasource(gateway.Id, request);
凭据类型
如果在企业本地网关上通过 Power BI REST API 调用 Create Datasource 或 Update Datasource,请使用网关公钥加密凭据值。
备注
.NET SDK v3 还可以运行下面的 .NET SDK v2 示例。
Windows 和基本凭据
.NET SDK v3
.NET SDK v2
C#复制// Windows credentialsvar credentials = new WindowsCredentials(username: "john", password: "*****");// Or// Basic credentialsvar credentials = new BasicCredentials(username: "john", password: "*****");var credentialsEncryptor = new AsymmetricKeyEncryptor(publicKey);var credentialDetails = new CredentialDetails(credentials, PrivacyLevel.Private, EncryptedConnection.Encrypted, credentialsEncryptor);
密钥凭据
.NET SDK v3
.NET SDK v2
C#复制var credentials = new KeyCredentials("TestKey");var credentialsEncryptor = new AsymmetricKeyEncryptor(publicKey);var credentialDetails = new CredentialDetails(credentials, PrivacyLevel.Private, EncryptedConnection.Encrypted, credentialsEncryptor);
OAuth2 凭据
.NET SDK v3
.NET SDK v2
C#复制var credentials = new OAuth2Credentials("TestToken");var credentialsEncryptor = new AsymmetricKeyEncryptor(publicKey);var credentialDetails = new CredentialDetails(credentials, PrivacyLevel.Private, EncryptedConnection.Encrypted, credentialsEncryptor);
匿名凭据
.NET SDK v3
.NET SDK v2
C#复制var credentials = new AnonymousCredentials();var credentialDetails = new CredentialDetails(credentials, PrivacyLevel.Private, EncryptedConnection.NotEncrypted);
故障排除
调用 Get Datasources 时未找到任何网关和数据源 ID
此问题意味着数据集未绑定到网关。 在新建数据集时,将在用户的云网关上自动为每个云连接创建不含凭据的数据源。 此云网关用于存储云连接的凭据。
创建数据集后,会在数据集与合适的网关之间创建自动绑定,网关包含适用于所有连接的匹配数据源。 如果没有合适的网关,自动绑定将失败。
如果使用的是本地数据集,请创建缺少的本地数据源,并按照绑定到网关中的说明操作,手动将数据集绑定到网关。
要发现可绑定的网关,请使用 Discover Gateways。