以编程方式为 Power BI 配置凭据

适用范围:️ 应用拥有数据 用户拥有数据

若要以编程方式为 Power BI 配置凭据,请遵循本文中的步骤。 以编程方式配置凭据还允许加密凭据。

注意

  • 调用用户必须是语义模型所有者或网关管理员。还可以使用服务主体。 例如,服务主体可以是语义模型所有者。
  • 云数据源及其相应的凭据在用户级别进行管理。

更新数据源的凭据流

  1. 通过调用“获取数据源”来发现语义模型的数据源。 每个数据源的响应正文都包含类型、连接详细信息、网关和数据源 ID。

    // Select a datasource
    var datasources = pbiClient.Datasets.GetDatasources(datasetId).Value;
    var datasource = datasources.First();
    
  2. 根据更新数据源示例生成凭据字符串。 凭据字符串的内容取决于凭据的类型。

    var credentials =  new BasicCredentials(username: "username", password :"*****");
    

    注意

    如果你使用的是云数据源,请不要执行本部分中的后续步骤。 调用 Update Datasource 以使用在步骤 1 中获取的网关 ID 和数据源 ID 设置凭据。

  3. 调用 Get Gateway 检索网关公钥。

    var gateway = pbiClient.Gateways.GetGatewayById(datasource.GatewayId);
    
  4. 加密凭据。

    var credentialsEncryptor = new AsymmetricKeyEncryptor(gateway.publicKey);
    
  5. 使用加密凭据生成凭据详细信息。

    将 AsymetricKeyEncryptor 类与在步骤 3 中检索到的公钥结合使用。

    var credentialDetails = new CredentialDetails(
            credentials,
            PrivacyLevel.Private,
            EncryptedConnection.Encrypted,
            credentialsEncryptor);
    
  6. 调用 Update Datasource 设置凭据。

    pbiClient.Gateways.UpdateDatasource(datasource.GatewayId.Value, datasource.DatasourceId.Value, new UpdateDatasourceRequest(credentialDetails));
    

为数据网关配置新的数据源

  1. 在计算机上安装本地数据网关

  2. 调用 Get Gateways 检索网关 ID 和公钥。

    // Select a gateway
    var gateways = pbiClient.Gateways.GetGateways().Value;
    var gateway = gateways.First();
    
  3. 使用步骤 2 中检索到的网关公钥,按照更新数据源的凭据流部分所述的流程操作,生成凭据详细信息。

  4. 生成请求正文。

    var request = new PublishDatasourceToGatewayRequest(
            dataSourceType: "SQL",
            connectionDetails: "{\"server\":\"myServer\",\"database\":\"myDatabase\"}",
            credentialDetails: credentialDetails,
            dataSourceName: "my sql datasource");
    
  5. 调用 Create Datasource API。

    pbiClient.Gateways.CreateDatasource(gateway.Id, request);
    

凭据类型

如果在企业本地网关上通过 Power BI REST API 调用 Create DatasourceUpdate 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