在 SSDT 项目中存储 CREATE EXTERNAL DATA SOURCE 而不暴露 DATABASE SCOPED CREDENTIAL 或 MASTER KEY 秘密;

Jus*_*ing 8 azure-sql-database ssdt

我有一个部署到 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]
    );
Run Code Online (Sandbox Code Playgroud)

当我将它导入到我的 .sqlproj 中时,它抱怨凭证不存在,然后当我添加它时它抱怨主密钥不存在。问题是我不想将这些秘密存储在 SSDT 项目中。如何在 Azure Decops 中存储可以从 Azure Keyvault 或其他存储机密的方法中覆盖和检索的虚拟项或默认值?

Jus*_*ing 2

经过实验,SSDT 中的任何类型的秘密似乎都只在对象创建时使用,而不是更新时使用。

因此,如果 sqlproj 包含CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password A';,并且不存在主密钥,则将使用该密码创建主密钥。但是,如果稍后ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = 'dsjdkflJ435907NnmM#sX003';在数据库上执行,然后将 sqlproj 重新部署到数据库,则不会重新生成主密钥。