我有一个要从数据库中删除的证书。
如果我发出命令
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 question 将实体解耦。 https://stackoverflow.com/questions/52460/how-do-i-find-and-decouple-entities-from-a-certificate-when-upgrading-ms-sqlserv
如何删除此证书的依赖项以便删除它?
要查找与证书和非对称密钥相关的项目,请首先尝试在此 DBA.SE 答案中发布的查询:
查找签名的过程、函数、触发器、程序集以及哪些证书/非对称密钥
如果这不返回任何对象,请尝试以下查询:
请注意,登录是服务器/实例级别,而其他一切都是数据库级别。此外,数据库加密密钥虽然处于数据库级别,但在返回所有数据库数据的 DMV 中报告,因此不会根据“当前”数据库而更改。
遇到了类似的问题,对我来说,这个查询帮助我找到了签名的对象:
资源
然后我只是使用以下命令作为示例,其中
dbo.sp_name
签名对象和STOREDPROCEDURESIGNINGCERT
签名证书。