不久之前,我回答过一个问题:如找出被证书(certificate)加密的密钥。 我写了一些查询,用于找出那些加密,签名的信息。在展示这些查询之前,我会对这两个视图做个简要的介绍:
crypt_properties视图保存了签名(signature)相关的信息。可以用其中的thumbprint列来确定相关的密钥。
key_encryptions视图保存了对称密钥加密(symmetric key)的相关信息。和crypt_properties视图一样,非对称密钥(asymmetric key)和证书也是用thumbprint列来确定的。 但是,对称密钥则完全不同,需要用到GUID.
现在列出这些查询 :
--被证书cert1签名的对象
select object_name(cp.major_id) from sys.crypt_properties cp, sys.certificates c where cp.thumbprint = c.thumbprint and c.name = 'cert1';

--查找被非对称密钥akey1签名的对象
select object_name(cp.major_id) from sys.crypt_properties cp, sys.asymmetric_keys ak where cp.thumbprint = ak.thumbprint and ak.name = 'akey1';

-- 被证书cert1加密的对称密钥
select sk.name from sys.key_encryptions ke, sys.certificates c, sys.symmetric_keys sk where ke.thumbprint = c.thumbprint and c.name = 'cert1' and ke.key_id = sk.symmetric_key_id
--被非对称密钥akey1加密的对称密钥
select sk.name from sys.key_encryptions ke, sys.asymmetric_keys ak, sys.symmetric_keys sk where ke.thumbprint = ak.thumbprint and ak.name = 'akey1' and ke.key_id = sk.symmetric_key_id

--被对称密钥skey1加密的对称密钥
select sk1.name from sys.key_encryptions ke, sys.symmetric_keys sk1, sys.symmetric_keys sk2 where ke.thumbprint = sk2.key_guid and sk2.name = 'skey1' and ke.key_id = sk1.symmetric_key_id
-- 查找加密了对称密钥skey1的证书
select c.name from sys.key_encryptions ke, sys.certificates c, sys.symmetric_keys sk where ke.thumbprint = c.thumbprint and sk.name = 'skey1' and ke.key_id = sk.symmetric_key_id

-- 加密了对称密钥skey1的非对称密钥
select ak.name from sys.key_encryptions ke, sys.asymmetric_keys ak, sys.symmetric_keys sk where ke.thumbprint = ak.thumbprint and sk.name = 'skey1' and ke.key_id = sk.symmetric_key_id

--加密了对称密钥skey1的对称密钥
select sk2.name from sys.key_encryptions ke, sys.symmetric_keys sk1, sys.symmetric_keys sk2 where ke.thumbprint = sk2.key_guid and sk1.name = 'skey1' and ke.key_id = sk1.symmetric_key_id

原文地址:SQL Server 2005 helpful catalogs: crypt_properties and key_encryptions
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现