Share via


透明資料加密

您可以採取數個預防措施來協助保護資料庫,例如設計安全系統、加密機密資產,還有在資料庫伺服器周圍建置防火牆。 但是,對於竊取磁碟機或備份磁帶等實體媒體的案例,惡意人士只需還原或附加資料庫,即可瀏覽其中的資料。 解決方案之一是加密資料庫中的敏感性資料,並使用憑證來保護用於加密資料的金鑰。 這可防止沒有金鑰的任何人使用資料,但必須事先規劃這種保護。

透明資料加密 (TDE) 會對資料庫、交易記錄檔和特殊 PDW 記錄檔執行即時 I/O 加密和解密。 加密會使用資料庫加密金鑰 (DEK),此金鑰會儲存在資料庫開機記錄中,以在復原期間提供可用性。 DEK 是對稱金鑰,使用儲存於 SQL Server PDW 的 master 資料庫中的憑證進行維護。 TDE 會保護「待用」資料,亦即資料和記錄檔。 它提供遵守各種產業中制定的許多法律、規定與方針的功能。 此功能可讓軟體開發人員使用 AES 和 3DES 加密演算法來加密資料,而無需變更現有的應用程式。

重要

TDE 不會為在用戶端與 PDW 之間傳輸的資料提供加密。 如需如何加密用戶端與 SQL Server PDW 之間資料的詳細資訊,請參閱<布建憑證>。

TDE 不會在移動或使用時加密資料。 SQL Server PDW 內的 PDW 元件之間的內部流量不會加密。 暫時儲存在記憶體緩衝區中的資料不會加密。 若要降低此風險,請控制對 SQL Server PDW 的實體存取和連線。

保護資料庫之後,即可使用正確的憑證來還原資料庫。

注意

在建立 TDE 的憑證時,應使用相關的私密金鑰立即備份。 如果此憑證無法使用或是您必須在另一部伺服器上還原或附加資料庫,您必須同時擁有此憑證和私密金鑰的備份,否則將無法開啟資料庫。 即使在資料庫不再啟用 TDE,也應保留加密憑證。 就算資料庫已不再加密,交易記錄的某些部分可能仍受到保護,因而有些作業截至資料庫執行完整備份為止或許都需要此憑證。 已超過到期日的憑證仍可與 TDE 搭配用來加密和解密資料。

資料庫檔案的加密在頁面層級執行。 加密資料庫中的頁面會在寫入磁碟前即已加密,並在讀入記憶體時解密。 TDE 不會增加加密資料庫的大小。

下圖顯示 TDE 加密的金鑰階層:

Displays the hierarchy

使用透明資料加密

