Compartilhar via


Níveis de confiança de segurança no acesso a recursos

Este tópico discute como o acesso é restrito aos tipos de recursos que System.Transactions expõem.

Há três níveis principais de confiança para System.Transactions. Os níveis de confiança são definidos com base nos tipos de recursos que System.Transactions expõem e no nível de confiança que deve ser necessário para acessar esses recursos. Os recursos aos quais System.Transactions fornece acesso são memória do sistema, recursos compartilhados entre todos os processos e recursos de todo o sistema. Os níveis são:

  • AllowPartiallyTrustedCallers (APTCA) para aplicativos que usam transações em um único domínio de aplicativo.

  • DTP (DistributedTransactionPermission ) para aplicativos que usam transações distribuídas.

  • Confiança total para recursos duráveis, aplicativos de gerenciamento de configuração e aplicativos de interoperabilidade herdados.

Observação

Você não deve chamar qualquer uma das interfaces de inscrição com contextos representados.

Níveis de confiança

APTCA (confiança parcial)

O System.Transactions assembly pode ser chamado por código parcialmente confiável porque foi marcado com o AllowPartiallyTrustedCallers atributo (APTCA). Esse atributo remove essencialmente a permissão implícita LinkDemand para o conjunto de permissões FullTrust, que caso contrário seria colocado automaticamente em cada método acessível publicamente em cada tipo. No entanto, alguns tipos e membros ainda exigem permissões mais fortes.

O atributo APTCA permite que os aplicativos usem transações em confiança parcial em um único domínio de aplicativo. Isso permite transações não escalonadas e alocações voláteis que podem ser usadas para o tratamento de erros. Um exemplo disso é uma tabela de hash transacionada e um aplicativo que a usa. Os dados podem ser adicionados e removidos da tabela de hash em uma única transação. Se a transação for revertida posteriormente, todas as alterações feitas na tabela de hash nessa transação poderão ser desfeitas.

Permissão para Transação Distribuída (DTP)

Quando uma System.Transactions transação é escalonada para ser gerenciada pelo MSDTC, System.Transactions exige que o DistributedTransactionPermission (DTP) crie a transação distribuída. Isso significa que o código que faz com que a transação ser escalados (como por meio de serialização ou mais inscrições duráveis) precisa ser concedida DTP. O código que originalmente criou a System.Transactions transação não precisa necessariamente possuir essa permissão.

Esse nível de permissão destina-se a restringir aplicativos que estão gravando em recursos duráveis. Após a falha, o aplicativo precisa ser capaz de se recuperar com o gerenciador de transações para determinar o resultado final da transação, para que ele possa atualizar dados permanentes. Esse tipo de aplicativo é conhecido como um gerenciador de fontes durável. Um exemplo clássico desse tipo de aplicativo é SQL.

Para habilitar a recuperação, esse tipo de aplicativo tem a capacidade de consumir permanentemente os recursos do sistema. Isso ocorre porque o gerenciador de transações recuperável deve se lembrar das transações confirmadas até confirmar que todos os gerenciadores de recursos duráveis que estão participando da transação receberam o resultado. Portanto, esse tipo de aplicativo requer total confiança e não deve ser executado, a menos que esse nível de confiança tenha sido concedido.

Para obter mais informações sobre alistamentos e recuperação duráveis, consulte os tópicos Alistamento de Recursos como Participantes em uma Transação e Execução de Recuperação.

Os aplicativos que executam o trabalho de interoperabilidade herdado com COM+ também precisam de confiança total.

Veja a seguir uma lista de tipos e membros que não podem ser chamados por código parcialmente confiável porque são decorados com o atributo de segurança declarativa FullTrust :

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

Somente o chamador imediato precisa possuir o conjunto de permissões FullTrust para usar os tipos ou métodos mencionados.