sql-server - 带有 SQL Always Encrypted 列的 CI

标签 sql-server azure-devops continuous-integration dacpac always-encrypted

我们正在尝试在我们的一个应用程序中添加 Always encrypted,我们希望它能与我们的 CI 流一起工作。

我们使用 DACPAC 部署 Azure Devops。 到目前为止一切正常,但我们面临着始终加密的挑战......

每个 SQL 环境都需要在 Azure Key Vault 中有一个不同的 key 。 我们发现自动执行此操作的方法是使用 SSDT 变量 (ref)

CREATE COLUMN MASTER KEY  [ResponseKey] WITH (
     KEY_STORE_PROVIDER_NAME = N'AZURE_KEY_VAULT',
     KEY_PATH = N'[$(OurVariableName)]' );

当我们的数据库和 DACPAC 之间的比较完成时,脚本总是包含键的 Drop + Create,即使键的值相同。我们尝试输出生成的脚本,Azure Key vault 中的 key 值位于脚本的变量部分。 就好像,比较不适用于变量。

有人做过这个吗?

另外,当我们添加一个新的加密列时,生成的脚本总是失败,提示表中已有数据。这似乎与 this link 相反

最佳答案

经过几天的研究,似乎无法使用变量来更改用于在我们每个环境中部署 DACPAC 的 key 值。 (或者我们还没有找到方法!)。

我们使用的解决方法是在我们的每个环境中通过脚本部署 key 和加密列(在每个环境中使用不同的 key ),然后我们修改我们的 DACPAC 以匹配手动完成的操作。

我们在 XML 发布配置文件中添加了两个选项:

 <ExcludeColumnEncryptionKeys>True</ExcludeColumnEncryptionKeys>
 <ExcludeColumnMasterKeys>True</ExcludeColumnMasterKeys>

当我们在 CI 流程中部署时,不会比较键,即使它们不同也不会更改结构。

如果能够使用变量而不是手动执行操作会很好,但看起来就是这样!

CI + Always encrypted 不要放在一起!

关于sql-server - 带有 SQL Always Encrypted 列的 CI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59619527/

相关文章:

sql - 如何在 SQL 中创建 bool 计算字段并加入该计算字段?

Azure Devops Rest API 创建个人访问 token (PAT) -- patTokenError : userIdRequired

powershell - Bamboo 变量可以被脚本任务覆盖吗?

ios - 是否可以为 iOS 应用程序开发设置持续集成和持续部署?

ruby-on-rails - 带有用于 ruby​​ on rails 应用程序的代码指标的 CI 工具

sql - 如何为每个用户获取具有最小值和最大值的唯一记录

mysql - 用于从日期和时间之间的表中选择数据的 SQL 查询

sql-server - 如何仅授予对 Sql Server 数据库中单个表的读访问权限

azure-devops - VSO vNext 多个构建,不同的构建工件

visual-studio - 在 Visual Studio 中查看拉取请求的审阅评论