You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AAD应用程序以编程方式执行Kusto查询

问题分析与解决方案

为什么你的代码会使用个人用户信息执行查询

你当前代码里的DefaultAzureCredential会按优先级尝试多种凭据来源,在本地开发环境下,它会优先调用你本地已登录的身份(比如Visual Studio、Azure CLI中的个人账号),因此才会用你的用户信息执行查询。

如何通过AAD应用程序运行Kusto查询

仅靠应用ID无法完成身份验证,AAD需要验证应用的合法身份,必须结合以下无密钥验证方式之一,同时需要Kusto管理员给该AAD应用分配对应权限(无需修改AAD的API权限,仅需在Kusto集群/数据库层面配置权限):

方式1:使用托管标识(适合Azure部署的应用)

如果你的代码部署在Azure服务(如App Service、VM、Function App)上,可给该服务启用系统分配托管标识:

  • 在Azure门户找到目标服务,进入「标识」选项卡,启用系统分配标识
  • 联系Kusto管理员,在目标集群/数据库上给这个托管标识分配权限,示例命令:
    .add database <数据库名> viewers ('aadapp=<托管标识的对象ID>')
    
  • 修改代码,无需手动获取令牌,DefaultAzureCredential会自动获取托管标识的令牌:
    const string Cluster = "<ClusterName>";
    const string Database = "<Database>";    
    const string Query = "<你的查询语句>";
    
    DefaultAzureCredential credential = new DefaultAzureCredential();
    KustoConnectionStringBuilder builder = new KustoConnectionStringBuilder($"{Cluster}/{Database}")
        .WithAadManagedIdentityAuthentication(credential);
    
    var adminProvider = KustoClientFactory.CreateCslAdminProvider(builder);
    IDataReader dataReader = adminProvider.ExecuteControlCommand(Query);
    

方式2:使用证书(适合本地开发或独立应用)

如果是本地运行代码,可通过证书验证AAD应用身份:

  • 自行生成证书,将公钥提供给AAD管理员,由其上传到应用注册中
  • 联系Kusto管理员给该AAD应用分配目标数据库的权限
  • 修改代码,用证书获取身份令牌:
    const string Cluster = "<ClusterName>";
    const string Database = "<Database>";
    const string ClientId = "<你的AAD应用ID>";
    const string CertificatePath = "<本地证书路径>";
    const string CertificatePassword = "<证书密码>";
    const string Query = "<你的查询语句>";
    
    X509Certificate2 cert = new X509Certificate2(CertificatePath, CertificatePassword);
    KustoConnectionStringBuilder builder = new KustoConnectionStringBuilder($"{Cluster}/{Database}")
        .WithAadApplicationCertificateAuthentication(cert, ClientId);
    
    var adminProvider = KustoClientFactory.CreateCslAdminProvider(builder);
    IDataReader dataReader = adminProvider.ExecuteControlCommand(Query);
    

注意事项

  • 无论采用哪种方式,都需要Kusto管理员在集群/数据库层面给AAD应用(或托管标识)分配对应权限(如Viewer、Editor等),此操作无需修改AAD的API权限
  • 若既没有密钥,也无法协调管理员配置托管标识或证书,暂时无法以纯AAD应用身份执行查询,只能继续使用用户身份,但可通过指定DefaultAzureCredential的参数限制凭据来源,避免自动调用个人账号

内容的提问来源于stack exchange,提问作者Sravani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:33:12