调用CLR函数“已重新访问”时出现SecurityException错误

时间:2018-09-12 20:35:25

标签: sql-server multithreading security permissions sqlclr

我仅在本地运行SQL Server。 我正在使用VS 2017社区构建一个项目。 我创建了一个CLR过程,并成功将其作为程序集上传。 该类和方法是公共的。 我创建了一个SQL标准proc来调用具有Permissions_set = external_access的clr proc。 值得信赖。 更改授权设置为sa。

它所做的只是执行一个bat文件:      cmd.exe c:\ temp \ test.bat

但是我仍然收到错误6522安全异常。

当我将该方法作为控制台应用程序运行时,它运行完美。但是在SQL Server中 不行。

对于任何建议,我将非常感谢-这是我第一次尝试CLR。

Client

1 个答案:

答案 0 :(得分:0)

  

[SQLCLR] proc,具有权限集= external_access

那是问题。您正在使用线程,这要求PERMISSION_SETUNSAFE

此外,尽管Visual Studio在此方面提供的帮助很少,但是通常不应将数据库的设置为TRUSTWORTHY ON。是的,它是解决此烦人问题的简单解决方案,但这并不是一个好的/长期的解决方案,尤其是对于生产而言。有一种方法(实际上是两种方法)可以正确地设置内容,以使用非对称密钥/强名称密钥或证书来处理安全性。两种方法都可以在Visual Studio / SQL Server数据工具(SSDT)的结构内工作。一些信息(我在S.O.上的回答):

CLR Strict Security on SQL Server 2017

还有我的两篇博客文章,每种涉及不同的方法:

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

SQLCLR.org