托管身份/证书认证本地文件导入Kusto的技术问询及代码问题
关于Kusto导入本地CSV的认证及代码问题
一、托管身份认证支持本地CSV导入吗?
支持。托管身份(系统分配或用户分配类型)可用于Kusto连接认证,进而完成本地CSV文件导入操作。
示例代码(C#)
using Kusto.Data; using Kusto.Data.Common; using Kusto.Ingest; var clusterUri = "https://<cluster-name>.kusto.windows.net"; var databaseName = "<database-name>"; var tableName = "<table-name>"; var csvFilePath = @"C:\local\data.csv"; // 构建托管身份认证的连接字符串 var kustoConnectionString = new KustoConnectionStringBuilder(clusterUri, databaseName) { FederatedSecurity = true, // 用户分配身份需指定此参数,系统分配身份可省略 ManagedIdentityClientId = "<user-assigned-mi-client-id>" }; // 创建 ingestion 客户端 var ingestClient = KustoIngestFactory.CreateQueuedIngestClient(kustoConnectionString); // 配置导入属性 var ingestionProperties = new KustoQueuedIngestionProperties(databaseName, tableName) { Format = DataSourceFormat.Csv, IgnoreFirstRecord = true // CSV含表头时设置为true }; // 执行本地CSV导入 await ingestClient.IngestFromStorageAsync(csvFilePath, ingestionProperties);
二、证书认证支持本地文件导入吗?
支持。使用ApplicationCertificateBlob证书认证可完成Kusto连接并导入本地CSV,你遇到的**"缺少Application Key"错误源于连接字符串构建方式错误**:当使用证书认证时,不能通过带数据库的格式化字符串初始化连接,需直接用集群URI构建,再单独配置数据库与认证参数,避免SDK误判认证方式。
修复后的证书认证导入示例代码
using Kusto.Data; using Kusto.Data.Common; using Kusto.Ingest; using System.Security.Cryptography.X509Certificates; var clusterUri = "https://<cluster-name>.kusto.windows.net"; var databaseName = "<database-name>"; var tableName = "<table-name>"; var csvFilePath = @"C:\local\data.csv"; var clientId = "<application-client-id>"; var tenantId = "<tenant-id>"; // 加载证书文件 var certificate = new X509Certificate2(@"C:\path\to\certificate.pfx", "<certificate-password>"); // 正确构建证书认证的连接字符串 var kustoConnectionString = new KustoConnectionStringBuilder(clusterUri) { FederatedSecurity = true, ApplicationClientId = clientId, Authority = tenantId, ApplicationCertificateBlob = certificate.Export(X509ContentType.Pfx, "<certificate-password>"), ApplicationCertificateSendX5c = true }; // 创建 ingestion 客户端 var ingestClient = KustoIngestFactory.CreateQueuedIngestClient(kustoConnectionString); var ingestionProperties = new KustoQueuedIngestionProperties(databaseName, tableName) { Format = DataSourceFormat.Csv, IgnoreFirstRecord = true }; // 执行本地CSV导入 await ingestClient.IngestFromStorageAsync(csvFilePath, ingestionProperties);
错误原因说明
你之前的代码通过string.Format(KustoConnectionString, clusterName, dbName)构建连接字符串,若模板格式存在错误(比如包含了密钥相关占位符),会导致SDK误将证书认证判定为需要密钥的认证方式,从而抛出错误。直接用集群URI初始化KustoConnectionStringBuilder可避免此问题。
内容的提问来源于stack exchange,提问作者H A
相关产品推荐
相关产品推荐

