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

.NET Core Azure Function中用Azure Keyvault管理local.setting.json数据库连接串

将.NET Core 2.2.4 Azure Function的SQL连接串迁移到Azure Key Vault

步骤1:准备Azure Key Vault及权限配置

  • 在Azure门户创建或使用现有Key Vault,将SQL数据库的密码作为机密存入(命名示例:SQL-DB-Password)。
  • 给你的Azure Function应用开启系统托管标识(在函数应用「身份」选项卡操作),然后在Key Vault的「访问策略」中添加该标识,授予「机密读取」权限。

步骤2:本地开发环境配置(local.setting.json)

提供两种适配方案:

方案A:使用Key Vault自动引用(需本地登录Azure账户)

修改local.setting.json,把连接串中的明文密码替换为Key Vault机密引用:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "SQLConnectionString": "Server=tcp:xxxx-sql.database.windows.net,1433;Initial Catalog=abc-db;Persist Security Info=False;User ID=xxxx;Password=@Microsoft.KeyVault(SecretUri=https://你的密钥保管库名称.vault.azure.net/secrets/SQL-DB-Password/);MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
  }
}

本地运行前,确保已用Azure CLI登录有权限访问该Key Vault的账户:az login

方案B:代码手动读取机密拼接连接串(兼容性更强)

  1. 安装适配.NET Core 2.2的NuGet包:Azure.Security.KeyVault.Secrets、Azure.Identity
  2. 修改local.setting.json,拆分连接串模板与Key Vault地址:
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "KeyVaultUri": "https://你的密钥保管库名称.vault.azure.net/",
    "SQLConnectionStringTemplate": "Server=tcp:xxxx-sql.database.windows.net,1433;Initial Catalog=abc-db;Persist Security Info=False;User ID=xxxx;Password={0};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
  }
}
  1. 在函数类中通过IConfiguration读取机密并拼接连接串:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Microsoft.Extensions.Configuration;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

public class MySqlFunction
{
    private readonly string _sqlConnectionString;

    // 通过依赖注入获取IConfiguration
    public MySqlFunction(IConfiguration configuration)
    {
        var vaultUri = configuration["KeyVaultUri"];
        var secretClient = new SecretClient(new Uri(vaultUri), new DefaultAzureCredential());
        var passwordSecret = secretClient.GetSecret("SQL-DB-Password").Value;
        var connectionTemplate = configuration["SQLConnectionStringTemplate"];
        
        _sqlConnectionString = string.Format(connectionTemplate, passwordSecret.Value);
    }

    [FunctionName("MySqlFunction")]
    public void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
    {
        // 使用_sqlConnectionString执行数据库操作
        log.LogInformation($"数据库连接串已准备就绪");
    }
}

步骤3:Azure部署环境配置

  • 函数应用启用系统托管标识后,在Azure门户的函数应用「配置」中添加对应设置:
    • 若用方案A:直接将SQLConnectionString设置为带Key Vault引用的完整连接串
    • 若用方案B:添加KeyVaultUri和SQLConnectionStringTemplate两个配置项,值与本地一致
  • 确认Key Vault的访问策略已正确授予函数应用标识的机密读取权限

步骤4:验证

本地运行函数测试数据库连接,部署到Azure后触发函数,确认数据库操作正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:47:38