无法删除非对称密钥,因为有一个登录映射到它

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

我创建了一个非对称密钥 '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 在此测试机器上。 现在没有人连接到这台机器,只有我,那么 登录映射是什么 ?

这与您的权限级别无关,当然也与 SSMS 无关。

这就是模块签名的工作原理。该模块(在本例中为程序集)使用强名称/非对称密钥进行签名。该强名称密钥的 public 密钥部分作为非对称密钥加载到 [master] 中。从那里,从该非对称密钥创建一个登录名,以便可以为其分配权限,因为不能将权限分配给非对称密钥或证书。因此,您需要删除从该非对称密钥创建的登录名,然后才能删除非对称密钥。

执行以下命令,您将看到有问题的登录:

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

有关使用模块签名的更多信息,请访问:Module Signing Info

有关一般使用 SQLCLR 的更多信息,请访问:SQLCLR Info