我有一个部署到 Azure SQL DB 的 SSDT 项目。最近我添加了一个外部表。这需要一个外部数据源,如下所示:
CREATE EXTERNAL DATA SOURCE [data_warehouse]
WITH (
TYPE = RDBMS,
LOCATION = N'mydb.database.windows.net',
DATABASE_NAME = N'MainDW',
CREDENTIAL = [dw_reader]
);
当我将它导入我的 .sqlproj 时,它抱怨凭证不存在,然后当我添加它抱怨主密钥不存在时。问题是我不想将这些秘密存储在 SSDT 项目中。如何存储可以从 azure keyvault 或其他在 Azure Decops 中存储机密的方法覆盖和检索的虚拟对象或默认值?
经过试验,似乎 SSDT 中的任何类型的秘密都只在创建对象时使用,而不是更新。
因此,如果 sqlproj 包含
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password A';
并且不存在主密钥,则将使用该密码创建主密钥。但是,如果稍后ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = 'dsjdkflJ435907NnmM#sX003';
在数据库上执行,然后将 sqlproj 重新部署到数据库,它不会重新生成主密钥。