【问题标题】:Updating an Assembly with an Asymmetric Key使用非对称密钥更新程序集
【发布时间】:2013-02-12 16:40:14
【问题描述】:

我之前使用 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.

所以我想既然程序集是以相同的方式创建和签名的,我只需要安装它。这是正确的吗?

【问题讨论】:

    标签: sql-server sql-server-2005 .net-assembly encryption-asymmetric


    【解决方案1】:

    没有。从非对称密钥创建登录(或者更准确地说,服务器主体)是一种说“嘿......有权做这种事情的人可能查看了你的 CLR 代码并给了它大拇指”的一种方式-向上”。创建服务器主体后,使用支持它的密钥签名的任何程序集都可以运行。

    【讨论】:

    • 哦,好吧,我只需要第一次做,因为它是用密钥签名的,对吧?
    • 是的。为了向自己证明这一点,请在注销、注销、重新登录并再次检查之前检查 sys.crypt_properties。您会看到程序集上的签名仍然存在。
    猜你喜欢
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2011-01-14
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2015-12-30
    相关资源
    最近更新 更多