公司的政策, 資料庫要透明加密, 並給我 sql server command:
-- 查詢憑證是否存在
USE master;
SELECT * FROM sys.certificates WHERE name = 'TdeServerCert';
-- (補充) 記錄備份
BACKUP LOG 資料庫名稱
TO DISK = 'D:\DB_backup\path_to_backup_file.trn';
-- 建議創建主要金鑰與憑證,主要金鑰的密碼很重要,請記得!!!
USE master;
GO
--創建主要金鑰(密碼請更換,勿用範例的密碼)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TDE@9876543210';
GO
--創建加密憑證
CREATE CERTIFICATE TdeServerCert
WITH SUBJECT = N'DB_TDE_Certificat',
EXPIRY_DATE = '2099-12-31'; --憑證到期的日期
GO
在 azure 上執行 USE master; 就顯示錯誤訊息了.
USE statement is not supported to switch between databases. Use a new connection to connect to a different database.
Failed to execute the query
可以,Azure SQL Database(以及 Azure SQL Managed Instance)完全支援「透明資料加密」(Transparent Data Encryption,簡稱 TDE)。 事實上,在 Azure 上,所有新建立的資料庫預設都是直接開啟 TDE 的,你不需要動手去啟動它。
至於你遇到的錯誤訊息,是因為 Azure SQL Database 的架構不支援 USE [資料庫名稱] 語法來切換資料庫。在 Azure SQL 中,如果你想查詢不同的資料庫(例如 master),你必須在連線工具(如 SSMS 或 Azure Data Studio)中,直接修改連線字串或連線屬性中的資料庫名稱,重新連線進去。
以下為你整理 Azure SQL TDE 的運作方式,以及如何正確查詢它的狀態:
1. 為什麼不需要在 Azure 建立 TDE 憑證?
在傳統的 On-Premises(地端)SQL Server 中,你要做 TDE 必須自己手動建立 Master Key、憑證(Certificate),然後再針對資料庫做加密(這也就是你預期去 sys.certificates 找 TdeServerCert 的原因)。
但在 Azure SQL Database 中:
- 服務管理金鑰 (Service-Managed Key):Azure 預設會自動幫你管理 TDE 憑證與金鑰,並定期自動輪換(Rotate)。你不需要、也沒辦法在
master資料庫裡看到或管理這個由 Azure 託管的憑證。 - 客戶管理金鑰 (Customer-Managed Key, BYOK):如果你有合規性需求,想要自己掌控金鑰,你可以結合 Azure Key Vault 來實作 BYOK(Bring Your Own Key)。
2. 如何正確檢查 Azure SQL 的 TDE 狀態?
你不需要切換到 master 去找憑證,直接在當前的使用者資料庫下執行以下指令,就能確認該資料庫是否有啟用 TDE 加密:
SQL
SELECT
db_name(database_id) AS DatabaseName,
encryption_state,
CASE encryption_state
WHEN 0 THEN '無加密金鑰'
WHEN 1 THEN '未加密 (Unencrypted)'
WHEN 2 THEN '加密中 (Encryption in progress)'
WHEN 3 THEN '已加密 (Encrypted)'
WHEN 4 THEN '金鑰變更中'
WHEN 5 THEN '解密中'
ELSE '未知狀態'
END AS EncryptionStateDescription
FROM sys.dm_database_encryption_keys;
💡 預期結果: 如果你是使用 Azure SQL,通常會直接看到你的資料庫狀態為 3 (已加密 Encrypted)。
3. 如何在 Azure Portal 門戶上查看或修改?
除了用 SQL 指令,你也可以直接在網頁上點選確認:
- 進入 Azure Portal,找到你的 SQL database。
- 在左側選單的「安全性 (Security)」分類下,點選 資料加密 (Data encryption)。
- 在這裡你可以看到 TDE 目前是 Enabled (已啟用),也可以在這邊切換要使用「Azure 幫你管理的金鑰」還是「你自己的 Azure Key Vault 金鑰」。

這代表你的 tempdb 和 project-name-stg 資料庫目前都是 「3:已加密 (Encrypted)」 的狀態。
在 Azure SQL 中,這是一個非常標準且健康的預設表現:
project-name-stg(你的業務資料庫):正如前面提到,Azure SQL 預設會為所有使用者資料庫啟用 TDE,確保你的資料在硬碟儲存時(Data at rest)是安全的。tempdb(系統暫存資料庫):只要你的實例中有任何一個使用者資料庫啟用了 TDE,Azure SQL 就會自動把tempdb也一起加密。這是為了防止敏感資料在運算過程中,被暫存到tempdb時留下未加密的軌跡。
接下來的建議
既然已經確認狀態為 3 (Encrypted),代表透明資料加密已經在底層默默幫你守護資料了,你不需要再手動執行任何加密指令(例如 ALTER DATABASE ... SET ENCRYPTION ON)。