Tenho um certificado que gostaria de remover do banco de dados.
Se eu emitir o comando
DROP CERTIFICATE <FooCert>
eu recebo o erro
The certificate cannot be dropped because one or more entities are either signed or encrypted using it
De acordo com Jason Strate, devo conseguir descobrir o que está assinado no certificado.
A consulta a seguir retorna 0 linhas:
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'
Eu também tentei desacoplar as entidades por esta questão SO. https://stackoverflow.com/questions/52460/how-do-i-find-and-decouple-entities-from-a-certificate-when-upgrading-ms-sqlserv
Como posso remover as dependências deste certificado para removê-lo?
Para encontrar itens associados a Certificados e Chaves Assimétricas, primeiro tente a consulta postada nesta Resposta DBA.SE:
Encontre procedimentos, funções, gatilhos, assemblies assinados e por quais certificados/chaves assimétricas
Se isso não retornar nenhum objeto, tente as seguintes consultas que procuram:
Observe que os logins são de nível de servidor/instância, enquanto todo o resto é de nível de banco de dados. Além disso, as chaves de criptografia do banco de dados, embora estejam no nível do banco de dados, são relatadas em um DMV que retorna dados para todos os bancos de dados e, portanto, não muda com base no banco de dados "atual".
Encontrei um problema semelhante, para mim esta consulta me ajudou a encontrar o objeto assinado:
Fonte
Então usei apenas o seguinte comando como exemplo onde
dbo.sp_name
está o objeto assinado eSTOREDPROCEDURESIGNINGCERT
está o certificado de assinatura.