У меня есть сертификат, который я хотел бы удалить из базы данных.
Если я дам команду
DROP CERTIFICATE <FooCert>
Я получаю ошибку
The certificate cannot be dropped because one or more entities are either signed or encrypted using it
По словам Джейсона Стрита, я должен быть в состоянии выяснить, что подписано сертификатом.
Следующий запрос возвращает 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'
Я также попытался отделить сущности по этому такому вопросу. /programming/52460/how-do-i-find-and-decouple-entities-from-a-certificate-when-upgrading-ms-sqlserv
Как я могу удалить зависимости от этого сертификата, чтобы я мог удалить его?
sql-server
sql-server-2012
encryption
certificate
signature
Джефф Доуди
источник
источник
Ответы:
Чтобы найти элементы, связанные с сертификатами и асимметричными ключами, сначала попробуйте запрос, опубликованный в этом DBA.SE Ответ:
Найти подписанные процедуры, функции, триггеры, сборки и по каким сертификатам / асимметричным ключам
Если это не возвращает никаких объектов, попробуйте следующие запросы, которые ищут:
Обратите внимание, что логины находятся на уровне сервера / экземпляра, а все остальное - на уровне базы данных. Кроме того, ключи шифрования базы данных, находясь на уровне базы данных, передаются в DMV, который возвращает данные для всех баз данных и поэтому не изменяется в зависимости от «текущей» базы данных.
источник
Обнаружена похожая проблема, для меня этот запрос помог мне найти подписанный объект:
Источник
Затем я просто использовал следующую команду в качестве примера, где
dbo.sp_name
находится подписанный объект иSTOREDPROCEDURESIGNINGCERT
сертификат подписи.источник