2016-11-09 161 views
2

我正在使用SQL Server 2008/2012.在我的數據庫中,我有一個具有加密列的表。使用列名稱或對稱密鑰獲取證書名稱

使用此查詢得到一個加密列的加密密鑰 -

SELECT DISTINCT key_name(encryptedcol) FROM encryptedTable; 

我的加密列名encryptedcol

現在我想獲取用於創建加密密鑰的證書名稱(表示我需要用於打開上述對稱密鑰來解密數據的證書名稱)。

例如 -

enter image description here

這裏強調的文字是我的證書名稱,這是硬編碼在這裏,但我想從一個SQL查詢得到這個。

回答

1

您可以使用系統表來確定列的加密層次結構。假設對稱密鑰是由證書加密的,這個tsql就可以工作。如果您的對稱密鑰是由非對稱密鑰加密的,則將sys.certificates替換爲sys.asymmetric_keys,該對齊密鑰還具有唯一標識它的指紋列。

select 
    c.name 
from sys.symmetric_keys sk 
join sys.key_encryptions ke 
    on 
    sk.symmetric_key_id= ke.key_id 
join sys.certificates c 
    on 
    ke.thumbprint=c.thumbprint 
where 
    sk.name in 
     (SELECT DISTINCT key_name(encryptedssn) FROM HR.Employees)