访问资源的安全信任级别

本主题讨论如何限制 System.Transactions 所公开的资源类型的访问权限。

System.Transactions 主要有三种信任级别。 信任级别基于公开的资源 System.Transactions 类型以及访问这些资源所需的信任级别定义。 提供访问权限的资源 System.Transactions 包括系统内存、共享进程范围资源和系统范围资源。 级别包括:

  • AllowPartiallyTrustedCallers (APTCA) 适用于在单个应用程序域中使用事务的应用程序。

  • DistributedTransactionPermission (DTP)适用于使用分布式事务的应用程序。

  • 对持久资源、配置管理应用程序和遗留互操作应用程序给予完全信任。

注释

不能在模拟上下文中调用任何登记接口。

信任级别

APTCA(部分信任)

System.Transactions 程序集可由部分受信任的代码调用,因为它已经使用 AllowPartiallyTrustedCallers 特性 (APTCA) 进行标记。 此特性实质上是移除了 LinkDemandFullTrust 权限集的隐式 权限,该权限在其他情况下会被自动置于每个类型的每个可公共访问的方法上。 但是,某些类型和成员仍需要更强大的权限。

APTCA 特性使应用程序可以在单个应用程序域中以部分信任级别使用事务。 这会启用未升级的事务和可用于错误处理的可变登记。 其中一个示例是事务处理哈希表和使用它的应用程序。 可以将数据添加到单个事务下的哈希表中并从中删除。 如果以后回滚该事务,则对该事务下哈希表的所有更改都可撤消。

DistributedTransactionPermission (DTP)

System.Transactions当事务升级为由 MSDTC 管理时,System.Transactions要求 DistributedTransactionPermission (DTP) 创建分布式事务。 这意味着需要向用于使事务升级(例如,通过序列化或其他持久登记)的代码授予 DTP。 最初创建 System.Transactions 事务的代码不一定需要拥有此权限。

此权限级别旨在限制写入持久资源的应用程序。 失败后,应用程序需要能够与事务管理器一起恢复,以确定事务的最终结果,以便它可以更新永久数据。 这种类型的应用程序称为持久源管理器。 这种类型的应用程序的经典示例是 SQL。

若要启用恢复,这种类型的应用程序能够永久使用系统资源。 这是因为可恢复事务管理器必须记住已提交的事务,直到可以确认参与事务的所有持久资源管理器都收到了结果。 因此,这种类型的应用程序需要完全信任,除非已授予该信任级别,否则不应运行。

有关持久登记和恢复的更多信息,请参阅主题将资源登记为事务中的参与者执行恢复

此外,使用 COM+ 执行旧版互操作的应用程序也需要具有完全信任级别。

下面是部分受信任代码无法调用的类型和成员列表,因为它们使用 FullTrust 声明性安全属性进行修饰:

PermissionSetAttribute(SecurityAction.LinkDemand, Name := "FullTrust")

只有直接调用方才需要拥有 FullTrust 权限集才能使用上述类型或方法。