【问题标题】: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)
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多