SQL Server 對稱祕鑰的管理

對稱祕鑰,加密和解密使用相同的祕鑰。

對稱祕鑰的應用:《SQL Server 對稱密鑰在數據加密中的應用》

對稱祕鑰的管理包括創建、打開、修改、關閉和刪除,本文將逐一使用實例進行介紹。

創建對稱祕鑰

創建對稱祕鑰必定要指定一種加密方式,而對稱祕鑰有五種加密方式,分別爲證書、密碼、對稱祕鑰、非對稱祕鑰和PROVIDER。我們將按照對稱祕鑰的加密方式給出創建祕鑰的樣例。

爲了演示創建過程,我們先創建一個測試數據庫:

--創建測試數據庫
CREATE DATABASE SymmetricKeyAdmin ON PRIMARY
(NAME='SymmetricKeyAdmin',FILENAME='D:\database\SymmetricKeyAdmin.mdf')
LOG ON
(NAME='SymmetricKeyAdmin_log',FILENAME='D:\database\SymmetricKeyAdmin_log.ldf')

創建證書加密的對稱祕鑰

USE SymmetricKeyAdmin
GO
--創建數據庫主密鑰
CREATE MASTER KEY ENCRYPTION BY PASSWORD='[J,XJK8|AwE*rLk'
--創建證書
CREATE CERTIFICATE CertForEncryption
WITH SUBJECT ='Certficate for Encrypton Symmetric'
--創建證書加密的對稱密鑰
CREATE SYMMETRIC KEY AsyEncryptByCert
WITH ALGORITHM=AES_256
ENCRYPTION BY CERTIFICATE CertForEncryption

我們可以使用動態視圖 sys.symmetric_keys 、sys.key_encryptions查看對稱祕鑰的信息:

SELECT * FROM sys.symmetric_keys
SELECT * FROM sys.key_encryptions

結果如下:

 

密碼加密的對稱祕鑰

--創建密碼加密的對稱密鑰
CREATE SYMMETRIC KEY SyEncryptByPwd
WITH ALGORITHM=AES_256
ENCRYPTION BY PASSWORD ='0faalc23(gI0r;>'

創建對稱祕鑰加密的對稱祕鑰

--打開用來加密的對稱密鑰
OPEN SYMMETRIC KEY SyEncryptByPwd
DECRYPTION BY PASSWORD='0faalc23(gI0r;>'
--創建對稱密鑰加密的對稱密鑰
CREATE SYMMETRIC KEY SyEncryptBySy
WITH ALGORITHM=AES_256
ENCRYPTION BY SYMMETRIC KEY SyEncryptByPwd
--關閉用來加密的對稱密鑰
CLOSE SYMMETRIC KEY SyEncryptByPwd

注意:

  • 這裏我們直接使用上面創建的密碼加密的對稱祕鑰AsyEncryptByPwd 來加密新祕鑰。

  • 創建對稱祕鑰加密的對稱祕鑰時,需要先打開用來加密的對稱祕鑰,才能創建

創建非對稱祕鑰加密的對稱祕鑰

--創建非對稱密鑰
CREATE ASYMMETRIC KEY AsyForSyEncrypt
WITH ALGORITHM=RSA_2048
ENCRYPTION BY PASSWORD='0ipLMYf48w;do}?'
--創建非對稱密鑰加密的對稱密鑰
CREATE SYMMETRIC KEY SyEncryptByAsy
WITH ALGORITHM =AES_256
ENCRYPTION BY ASYMMETRIC KEY AsyForSyEncrypt

注意:以上幾種對稱祕鑰創建時可用的加密算法包括DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128 | DESX | AES_128 | AES_192 | AES_256,但從SQL Server 2016(13.x)開始,除 AES_128 | AES_192 | AES_256三種算法外,其他算法都被廢棄了。具體算法的選擇可參考《SQL Server 非對稱祕鑰的加密算法》一文。

使用EKM創建對稱祕鑰

在使用EKM時,我們首先需要啓用EKM provider,腳本如下:

-- 啓動高級配置
sp_configure 'show advanced options', 1 ; 
GO 
RECONFIGURE ; 
GO 
-- 啓動EKM provider
sp_configure 'EKM provider enabled', 1 ; 
GO 
RECONFIGURE ; 
GO 

假設第三加密提供程序存儲在E:\CertExeFile路徑下,文件名爲UDF_CLR.dll

CREATE CRYPTOGRAPHIC PROVIDER EKM_Prov 
FROM FILE = 'E:\CertExeFile\UDF_CLR.dll' ;
GO

