Niveles de confianza de seguridad para acceder a los recursos

En este tema se discute cómo el acceso está restringido en los tipos de recursos que System.Transactions expone.

Hay tres niveles principales de confianza para System.Transactions. Los niveles de confianza se definen dependiendo de los tipos de recursos que System.Transactions expone y el nivel de confianza que se debería exigir para tener acceso a esos recursos. Los recursos a los que System.Transactions proporciona acceso, son la memoria del sistema, recursos amplios de proceso compartido y los recursos para todo el sistema. Los niveles son:

  • AllowPartiallyTrustedCallers (APTCA) para aplicaciones que usan transacciones dentro de un único dominio de aplicación.

  • DistributedTransactionPermission (DTP) para aplicaciones que usan transacciones distribuidas.

  • Plena confianza para los recursos duraderos, aplicaciones de gestión de la configuración y las aplicaciones interoperativas heredadas.

Nota

No se debería llamar a cualquiera de las interfaces de inscripción con contextos suplantados.

Niveles de confianza

APTCA (confianza parcial)

Concretamente, un código de confianza parcial puede llamar al ensamblado System.Transactions cuando se ha marcado con el atributo AllowPartiallyTrustedCallers (APTCA). Este atributo básicamente quita el valor LinkDemand implícito para el permiso FullTrust establecido que, por otra parte, se coloca automáticamente en cada método público accesible de cada tipo. Sin embargo, algunos tipos y miembros siguen necesitando permisos más firmes.

El atributo APTCA permite a las aplicaciones utilizar las transacciones en confianza parcial dentro de un dominio de aplicación único. Esto habilita las transacciones no escalonadas y las inscripciones volátiles que se pueden utilizar para el control de errores. Un ejemplo de esto es una tabla hash llevada a cabo y una aplicación que lo utiliza. Los datos se pueden agregar a y quitar de la tabla hash bajo una transacción única. Si se deshace la transacción después, se pueden deshacer todos los cambios realizados a la tabla hash bajo esa transacción.

DistributedTransactionPermission (DTP)

Cuando se realiza una escalada una transacción System.Transactions para ser administrada por MSDTC, System.Transactions exige (DTP) DistributedTransactionPermission para crear la transacción distribuida. Esto significa que el código que produce la transacción que ha de realizar una escalada (como a través de serialización o las inscripciones adicionales duraderas) necesitaría ser concedido DTP. El código que originalmente creó la transacción System.Transactions necesariamente no necesita poseer este permiso.

Se piensa que este nivel de permisos restringe aplicaciones que están escribiendo en los recursos duraderos. En el error, la aplicación necesita poder recuperarse con el administrador de transacciones para determinar el último resultado de la transacción, para que pueda actualizar los datos permanentes. Este tipo de aplicación es conocido como un administrador de origen duradero. Un ejemplo clásico de este tipo de aplicación es SQL.

Para habilitar la recuperación, este tipo de aplicación tiene la capacidad de utilizar permanentemente los recursos del sistema. Esto sucede porque el administrador de transacciones recuperable debe recordar transacciones que se han confirmado hasta que pueda confirmar que todos los administradores de recursos duraderos que están participando en la transacción han recibido el resultado. Por consiguiente, este tipo de aplicación requiere la plena confianza y no se ejecuta a menos que se haya permitido ese nivel de confianza.

Para obtener más información sobre las inscripciones duraderas y la recuperación, consulte los temas Inscribir recursos como participantes en una transacción y Realizar la recuperación.

También exigen a las aplicaciones que realizan el trabajo de la interoperabilidad heredado con COM+ que tengan la plena confianza.

En la siguiente lista se relacionan los tipos y miembros que no son invocables por el código de confianza parcial puesto que este atributo de seguridad declarativo FullTrust tiene un carácter representativo:

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

Solo se exige que el llamador inmediato posea el conjunto de permisos FullTrust para utilizar los tipos anteriores o métodos.