使用列名称或对称密钥

时间:2016-11-09 11:13:40

标签: sql-server-2008 tsql encryption sql-server-2012

我正在使用SQL Server 2008 / 2012.在我的数据库中,我有一个具有加密列的表。

使用此查询

获取加密列的加密密钥
SELECT DISTINCT key_name(encryptedcol) FROM encryptedTable;

我的加密列名是 encryptedcol

现在我想获取用于创建加密密钥的证书名称(意味着我需要用于打开上述对称密钥以解密数据的证书名称)。

例如 -

enter image description here

这里突出显示的文本是我的证书名称,这里是硬编码的,但我想从sql查询中获取它。

1 个答案:

答案 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)