我正在使用SQL Server 2008 / 2012.在我的数据库中,我有一个具有加密列的表。
我使用此查询
获取加密列的加密密钥SELECT DISTINCT key_name(encryptedcol) FROM encryptedTable;
我的加密列名是 encryptedcol 。
现在我想获取用于创建加密密钥的证书名称(意味着我需要用于打开上述对称密钥以解密数据的证书名称)。
例如 -
这里突出显示的文本是我的证书名称,这里是硬编码的,但我想从sql查询中获取它。
答案 0 :(得分: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)