Permissões de segurança

O common language runtime permite que o código realize apenas essas operações que o código tem permissão para executar. O tempo de execução usa objetos chamados permissões para reforçar restrições em código gerenciado. O tempo de execução fornece classes de permissões integradas em vários namespaces e também suporta a criação e a implementação de classes de permissão personalizadas.

Há dois tipos de permissões, e cada tem uma finalidade específica:

As permissões de segurança podem estar na forma de uma classe de permissão (segurança imperativa) ou de um atributo que represente uma classe de permissão (segurança declarativa). A classe base para as permissões de segurança é System.Security.CodeAccessPermission; a classe base para atributos de permissão de segurança é System.Security.Permissions.CodeAccessSecurityAttribute.

Um aplicativo, na forma de um assembly, é concedido com um conjunto de permissões no momento que é carregado em um domínio de aplicativos. As concessões normalmente são feitas usando conjuntos de permissões predefinidas determinados pelo método SecurityManager.GetStandardSandbox . O conjunto de concessão determina as permissões que o código tem disponíveis. O tempo de execução concede permissões com base no local de origem de código (por exemplo, o computador local, a intranet local ou a Internet). O código também pode ser concedido com permissões especiais se for carregado em uma área restrita. Para obter mais informações sobre o código de execução em uma área restrita, consulte Como executar código parcialmente confiável em uma área restrita.

Os principais usos das permissões são os seguintes:

  • O código da biblioteca pode exigir que os chamadores tenham permissões específicas. Se você colocar um Demand para uma permissão em seu código, todos os códigos que usam seu código é esperado ter esta permissão para executar. As demandas podem ser usadas para determinar se os chamadores têm acesso aos recursos específicos ou para descobrir a identidade de um chamador.

  • O código pode usar permissões para negar acesso aos recursos que deseja proteger. Você pode usar SecurityAction.PermitOnly para especificar um conjunto de permissões associado, implicitamente todas negar permissões restantes. No entanto, não recomendamos usar PermitOnly para proibir acesso com o objetivo de proteger contra o uso indevido intencional. Assemblies chamados, que têm as permissões recusadas implicitamente no seu conjunto, pode substituir permissões negadas executando um SecurityAction.Assert para qualquer permissão que deseja usar. Por exemplo, se permitiu somente UIPermission e chamou um assembly que tem inerentemente um FileIOPermission, o assembly pode simplesmente fazer um Assert para FileIOPermission e executar as operações de arquivo. A única maneira de proteger os recursos de código não confiáveis em assemblies referenciados é executar esse código com um conjunto de concessões que não incluam essas permissões.

Consulte também

Conceitos

Permissões de acesso de código

Permissões de segurança baseada em funções

Outros recursos

Conceitos principais de segurança