如何:在兩部伺服器上建立相同的對稱金鑰
若要解密加密文字,您就需要用來加密的金鑰。在單一資料庫中同時進行加密和解密時,此金鑰會儲存在資料庫中,然後根據權限提供金鑰,以便進行加密和解密。但是,在不同的資料庫或不同的伺服器上進行加密和解密時,儲存在某個資料庫中的金鑰將無法在第二個資料庫上使用。本主題將說明如何提供共用對稱金鑰給兩個不同伺服器上的資料庫。
概觀
建立相同的對稱金鑰並不困難。使用相同 KEY_SOURCE、ALGORITHM 和 IDENTITY_VALUE 金鑰選項建立的對稱金鑰將完全相同。建立對稱金鑰之前,您應該確認 SQL Server 的金鑰管理機制是否已經初始化。如果這些機制原本不存在,您就應該建立資料庫主要金鑰來啟用自動金鑰管理以及用來加密對稱金鑰的憑證。或者,您也可以使用密碼來保護對稱金鑰。如需詳細資訊,請參閱<CREATE SYMMETRIC KEY (Transact-SQL)>。
範例
這則範例會在兩部伺服器上建立相同的對稱金鑰。此範例會使用 AES_256 加密演算法。由於 Windows XP 或 Windows Server 2000 不支援 AES 加密演算法,所以您可能必須指定其他演算法,例如 TRIPLE_DES。
您可以透過在兩部伺服器上執行下列 CREATE MASTER KEY、CREATE CERTIFICATE 和 CREATE SYMMETRIC KEY 陳述式,建立金鑰。
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'My p@55w0Rd'; GO CREATE CERTIFICATE [cert_keyProtection] WITH SUBJECT = 'Key Protection'; GO CREATE SYMMETRIC KEY [key_DataShare] WITH KEY_SOURCE = 'My key generation bits. This is a shared secret!', ALGORITHM = AES_256, IDENTITY_VALUE = 'Key Identity generation bits. Also a shared secret' ENCRYPTION BY CERTIFICATE [cert_keyProtection]; GO
先在某部伺服器上執行 OPEN SYMMETRIC KEY 陳述式和 SELECT 陳述式,藉以測試金鑰。
OPEN SYMMETRIC KEY [key_DataShare] DECRYPTION BY CERTIFICATE cert_keyProtection; GO SELECT encryptbykey(key_guid('key_DataShare'), 'MyData' ) GO -- For example, the output might look like this: 0x2152F8DA8A500A9EDC2FAE26D15C302DA70D25563DAE7D5D1102E3056CE9EF95CA3E7289F7F4D0523ED0376B155FE9C3
在第二部伺服器上,將之前 SELECT 陳述式的結果貼入下列程式碼,做為 @blob 的值,然後執行下列程式碼來確認重複金鑰可以解密加密文字。
OPEN SYMMETRIC KEY [key_DataShare] DECRYPTION BY CERTIFICATE cert_keyProtection; GO DECLARE @blob varbinary(8000); SET @blob = SELECT CONVERT(varchar(8000), decryptbykey(@blob)); GO
關閉兩部伺服器上的對稱金鑰。
CLOSE SYMMETRIC KEY [key_DataShare]; GO