aje*_*jeh 4 sql-server compression sql-server-2012 sql-clr
运行所有这些命令的登录名是sysadmin
SQL 2012 Developer 实例上服务器角色的成员。它是部署到的数据库的所有者。EXTERNAL ACCESS ASSEMBLY
已授予此 DB 中的登录权限。还尝试了以下所有内容作为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
Run Code Online (Sandbox Code Playgroud)
最后一个命令失败:
消息 10327,级别 14,状态 1,第 1 行 CREATE ASSEMBLY 为程序集“OutOfRowCompression”失败,因为程序集“OutOfRowCompression”未被授权用于 PERMISSION_SET = UNSAFE。当以下任一情况为真时,程序集被授权:数据库所有者 (DBO) 具有 UNSAFE ASSEMBLY 权限并且数据库具有 TRUSTWORTHY 数据库属性;或者程序集使用证书或非对称密钥签名,该密钥具有具有不安全程序集权限的相应登录名。
收到错误后,我使用新的非对称密钥对程序集进行了签名key1.pfx
,并将其添加到主数据库中:
CREATE ASYMMETRIC KEY key1
FROM executable
FILE = 'C:\Workspace\Sandbox\OutOfRowCompression\OutOfRowCompression\bin\Debug\OutOfRowCompression.dll'
Run Code Online (Sandbox Code Playgroud)
验证密钥是否存在:
从此密钥创建登录并授予上帝模式:
create login clr_key1 from asymmetric key key1
go
GRANT EXTERNAL ACCESS ASSEMBLY TO clr_key1
go
Run Code Online (Sandbox Code Playgroud)
程序集创建命令仍然存在相同的错误。
尝试OutOfRowCompression
在 Visual Studio 2012 中使用 SAFE 和 UNSAFE 访问构建程序集- 没有区别。
我觉得我已经满足了错误消息提出的所有要求。它应该工作。我错过了什么?
你的GRANT
说法是不正确的。您只授予了将程序集设置为EXTERNAL_ACCESS
而非的能力UNSAFE
。UNSAFE
受到的限制少于EXTERNAL_ACCESS
,因此授予UNSAFE ASSEMBLY
登录EXTERNAL ACCESS ASSEMBLY
权限包括 - 隐式 -权限。
您需要使用:
GRANT UNSAFE ASSEMBLY TO [clr_key1];
Run Code Online (Sandbox Code Playgroud)
PS 您需要检查您正在导入的两个 DLL 为何需要将它们标记为UNSAFE
. 如果是由于将值存储在静态变量中,那么如果两个会话同时执行此代码,则可能会导致意外结果。
归档时间: |
|
查看次数: |
11890 次 |
最近记录: |