Azure-Sql-Database

將 CREATE EXTERNAL DATA SOURCE 儲存在 SSDT 項目中,而不暴露 DATABASE SCOPED CREDENTIAL 或 MASTER KEY 機密;

  • April 19, 2019

我有一個部署到 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 重新部署到數據庫,它不會重新生成主密鑰。

引用自:https://dba.stackexchange.com/questions/234660