SQL Server CLR中的第三方dll


Answers:


14

您只能添加对已在Sql Server中注册的那些程序集的引用。如果未注册,它们将不会显示在“添加引用”对话框中。

注册DLL需要执行许多步骤,首先需要重新配置数据库:

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;

完成此操作后,将启用Sql Server CLR。接下来,您需要注册您的程序集:

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE

如果最后一个脚本正确运行,则程序集现在已注册,并将出现在“添加引用”对话框中。

但是,您需要考虑的是Sql Server CLR配置的应用程序安全性:

  1. 最好注册一个程序集,因为SAFE只有在特殊情况下才应使用EXTERNAL_ACCESSUNSAFE
  2. 不要指望能够在完全信任的CLR上(即,不是由Sql Server托管的CLR)能够做所有事情-SQLCLR是一个沙盒运行时。
  3. 不要Assembly.Load()有目的地限制动态加载程序集。
  4. 如果您打算使用,则可能需要确保第3方库已用公钥签名UNSAFE
  5. 代码执行是在运行Sql Server的服务标识的上下文中运行的(我认为!)
  6. 从托管程序集进行的数据库访问(例如通过context connection = true;)在连接的用户的上下文中运行,因此您需要确保了解该库对数据的访问权限。

在上面的4中,您必须签署大会。我得到了这一部分,并且已经能够通过此处的签名说明来做到这一点:geekswithblogs.net/ktegels/archive/2006/02/16 / ... 但是,当您没有私钥时(例如,何时程序集是由受信任的第三方创建并签名的?据我在上面的链接中知道的那样,证书的创建需要存在私钥。那似乎使这不可能?
JorgeSandoval

2
另外-将db标记为可信任是有风险的(对于“安全”程序集安装来说是不必要的)。可信赖性是围绕程序集签署外部/不安全权限的一种方法,但不建议这样做,因为安装的任何CLR程序集都将受到信任...
JorgeSandoval 2012年

5

我假设您正在询问有关从Visual Studio安装SQL CLR程序集的替代方法。

在Visual Studio中不需要代码。

在MSDN上部署CLR数据库对象详细说明了这些选项,包括SQL语句和部署脚本。


1

我使用了一个非常大的第三方DLL,该DLL会占用一个网页并将其转换为PDF。

PDF将保存在文件共享中,并且数据库的位置和类型也会更新。

这是一个三步过程:

  1. 创建一个使用第三方DLL来创建PDF并接受URL和FilePath作为参数的控制台应用程序,并返回PDF的大小和页数。

  2. 创建一个CLR存储过程,然后在服务器上调用控制台应用程序

  3. 我将所有这些包装到单个存储过程中,该存储过程调用CLR应用程序以创建PDF,然后将有关它的元数据写入数据库。

我意识到这并不完美,绝不应该在触发器内做任何疯狂的事!

我在这里只为其他人提到在其CLR中使用3rd Party DLL时遇到问题。

我希望通过分离cmd.exe控制台来运行3rd Party DLL,而不是运行过程中的所有内容(如果崩溃),不会对SQL Server产生太大的负面影响。那就是我所希望的。

请评论这是否真的很糟糕,为什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.