【问题标题】:Get certificate name by using column name or the symmetric key使用列名或对称密钥获取证书名称
【发布时间】:2017-03-23 04:24:40
【问题描述】:
我正在使用 SQL Server 2008/2012。在我的数据库中,我有一个包含加密列的表。
我正在使用此查询获取加密列的加密密钥 -
SELECT DISTINCT key_name(encryptedcol) FROM encryptedTable;
我的加密列名称是 encryptedcol。
现在我想获取用于创建加密密钥的证书名称(意味着我需要用于打开上述对称密钥来解密数据的证书名称)。
例如——
这里突出显示的文本是我的证书名称,这里是硬编码的,但我想从 sql 查询中获取它。
【问题讨论】:
标签:
sql-server-2008
tsql
encryption
sql-server-2012
【解决方案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)