运行所有这些命令的登录名是sysadmin
SQL 2012 Developer 实例上的服务器角色的成员。它是要部署到的数据库的所有者。EXTERNAL ACCESS ASSEMBLY
已授予此数据库中的登录权限。还尝试了以下所有sa
登录方式均无济于事。
alter database test set trustworthy on
go
create assembly [icsharpcode.sharpziplib]
from 'C:\Workspace\111\icsharpcode-SharpZipLib-4f2d664\bin\Release\ICSharpCode.SharpZipLib.dll'
with permission_set = UNSAFE --< This works!
go
create assembly OutOfRowCompression
from 'C:\Workspace\Sandbox\OutOfRowCompression\OutOfRowCompression\bin\Debug\OutOfRowCompression.dll'
with permission_set = UNSAFE --< This fails!
go
最后一个命令失败:
消息 10327,级别 14,状态 1,第 1 行为程序集“OutOfRowCompression”创建程序集失败,因为程序集“OutOfRowCompression”未获得 PERMISSION_SET = UNSAFE 的授权。当以下任一情况为真时,程序集被授权:数据库所有者 (DBO) 具有 UNSAFE ASSEMBLY 权限并且数据库具有 TRUSTWORTHY 数据库属性;或者程序集使用证书或非对称密钥签名,该密钥具有相应的登录名并具有 UNSAFE ASSEMBLY 权限。
收到错误后,我使用新的非对称密钥对程序集进行了签名并将key1.pfx
其添加到主数据库:
CREATE ASYMMETRIC KEY key1
FROM executable
FILE = 'C:\Workspace\Sandbox\OutOfRowCompression\OutOfRowCompression\bin\Debug\OutOfRowCompression.dll'
验证密钥是否存在:
从此密钥创建登录并授予上帝模式:
create login clr_key1 from asymmetric key key1
go
GRANT EXTERNAL ACCESS ASSEMBLY TO clr_key1
go
来自程序集创建命令的错误仍然相同。
尝试OutOfRowCompression
在 Visual Studio 2012 中使用 SAFE 和 UNSAFE 访问构建程序集 - 没有区别。
我觉得我已经满足了错误消息提出的所有要求。它应该工作。我错过了什么?