SqlPackage.exe 部署 DACPAC 并始终加密和密钥保管库

问题描述 投票:0回答:1

我正在尝试使用 Azure 发布管道部署 DACPAC。

以下是我用过的方法

  1. 使用 Azure SQL DACPAC 任务 - 使用此方法时,作为附加属性的一部分,传递以下一组参数以进行部署

    AzureKeyVaultAuthMethod:ClientIdSecret /ClientId:'$(SERVICEPRINCIPALID)' /Secret:'$(SERVICEPRINCIPALKEY)'
    。启用诊断日志时,出现以下错误: SqlPackage 构建版本 - 16.0.6161.0

  2. 使用 power-shell 脚本 - 使用 power-shell 脚本进行 DACPAC 部署时,我收到以下错误。

无法解密列加密密钥。密钥存储提供商名称无效:“AZURE_KEY_VAULT”。密钥存储提供程序名称必须表示系统密钥存储提供程序或注册的自定义密钥存储提供程序。有效的系统密钥存储提供程序名称为:“MSSQL_CERTIFICATE_STORE”、“MSSQL_CNG_STORE”、“MSSQL_CSP_PROVIDER”。有效的(当前注册的)自定义密钥存储提供商名称为: 。请验证数据库中列主密钥定义中的密钥存储提供程序信息,并验证应用程序中使用的所有自定义密钥存储提供程序是否已正确注册。

此处附有日志 SqlPackage构建版本 - 15.0.5472.2 作为部署 DACPAC 之前的先决条件,我使用 power-shell 脚本创建密钥,然后将它们插入数据库。下面的脚本内容。

所有部署都是通过服务主体进行的,并且它对 Azure AD 中的所有资源具有管理员级别的访问权限。

在通过发布管道部署 DACPAC 之前,我是否遗漏了任何步骤。

谢谢,

南丹

azure azure-devops azure-sql-database azure-keyvault sqlpackage
1个回答
0
投票
  1. 无法解密列加密密钥。无效的密钥存储提供程序名称:“AZURE_KEY_VAULT”与尝试解密列的代码版本相关。将 Nuget 包更新到最新版本(支持 Azure Key Vault 集成),并仔细检查 .sqlproj 中的目标是否设置为 Azure SQL 而不是 Sql Server。

  2. 您将面临的另一个障碍是当前活动密钥与 DACPAC 生成的密钥。如果在任何地方引用 CMK/CEK,并且您有 CMK/CEK 的硬编码版本,则部署将因基于加密/解密的问题而失败。我将删除引用并确保服务帐户有权通过策略以及在数据库本身内轮换/使用 Azure Key Vault 密钥。

© www.soinside.com 2019 - 2024. All rights reserved.