Eu 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
Segundo Jason Strate, eu devo descobrir o que é assinado pelo 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 dissociar as entidades por essa pergunta SO. /programming/52460/how-do-i-find-and-decouple-entities-from-a-certificate-when-upgrading-ms-sqlserv
Como posso remover as dependências deste certificado para poder removê-lo?
sql-server
sql-server-2012
encryption
certificate
signature
Geoff Dawdy
fonte
fonte
Respostas:
Para localizar itens associados a Certificados e Chaves Assimétricas, tente primeiro a consulta publicada neste DBA.SE Resposta:
Encontre procedimentos assinados, funções, gatilhos, montagens e pelos quais certificados / chaves assimétricas
Se isso não retornar nenhum objeto, tente as seguintes consultas que procuram:
Observe que os logons são no nível do servidor / instância, enquanto todo o resto é no nível do banco de dados. Além disso, as Chaves de Criptografia de Banco de Dados, embora estejam no nível do Banco de Dados, são relatadas em uma DMV que retorna dados para todos os bancos de dados e, portanto, não são alteradas com base no Banco de Dados "atual".
fonte
Foi encontrado um problema semelhante. Para mim, essa consulta me ajudou a encontrar o objeto assinado:
Fonte
Depois, usei o comando a seguir como exemplo, onde
dbo.sp_name
está o objeto assinado eSTOREDPROCEDURESIGNINGCERT
o certificado de assinatura.fonte