消息 33027,級別 16,狀態 1,第 211 行

無法加載庫 'E:\CertExeFile\UDF_CLR_Interface.dll'。有關詳細信息,請參閱錯誤日誌。

Failed to verify Authenticode signature on DLL 'E:\CertExeFile\UDF_CLR.dll'.

解決方案:

右擊文件UDF_CLR→屬性→數字簽名→點選證書→點選右下角的“詳細信息”

在數字簽名詳細信息彈窗中,點擊右下角的“查看證書”:

在證書彈窗中,常規標籤下,點擊下面的“安裝證書”:

在證書導入嚮導中,選擇“本地計算機(L)”,點擊下一步:

選擇“將所有的證書都放入下列存儲(P)”,然後點證書存儲文本框右側的“瀏覽”:

在彈出的選擇證書存儲彈窗中,選擇“受信任的根證書頒發機構”:

點擊確定後,返回證書導入嚮導:

點擊“下一步”

點擊完成:

跳出“導入成功”提示彈窗,點擊確定即可。

再次執行創建CRYPTOGRAPHIC  PROVIDER腳本,報dll缺少方法的錯誤:

消息 33085,級別 16,狀態 1,第 211 行

在加密提供程序庫 'E:\CertExeFile\UDF_CLR.dll' 中找不到一個或多個方法。

 

當遇到這樣的問題時,只能根據提供程序的供應商文檔解決了。

使用EKM創建對稱祕鑰:

CREATE SYMMETRIC KEY SymFromEKM 
AUTHORIZATION User1 
FROM PROVIDER EKM_Prov 
WITH 
PROVIDER_KEY_NAME='KeyForSensitiveData', 
CREATION_DISPOSITION=OPEN_EXISTING; 
GO 

注意:CREATION_DISPOSITION參數有兩個值,一個爲REATE_NEW,在EKM 設備上創建一個新的祕鑰,如果設備已經存在,則創建語句將出錯;另外一個即實例中使用的OPEN_EXISTING,將SQL Server對稱祕鑰映射到一個已經存在的EKM祕鑰。默認情況下,使用的是CREATE_NEW。

如需深入理解EMK,可參考《SQL Server 擴展祕鑰管理(EKM)》一文。

創建臨時對稱祕鑰

創建臨時對稱祕鑰是在名稱前加一個#號

不能使用EKM創建臨時證書

臨時證書爲創建者所擁有,臨時祕鑰只對當前的會話有效。

IDENTITY_VALUE 產生一個GUID,使用它標記由新對稱祕鑰加密的的數據。這個標記可以用來匹配祕鑰和加密數據。由特定語句生成的GUID總是相同的。在語句被使用生成GUID 後,這個語句直到至少一個會話已經調用該語句,才能重新被使用。IDENTITY_VALUE是可選選項,然而,當我們存儲臨時祕鑰加密的數據時,我們推薦使用它。

對稱祕鑰的更改

對稱祕鑰的更改包括增加新的加密方式,或者刪除已有的加密方式。值得注意的是,對稱祕鑰需要至少一種加密方式,因此,我們最好是現在增加加密方式,再刪除已有的加密方式。

修改對稱祕鑰時,我們需要先打開它,如下面我們修改上文中創建的使用對稱祕鑰加密的對稱祕鑰 SyEncryptByCert 

--打開對稱密鑰
OPEN SYMMETRIC KEY SyEncryptByPwd
DECRYPTION BY PASSWORD='0faalc23(gI0r;>'
OPEN SYMMETRIC KEY SyEncryptBySy
DECRYPTION BY SYMMETRIC KEY SyEncryptByPwd
--增加密碼加密
ALTER SYMMETRIC KEY SyEncryptBySy
ADD ENCRYPTION BY PASSWORD='0ipLMYf48w;do}?'
--刪除對稱密鑰加密
ALTER SYMMETRIC KEY SyEncryptBySy
DROP ENCRYPTION BY SYMMETRIC KEY SyEncryptByPwd
--關閉對稱密鑰
CLOSE SYMMETRIC KEY SyEncryptBySy

注意:因爲要修改的對稱祕鑰是用對稱祕鑰加密的,所以除了在打開要更改的對稱祕鑰之前,還需要打開加密它的對稱祕鑰。修改完成後,最後還需要關閉該對稱祕鑰。

刪除不需要的對稱祕鑰

刪除對稱祕鑰SyEncryptBySy ,腳本如下:

DROP SYMMETRIC KEY SyEncryptBySy

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章