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

如何在Azure DevOps CI/CD流水线中使用Azure SQL Always Encrypted

Azure SQL Always Encrypted(Dacpac)Azure DevOps CI/CD 实现方案

具体实现流程

CI 构建阶段

  • 拉取包含SQL数据库项目(.sqlproj)的代码仓库,项目内需提前完成Always Encrypted配置:包含加密列定义、列主密钥(CMK)、列加密密钥(CEK)的元数据声明,禁止将真实密钥明文存入代码仓库
  • 使用MSBuild或dotnet build命令构建SQL项目,生成.dacpac产物,构建过程无需访问真实加密密钥,仅验证加密元数据的语法合法性
  • 将生成的Dacpac文件、发布配置文件(.pubxml)标记为流水线产物归档,供CD阶段调用

CD 部署阶段

  • 预配置权限:为Azure DevOps服务连接关联的服务主体,授予目标Azure SQL实例的部署权限,以及存储CMK的Azure Key Vault的密钥获取、解密权限
  • 部署任务配置:使用Azure DevOps内置「Azure SQL 部署」任务,或直接调用SqlPackage.exe执行部署,启用Always Encrypted支持,核心参数配置为:
    • /p:ColumnEncryptionSetting=Enabled
    • /p:AllowInsecureConnections=False
  • 执行部署:Dacpac部署仅同步加密元数据到目标SQL实例,不会修改已加密的用户数据,也不会泄露密钥信息
  • 部署验证:执行预定义的SQL验证脚本,确认加密列配置符合预期、加密数据读写逻辑正常,验证用账号需提前配置对应Key Vault的密钥访问权限

最佳实践

  • 密钥隔离存储:列主密钥(CMK)必须统一存储在启用软删除、清除保护的Azure Key Vault中,禁止将任何形式的明文密钥存入代码库、流水线明文变量、配置文件
  • 最小权限原则:流水线服务主体仅授予部署必需的最小权限:Key Vault仅开放密钥获取、解密权限,SQL实例仅开放ALTER ANY SCHEMA、VIEW DEFINITION等必要部署权限,不授予全局管理员权限
  • 部署配置固化:通过.pubxml发布配置文件固化所有部署参数,明确配置/p:BlockOnPossibleDataLoss=True,防止部署过程中误操作导致加密数据丢失
  • 加密变更灰度验证:涉及新增加密列、修改加密算法、更换密钥等变更时,必须先在测试环境完成全链路读写逻辑验证,再推送到生产环境,禁止直接在生产环境首次验证加密变更
  • 敏感信息保护:所有部署相关的敏感配置(SQL管理员密码、Key Vault名称等)必须存入Azure DevOps机密变量或关联的Key Vault中,禁止明文写入流水线YAML文件
  • Dacpac版本管理:每个CI构建生成的Dacpac都绑定唯一版本号与代码提交ID,出现部署问题时可快速回滚到历史正常版本

注意:首次为存量数据启用Always Encrypted时,不要通过Dacpac部署自动执行批量数据加密操作,建议单独手动执行加密并验证数据完整性后,再通过Dacpac同步加密元数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:45:06