我有一个要从数据库中删除的证书。
如果我发出命令
DROP CERTIFICATE <FooCert>
我得到错误
The certificate cannot be dropped because one or more entities are either signed or encrypted using it
根据Jason Strate的说法,我应该能够找出证书所签名的内容。
以下查询返回0行:
SELECT OBJECT_SCHEMA_NAME(co.major_id) + '.' + OBJECT_NAME(co.major_id)
FROM sys.certificates c
INNER JOIN sys.crypt_properties co ON c.thumbprint = co.thumbprint
WHERE co.crypt_type_desc = 'SIGNATURE BY CERTIFICATE'
AND c.name = 'FooCert'
我还尝试根据此SO问题将实体分离。 /programming/52460/how-do-i-find-and-decouple-entities-from-a-certificate-when-upgrading-ms-sqlserv
如何删除此证书上的依赖项,以便可以删除它?
能否请您尝试我在此处发布的查询:查找已签名的过程,函数,触发器,程序集以及使用哪种证书/不对称密钥。有什么发现吗?如果是这样,我可以发布它,或者只是在此处链接。如果不是,我猜它是基于证书的登录名/用户,我可以为此发布查询。
—
所罗门·鲁茨基
返回0行。
—
Geoff Dawdy '16年
您是否在任何数据库上启用了“透明数据加密”(TDE)?
—
SQLPRODDBA
@SQLPRODDBA感谢您提及TDE :-)。我没有考虑过,但是在我的答案中添加了一个查询以找到它(并对其进行了测试并确认它可以工作)。
—
所罗门·鲁兹基
@srutzky感谢您考虑!您的脚本很棒!
—
SQLPRODDBA 2016年