公共语言运行时 (CLR) 集成

适用于: SQL Server Azure SQL 托管实例

SQL Server 和Azure SQL 托管实例使你能够使用本机公共语言运行时(CLR)集成作为 SQL Server 服务器端模块(过程、函数和触发器)实现 .NET 语言的某些功能。 CLR 为托管代码提供服务,例如跨语言集成、代码访问安全性、对象生存期管理以及调试和分析支持。

对于 SQL Server 用户和应用程序开发人员,CLR 集成意味着可以使用任何 .NET Framework 语言(包括 Visual Basic .NET 和 Visual C#)编写存储过程、触发器、用户定义类型、用户定义的函数(标量和表值)。 SQL Server 包括预安装的 .NET Framework 版本 4。

此 6 分钟的视频演示如何在 Azure SQL 托管实例 中使用 CLR:

不再支持代码访问安全性

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

建议使用证书或非对称密钥对所有程序集进行签名,并在数据库中使用已授予权限masterUNSAFE ASSEMBLY相应登录名。 SQL Server 管理员还可以将程序集添加到数据库引擎应信任的程序集列表。 有关详细信息,请参阅 sys.sp_add_trusted_assembly

何时使用 CLR 模块

CLR 集成使你能够实现 .NET Framework 中可用的复杂功能,例如正则表达式、用于访问外部资源的代码(服务器、Web 服务、数据库)、自定义加密等。服务器端 CLR 集成的一些优势包括:

  • 更好的编程模型。 .NET Framework 语言在许多方面都比 Transact-SQL 更丰富,提供以前对 SQL Server 开发人员不可用的构造和功能。 开发人员还可以使用 .NET Framework 库的强大功能,该库提供了一组广泛的类,可用于快速高效地解决编程问题。

  • 改进了安全性和安全性。 托管代码在数据库引擎承载的公共语言运行时环境中运行。 SQL Server 使用它来提供更安全、更安全的替代方法,以替代早期版本的 SQL Server 中提供的扩展存储过程。

  • 能够定义数据类型和聚合函数。 用户定义的类型和用户定义的聚合是两个新的托管数据库对象,用于扩展 SQL Server 的存储和查询功能。

  • 通过标准化环境简化开发。 数据库开发已集成到 Microsoft Visual Studio .NET 开发环境的未来版本中。 开发人员在开发和调试数据库对象和脚本时所使用的工具与他们编写中间层或客户端层的 .NET Framework 组件和服务时所使用的工具相同。

  • 提高性能和可伸缩性的可能性。 在多数情况下,.NET Framework 语言编译和执行模型通过 Transact-SQL 提高性能。

SQL Server 语言扩展 为靠近数据库引擎的运行时提供替代的执行环境。 有关 SQL CLR 和 SQL 语言扩展之间的差异的讨论,请参阅将 SQL Server 语言扩展与 SQL CLR 进行比较

下表列出了本节中的文章。

文章 说明
CLR 集成概述 描述可以使用 CLR 集成生成的对象类型。 另请参阅使用 CLR 集成生成数据库对象的要求。
CLR 集成 - 新增功能 介绍此发行版的新功能。
CLR 集成体系结构 - CLR 托管环境 介绍 CLR 集成的设计目标。
启用 CLR 集成 介绍如何启用 CLR 集成。