2016-11-09 171 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)