我仅在本地运行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
答案 0 :(得分:0)
[SQLCLR] proc,具有权限集= external_access
那是问题。您正在使用线程,这要求PERMISSION_SET
为UNSAFE
。
此外,尽管Visual Studio在此方面提供的帮助很少,但是通常不应将数据库的设置为TRUSTWORTHY ON
。是的,它是解决此烦人问题的简单解决方案,但这并不是一个好的/长期的解决方案,尤其是对于生产而言。有一种方法(实际上是两种方法)可以正确地设置内容,以使用非对称密钥/强名称密钥或证书来处理安全性。两种方法都可以在Visual Studio / SQL Server数据工具(SSDT)的结构内工作。一些信息(我在S.O.上的回答):
CLR Strict Security on SQL Server 2017
还有我的两篇博客文章,每种涉及不同的方法:
有关一般使用SQLCLR的更多信息,请访问: