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