管理 CLR 集成程序集

Applies to:SQL Server

将编译托管代码,然后在称为公共语言运行时 (CLR) 程序集的单元中部署。 程序集打包为 DLL 或可执行文件(.exe) 文件。 尽管可执行文件可以自动运行,但 DLL 必须在现有应用程序中承载。 托管 DLL 程序集可以加载到 SQL Server 中并托管。 SQL Server 要求使用 CREATE ASSEMBLY 语句在数据库中注册程序集,然后才能在进程中加载并使用该程序集。 还可以使用 ALTER ASSEMBLY 语句从较新版本更新程序集,也可以使用 DROP ASSEMBLY 语句从 SQL Server 中删除程序集。

程序集信息存储在安装程序集的数据库中 sys.assembly_files 表中。 sys.assembly_files 表包含以下列。

Column Description
assembly_id 为程序集定义的标识符。 此编号分配到与同一程序集相关的所有对象。
name 对象的名称。
file_id 标识每个对象的数字,其中第一个对象与给定 assembly_id 给定的值为 1。 如果多个对象与同一个 assembly_id相关联,则每个后续 file_id 值将递增 1。
content 程序集或文件的十六进制表示形式。

在本部分中

Article Description
创建程序集 讨论在 SQL Server 中创建 SAFEEXTERNAL_ACCESSUNSAFE CLR 程序集
更改程序集 介绍如何更新 SQL Server 中的 CLR 程序集
删除程序集 讨论从 SQL Server 中删除 CLR 程序集

不再支持代码访问安全性

CLR 在 .NET Framework 中使用代码访问安全性 (CAS)(不可再作为安全边界)。 使用 PERMISSION_SET = SAFE 创建的 CLR 程序集可以访问外部系统资源、调用非托管代码以及获取 sysadmin 特权。 在 SQL Server 2017 (14.x) 及更高版本中,sp_configure 选项 clr strict security 增强了 CLR 程序集的安全性。 默认启用 clr strict security,并将 SAFEEXTERNAL_ACCESS 程序集与标记为 UNSAFE 的程序集同等对待。 可禁用 clr strict security 选项以实现后向兼容性,但不建议这样做。

我们建议所有程序集都通过证书或非对称密钥进行签名,且该证书或非对称密钥具有已在 UNSAFE ASSEMBLY 数据库中获得 master 权限的相应登录名。 SQL Server 管理员还可以将程序集添加到数据库引擎应信任的程序集列表。 For more information, see sys.sp_add_trusted_assembly.