SQL Server CLR 中的第 3 方 dll

14 sql-server c# sql-clr

我需要在 SQL Server CLR 的触发器 c# 代码中使用第三方 DLL

但是当我尝试添加引用时,它只显示来自 SQL Server 的一些 DLL。

如何将我的第三方 dll添加到 SQL Server?

小智 15

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

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

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;
Run Code Online (Sandbox Code Playgroud)

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

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 更喜欢将程序集注册为SAFE,只有在特殊情况下才应使用EXTERNAL_ACCESSUNSAFE
  2. 不要指望能够在完全信任的 CLR(即,不是由 Sql Server 托管的 CLR)上做所有你能做的事情——SQLCLR 是一个沙盒运行时。
  3. 不要尝试动态加载程序集,因为这Assembly.Load()是故意限制的。
  4. 如果您计划使用UNSAFE.
  5. 代码执行在运行 Sql Server 的服务标识的上下文中运行(我认为!)
  6. 从托管程序集(例如通过context connection = true;)进行的数据库访问在连接用户的上下文中运行,因此您需要确保您知道该库对您的数据具有哪些访问权限。

  • 另外 - 将 db 标记为值得信赖是有风险的(并且对于“安全”程序集安装来说是不必要的)。值得信赖是必须为外部/不安全权限对程序集进行签名的一种方法,但不建议这样做,因为安装的任何 CLR 程序集都是可信的... (2认同)

Ode*_*ded 5

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

不需要在 Visual Studio 中拥有代码。

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