Невозможно удалить асимметричный ключ, потому что к нему привязан логин

#sql-server #security #code-signing #sqlclr #asymmetric

#sql-server #Безопасность #подписание кода #sqlclr #асимметричный

Вопрос:

Я создал асимметричный ключ ‘key_clr_http_request’, и если я select * from sys.asymmetric_keys смогу его увидеть:

введите описание изображения здесь

Теперь я хотел бы его удалить:

 use master
DROP ASYMMETRIC KEY key_clr_http_request
  

Но в качестве ответа я получаю:

 Cannot drop asymmetric key 'key_clr_http_request' because there is a login mapped to it.
  

Я уже пробовал перезапустить SSMS, и я sa на этой тестовой машине.
Никто не подключается к этому компьютеру прямо сейчас, только я, так какой логин сопоставлен?

Ответ №1:

Это не имеет ничего общего с вашим уровнем разрешений и, конечно же, не имеет ничего общего с SSMS.

Вот как работает подписание модуля. Модуль (в данном случае сборка) подписан строгим именем / асимметричным ключом. Часть открытого ключа этого ключа строгого имени загружается как асимметричный ключ в [master] . Оттуда создается логин из этого асимметричного ключа, чтобы ему можно было назначить разрешения, поскольку разрешения не могут быть назначены асимметричному ключу или сертификату. Итак, вам нужно удалить логин, созданный из этого асимметричного ключа, затем вы можете удалить асимметричный ключ.

Выполните следующее, и вы увидите соответствующий логин:

 SELECT aky.[name] AS [AsymmetricKey], lgn.*
FROM   sys.server_principals lgn
INNER JOIN sys.asymmetric_keys aky
        ON aky.[sid] = lgn.[sid];
  

Для получения дополнительной информации о работе с подписью модуля, пожалуйста, посетите: Информация о подписании модуля

Для получения дополнительной информации о работе с SQLCLR в целом, пожалуйста, посетите: Информация о SQLCLR