使用列名称或对称密钥获取证书名称
问题描述:
我正在使用SQL Server 2008/2012.在我的数据库中,我有一个具有加密列的表。使用列名称或对称密钥获取证书名称
我使用此查询得到一个加密列的加密密钥 -
SELECT DISTINCT key_name(encryptedcol) FROM encryptedTable;
我的加密列名encryptedcol。
现在我想获取用于创建加密密钥的证书名称(表示我需要用于打开上述对称密钥来解密数据的证书名称)。
例如 -
这里强调的文字是我的证书名称,这是硬编码在这里,但我想从一个SQL查询得到这个。
答
您可以使用系统表来确定列的加密层次结构。假设对称密钥是由证书加密的,这个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)