宿主保护属性和 CLR 集成编程

公共语言运行时 (CLR) 提供一种机制,用于使用 CLR 宿主(例如从 SQL Server 2005 开始的 SQL Server)可能需要的特定属性对属于 .NET Framework 的托管应用程序编程接口 (API) 进行批注。 这种宿主保护属性 (HPA) 的示例包括:

  • SharedState,指示 API 是否公开创建或管理共享状态(例如,静态类字段)的功能。

  • Synchronization,指示 API 是否公开在线程之间执行同步的功能。

  • ExternalProcessMgmt,指示 API 是否公开控制宿主进程的方法。

在给定这些属性的基础上,SQL Server 可通过代码访问安全性 (CAS) 指定在宿主环境下不允许的 HPA 的列表。 CAS 要求由以下三个 SQL Server 权限集之一指定:SAFE、EXTERNAL_ACCESS 或 UNSAFE。 在服务器上使用 CREATE ASSEMBLY 语句注册程序集时,将指定这三个安全级别之一。 在 SAFE 或 EXTERNAL_ACCESS 权限集内执行的代码必须避免应用了 System.Security.Permissions.HostProtectionAttribute 属性的特定类型或成员。 有关详细信息,请参阅创建程序集CLR 集成编程模型限制

HostProtectionAttribute 与其说是一项安全权限,不如说是一种用于提高可靠性的方法,原因在于它标识宿主可能不允许的特定代码构造(类型或方法)。 使用 HostProtectionAttribute 会强制执行可帮助保护宿主稳定性的编程模型。

宿主保护属性

HPA 可标识不适合宿主编程模型的类型或成员,并表示可靠性威胁的以下递增级别:

  • 在其他方面为良性。

  • 可能会导致反序列化服务器托管的用户代码。

  • 可能会导致反序列化服务器进程本身。

SQL Server 不允许使用具有将 System.Security.Permissions.HostProtectionResource 枚举指定为 ExternalProcessMgmt、ExternalThreading、MayLeakOnAbort、SecurityInfrastructure、SelfAffectingProcessMgmnt、SelfAffectingThreading、 SharedState、Synchronization 或 UI 值的 HostProtectionAttribute 的类型或成员。 这会阻止程序集调用启用共享状态、执行同步、可能导致终止时资源泄漏或影响 SQL Server 进程的完整性的成员。

禁用的类型和成员

下面的主题标识了其 HostProtectionResource 值被 SQL Server 禁用的类型和成员。

注意注意

这些主题中的列表是通过受支持的程序集生成的。 有关详细信息,请参阅支持的 .NET Framework 库

本节涉及的主题

请参阅

概念

CLR 集成代码访问安全性

CLR 集成编程模型限制

创建程序集