我之前使用VS 2010创建了一个程序集,并使用密钥对其进行了签名。我运行了如下脚本:
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRPSBatch20Key FROM EXECUTABLE FILE = 'C:\Unsafe\MyDLL.dll';
CREATE LOGIN SQLCLRPSBatch20Login FROM ASYMMETRIC KEY SQLCLRPSBatch20Key;
GRANT UNSAFE ASSEMBLY TO SQLCLRPSBatch20Login;
GO
use MyDB;
GO
// create assembly script here to install unsafe assembly
现在我是否需要这样做并创建一个新密钥并在每次将程序集放到数据库上时重新登录并重新安装以进行更新?
当我这样做时,我得到:
Msg 15396, Level 16, State 1, Line 2
An asymmetric key with name 'SQLCLRPSBatch20Key' already exists or this asymmetric key already has been added to the database.
Msg 15151, Level 16, State 1, Line 3
Cannot find the asymmetric key 'SQLCLRPSBatch20Key', because it does not exist or you do not have permission.
Msg 15151, Level 16, State 1, Line 4
Cannot find the login 'SQLCLRPSBatch20Login', because it does not exist or you do not have permission.
所以我想因为程序集是以相同的方式创建和签名的,所以我只需要安装它。这是对的吗?
答案 0 :(得分:0)
没有。从非对称密钥创建登录(或者更确切地说,服务器主体)是一种说法“嘿......有权做这种事情的人可能看了你的CLR代码并给了它大拇指UP”。创建服务器主体后,使用支持它的密钥签名的任何程序集都可以运行。