若要使用 TDE,請遵循下列步驟。 前三個步驟僅會在準備 SQL Server PDW 以支援 TDE 時完成一次。

  1. 在主要資料庫中建立主要金鑰。

  2. 使用 sp_pdw_database_encryption 以在 SQL Server PDW 上啟用 TDE。 這項作業會修改暫存資料庫,以確保保護未來的暫存資料,並且如果在任何作用中工作階段有暫存資料表時嘗試,則該作業將會失敗。 sp_pdw_database_encryption 開啟 PDW 系統記錄檔中的使用者資料遮罩。 (如需 PDW 系統記錄中使用者資料遮罩的詳細資訊,請參閱<sp_pdw_log_user_data_masking>。

  3. 使用 sp_pdw_add_network_credentials 建立認證,以驗證並寫入將會儲存憑證備份的共用。 如果預定的儲存體伺服器已有認證存在,可以使用現有的認證。

  4. 在 master 資料庫中,建立受主要金鑰保護的憑證。

  5. 將憑證備份至儲存體共用。

  6. 在使用者資料庫中,建立資料庫加密金鑰,並透過儲存在 master 資料庫中的憑證加以保護。

  7. 使用 ALTER DATABASE 語句來使用 TDE 加密資料庫。

下列範例說明如何在 SQL Server PDW 中建立、名為 MyServerCert 的憑證來加密 AdventureWorksPDW2012 資料庫。

首先:在 SQL Server PDW 上啟用 TDE。 此動作只需執行一次。

USE master;  
GO  
  
-- Create a database master key in the master database  
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>';  
GO  
  
-- Enable encryption for PDW  
EXEC sp_pdw_database_encryption 1;  
GO  
  
-- Add a credential that can write to the share  
-- A credential created for a backup can be used if you wish  
EXEC sp_pdw_add_network_credentials 'SECURE_SERVER', '<domain>\<Windows_user>', '<password>';  

其次:在 master 資料庫中建立和備份憑證。 此動作只需要執行一次。 您可以為每個資料庫提供單獨的憑證 (建議),也可以使用一個憑證來保護多個資料庫。

-- Create certificate in master  
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My DEK Certificate';  
GO  
  
-- Back up the certificate with private key  
BACKUP CERTIFICATE MyServerCert   
    TO FILE = '\\SECURE_SERVER\cert\MyServerCert.cer'  
    WITH PRIVATE KEY   
    (   
        FILE = '\\SECURE_SERVER\cert\MyServerCert.key',  
        ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>'   
    )   
GO  

最後:建立 DEK 並使用 ALTER DATABASE 來加密使用者資料庫。 對 TDE 保護的每個資料庫都重複此動作。

USE AdventureWorksPDW2012;  
GO  
  
CREATE DATABASE ENCRYPTION KEY  
WITH ALGORITHM = AES_128  
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;  
GO  
  
ALTER DATABASE AdventureWorksPDW2012 SET ENCRYPTION ON;  
GO  

SQL Server 會將加密和解密作業排定在背景執行緒上。 您可以使用本文章稍後出現之清單內的目錄檢視和動態管理檢視,以檢視這些作業的狀態。

警告

啟用了 TDE 的資料庫備份檔案也會使用資料庫加密金鑰來加密。 因此,當您要還原這些備份時,保護資料庫加密金鑰的憑證必須可以使用。 這表示,除了備份資料庫以外,您也必須確定可維護伺服器憑證的備份,以免資料遺失。 如果此憑證無法再使用,就會造成資料遺失。

命令與函式

TDE 憑證必須由資料庫主要金鑰加密,下列陳述式才會接受。

下表提供 TDE 命令與函式的連結及說明。

命令或函數 目的
CREATE DATABASE ENCRYPTION KEY 建立用於加密資料庫的金鑰。
ALTER DATABASE ENCRYPTION KEY 變更用於加密資料庫的金鑰。
DROP DATABASE ENCRYPTION KEY 移除用於加密資料庫的金鑰。
ALTER DATABASE 說明啟用 TDE 所用的 ALTER DATABASE 選項。

目錄檢視和動態管理檢視

下表顯示 TDE 目錄檢視和動態管理檢視。

目錄檢視或動態管理檢視 目的
sys.databases 顯示資料庫資訊的目錄檢視。
sys.certificates 目錄檢視,其顯示資料庫中的憑證。
sys.dm_pdw_nodes_database_encryption_keys 動態管理檢視,提供每個節點的資訊,涉及資料庫中使用的加密金鑰,以及資料庫的加密狀態。

權限

如先前的資料表中所述,每項 TDE 功能和命令都有個別的權限需求。

若要檢視與 TDE 有關的中繼資料,則需要 CONTROL SERVER 權限。

考量

當資料庫加密作業的重新加密掃描正在進行時,對資料庫的維護作業將會停用。

您可以使用 sys.dm_pdw_nodes_database_encryption_keys 動態管理檢視來查找資料庫的加密狀態。 如需詳細資訊,請參閱本文先前的<目錄檢視和動態管理檢視>一節。

限制

CREATE DATABASE ENCRYPTION KEYALTER DATABASE ENCRYPTION KEYDROP DATABASE ENCRYPTION KEYALTER DATABASE...SET ENCRYPTION 陳述式期間不允許執行下列作業。

  • 卸除資料庫。

  • 使用 ALTER DATABASE 命令。

  • 開始資料庫備份。

  • 開始資料庫還原。

下列作業或條件將會導致 CREATE DATABASE ENCRYPTION KEYALTER DATABASE ENCRYPTION KEYDROP DATABASE ENCRYPTION KEYALTER DATABASE...SET ENCRYPTION 陳述式無法運作。

  • 正在執行 ALTER DATABASE 命令。

  • 正在執行資料備份。

建立資料庫檔案時,如果啟用 TDE 即無法使用檔案立即初始化功能。

不受 TDE 保護的區域

TDE 不會保護外部資料表。

TDE 不會保護診斷工作階段。 在使用診斷工作階段時,使用者應該小心不要使用敏感性參數進行查詢。 一旦不再需要敏感性資訊,就應立即卸除顯示敏感性資訊的診斷工作階段。

在 SQL Server PDW 記憶體中放置時,會解密受 TDE 保護的資料。 當設備出現某些問題時,會建立記憶體轉儲。 傾印檔案代表出現問題時記憶體的內容,而且可以包含未加密格式的敏感資料。 應該先檢閱記憶體轉儲的內容,再與其他人共用。

master 資料庫不受 TDE 保護。 雖然 master 資料庫不包含使用者資料,但確實包含登入名稱等資訊。

透明資料加密和交易記錄

讓資料庫使用 TDE 的效果是將虛擬交易記錄的剩餘部分歸零,以強制使用下一個虛擬交易記錄。 此操作保證在設定資料庫加密之後,交易記錄中不會留下任何純文字。 可以尋找每個 PDW 節點記錄檔加密的狀態,請參閱 sys.dm_pdw_nodes_database_encryption_keys 檢視中的 encryption_state 資料行,如以下範例所示:

WITH dek_encryption_state AS   
(  
    SELECT ISNULL(db_map.database_id, dek.database_id) AS database_id, encryption_state  
    FROM sys.dm_pdw_nodes_database_encryption_keys AS dek  
        INNER JOIN sys.pdw_nodes_pdw_physical_databases AS node_db_map  
           ON dek.database_id = node_db_map.database_id AND dek.pdw_node_id = node_db_map.pdw_node_id  
        LEFT JOIN sys.pdw_database_mappings AS db_map  
            ON node_db_map .physical_name = db_map.physical_name  
        INNER JOIN sys.dm_pdw_nodes AS nodes  
            ON nodes.pdw_node_id = dek.pdw_node_id  
    WHERE dek.encryptor_thumbprint <> 0x  
)  
SELECT TOP 1 encryption_state  
       FROM dek_encryption_state  
       WHERE dek_encryption_state.database_id = DB_ID('AdventureWorksPDW2012 ')  
       ORDER BY (CASE encryption_state WHEN 3 THEN -1 ELSE encryption_state END) DESC;  

在資料庫加密金鑰變更前,所有寫入交易記錄的資料都使用前一個資料庫加密金鑰來加密。

PDW 活動記錄

SQL Server PDW 會維護一組用於疑難排解的記錄。 (請注意,這不是交易記錄、SQL Server 錯誤記錄檔或 Windows 事件記錄檔。) 這些 PDW 活動記錄可以包含純文字的完整陳述式,其中有些可以包含使用者資料。 典型的範例是 INSERTUPDATE 陳述式。 您可以使用 sp_pdw_log_user_data_masking 明確開啟或關閉使用者資料的遮罩。 在 SQL Server PDW 上啟用加密會自動開啟 PDW 活動記錄中使用者資料的遮罩,以提供保護。 當不使用 TDE 時,sp_pdw_log_user_data_masking 也可以用來遮罩陳述式,但不建議這麼做,因為它會大幅削弱 Microsoft 支援服務 小組分析問題的能力。

透明資料加密和 tempdb 系統資料庫

使用 sp_pdw_database_encryption 啟用加密時,會加密 tempdb 系統資料庫。 這是任何資料庫可以使用 TDE 之前的必要專案。 這操作可能會影響相同 SQL Server PDW 執行個體上未加密的資料庫效能。

金鑰管理

資料庫加密金鑰 (DEK) 受到儲存在 master 資料庫中的憑證保護。 這些憑證會受到 master 資料庫的資料庫主要金鑰 (DMK) 保護。 DMK 需要受到服務主要金鑰 (SMK) 的保護,才能用於 TDE。

系統不需要人為介入即可存取金鑰 (例如提供密碼)。 如果憑證不可用,系統會輸出錯誤,說明在有適當的憑證可用之前無法解密 DEK。

將資料庫從一個設備移至另一個設備時,必須先在目的地伺服器上還原用於保護其 DEK 的憑證。 然後可以照常還原資料庫。 如需詳細資訊,請參閱標準 SQL Server 文件<將 TDE 保護的資料庫移至另一個 SQL Server>。

只要資料庫備份使用了用來加密 DEK 的憑證,應予以保留。 憑證備份必須包含憑證私密金鑰,因為若沒有私密金鑰,憑證就無法用於資料庫還原。 這些憑證私密金鑰備份會儲存在單獨的檔案中,並受憑證復原時必須提供的密碼保護。

還原 master 資料庫

作為災害復原的一部分,master 資料庫可以使用 DWConfig 還原。

  • 如果控制節點尚未變更,即如果 master 資料庫在進行 master 資料庫備份的相同且未變更的設備上還原,則 DMK 和所有憑證都將可讀取,無需採取其他動作。

  • 如果在不同的設備上還原 master 資料庫,或自 master 資料庫備份之後已變更控制節點,則需要採取其他步驟才能重新產生 DMK。

    1. 啟動 DMK:

      OPEN MASTER KEY DECRYPTION BY PASSWORD = '<password>';  
      
    2. 新增 SMK 的加密:

      ALTER MASTER KEY   
          ADD ENCRYPTION BY SERVICE MASTER KEY;  
      
    3. 重新啟動設備。

升級和取代虛擬機器

如果執行升級或取代 VM 的設備上存在 DMK,則必須提供 DMK 密碼作為參數。

升級動作的範例。 以 DMK 密碼取代 **********

setup.exe /Action=ProvisionUpgrade ... DMKPassword='**********'

取代虛擬機器的動作範例。

setup.exe /Action=ReplaceVM ... DMKPassword='**********'

在升級期間,如果使用者 DB 已加密,且未提供 DMK 密碼,則升級動作將會失敗。 在取代期間,如果未在 DMK 存在時提供正確的密碼,則作業將會略過 DMK 復原步驟。 所有其他步驟都會在取代 VM 動作結束時完成,不過該動作會在結尾報告失敗,以指出需要採取其他步驟。 在安裝記錄檔中 (位於 \ProgramData\Microsoft\Microsoft SQL Server Parallel Data Warehouse\100\Logs\Setup\\<time-stamp>\Detail-Setup),下列警告會顯示在結尾附近。

*** WARNING \*\*\* DMK is detected in master database, but could not be recovered automatically! The DMK password was either not provided or is incorrect!

在 PDW 中手動執行這些陳述式,並在之後重新啟動設備,以復原 DMK:

OPEN MASTER KEY DECRYPTION BY PASSWORD = '<DMK password>';  
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY;  

使用還原 master 資料庫段落中的步驟來復原資料庫,然後重新啟動設備。

如果 DMK 之前存在,但在動作之後未復原,則在查詢資料庫時會引發下列錯誤訊息。

Msg 110806;  
A distributed query failed: Database '<db_name>' cannot be opened due to inaccessible files or insufficient memory or disk space. See the SQL Server errorlog for details.

效能影響

TDE 的效能影響會因您擁有的資料類型、儲存方式,以及 SQL Server PDW 上的工作負載活動類型而有所不同。 當受 TDE 保護時,讀取和解密資料或加密再寫入資料的 I/O,都需要大量 CPU 的活動,而且會在同時發生其他需要大量 CPU 的活動時產生更大的影響。 由於 TDE 會加密 tempdb,因此 TDE 會影響未加密的資料庫效能。 若要準確了解效能,應使用您的資料和查詢活動來測試整個系統。

下列連結包含有關 SQL Server 如何管理加密的一般資訊。 這些文章可協助您了解 SQL Server 加密,但這些文章沒有 SQL Server PDW 特有的資訊,並且會討論 SQL Server PDW 中不存在的功能。

另請參閱

ALTER DATABASE
CREATE MASTER KEY
CREATE DATABASE ENCRYPTION KEY
BACKUP CERTIFICATE
sp_pdw_database_encryption
sp_pdw_database_encryption_regenerate_system_keys
sp_pdw_log_user_data_masking
sys.certificates
sys.dm_pdw_nodes_database_encryption_keys