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

适用范围:SQL Server

公共语言运行时(CLR)提供一种机制,用于批注作为 .NET Framework 一部分的托管应用程序编程接口(API)。 这些属性可能对 CLR 的主机感兴趣,例如 SQL Server。 这种宿主保护属性 (HPA) 的示例包括:

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

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

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

鉴于这些属性,SQL Server 指定通过代码访问安全性(CAS)在托管环境中不允许的 HPA 列表。 CAS 要求由三个 SQL Server 权限集之一指定:SAFEEXTERNAL_ACCESSUNSAFE。 使用 CREATE ASSEMBLY 语句在服务器上注册程序集时,指定这三个安全级别之一。 在 SAFEEXTERNAL_ACCESS 权限集中执行的代码必须避免应用 System.Security.Permissions.HostProtectionAttribute 属性的某些类型或成员。 有关详细信息,请参阅 创建程序集CLR 集成编程模型限制

HostProtectionAttribute 不是一种提高可靠性的方法的安全权限,因为它标识主机可能禁止的特定代码构造(类型或方法)。 使用 HostProtectionAttribute 强制实施有助于保护主机稳定性的编程模型。

主机保护属性

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

  • 在其他方面为良性。
  • 可能会导致反序列化服务器托管的用户代码。
  • 可能会导致反序列化服务器进程本身。

SQL Server 禁止使用具有 HostProtectionAttribute 指定值为 System.Security.Permissions.HostProtectionResourceExternalProcessMgmtExternalThreadingMayLeakOnAbortSecurityInfrastructureSelfAffectingProcessMgmtSelfAffectingThreadingSharedStateSharedStateUI的 枚举的类型或成员。 这样可防止程序集调用启用共享状态、执行同步、终止时可能导致资源泄漏或影响 SQL Server 进程的完整性的成员。

不允许的类型和成员

以下文章标识 HostProtectionResource SQL Server 不允许的类型和成员。

这些文章中的列表是从支持的程序集生成的。 有关详细信息,请参阅 支持的 .NET Framework 库

在本部分中

描述
不允许 Microsoft.VisualBasic.dll 中的类型和成员 列出了 Microsoft.VisualBasic.dll 中其 HPA 值被禁用的类型和成员。
不允许 mscorlib.dll 中的类型和成员 列出了 mscorlib.dll 中其 HPA 值被禁用的类型和成员。
不允许 System.dll 中的类型和成员 列出了 System.dll 中其 HPA 值被禁用的类型和成员。
不允许 System.Data.dll 中的类型和成员 列出了 System.Data.dll 中其 HPA 值被禁用的类型和成员。
不允许 System.Core.dll 中的类型和成员 列出了 System.Core.dll 中其 HPA 值被禁用的类型和成员。