Usando o método Assert
Recolher sumário
Expandir sumário
Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês
O documento está arquivado e as informações podem estar desatualizadas

Usando o método Assert

Assert is a método that can be chamado on Código permissão de acesso classes and on the PermissionSet classe.Você pode usar Assert para habilitar a Código (e downstream chamadores) para executar ações que seu Código tem permissão Fazer mas seus chamadores não podem ter permissão fazer.Uma asserção de segurança altera o processo normal de tempo de execução executadas durante uma segurança Marcar.When You afirmar a permissão, it tells not to the sistema Security verificar the callers of Your Código for the permissão asserted.

Observação de cautelaCuidado:

Use declarações cuidadosamente porque eles podem abrir buracos de segurança e prejudicar Mecanismo do tempo de execução para impor restrições de segurança.

Assertions are useful in situations in which a biblioteca Calls em código não gerenciado or makes a chamar that requires a permissão that is not obviously relacionado to Use intended the biblioteca 's.FOR , All that Calls into must have SecurityPermissionwith theUnmanagedCode Sinalizar specified.Código that does not originate from the local computador, such as Código that is Downloaded from the local intranet, will not be Granted this permissão Por padrão.Portanto, em ordem para código baixado da intranet local para poder chamar uma biblioteca que usa o código não gerenciado, ele deve ter a permissão declarada pela biblioteca.Além disso, algumas bibliotecas podem fazer chamadas que são desconhecidos para os chamadores e exigem Especial permissões.

Você também pode usar declarações em situações em que seu código acessa um recurso em uma forma que é completamente ocultos de chamadores.Por exemplo, suponha que sua biblioteca adquire informações a partir de um banco de dados, mas no processo também lê informações do Registro do computador.Como os desenvolvedores usando a biblioteca não precisa acessar sua origem, elas não possuem nenhuma maneira de saber que seus Código requer RegistryPermission na ordem para usar o Código.In this maiúsculas e minúsculas, If You decide that it is not necessary to Require or reasonable that callers of Your Código have permissão to the Registro, acessar you can permissão afirmar for Reading the Registro.Nessa situação, é apropriado para a biblioteca declarar a permissão para que os chamadores sem RegistryPermission podem usar a biblioteca.

A declaração afeta o stack walk somente se a permissão asserted e uma permissão exigida por um chamador downstream estiverem do mesmo tipo e se a permissão exigido for um subconjunto da permissão asserted.For exemplo, If You afirmar FileIOPermission to ler Todos os Arquivos on the unidade C, and a Demand downstream is made for FileIOPermission to ler Files in C:\Temp, the asserção Could affect the movimentação de pilha; No entanto, se a solicitação foi para FileIOPermission para gravar na unidade C, a declaração terá efeito.

To assertions executar, Your Código must be Granted both the permissão you are asserting and the SecurityPermission that represents the direito to make assertions.Although you Could afirmar a permissão that Your Código has not been Granted, the asserção would be pointless because the verificação de segurança would fail before the asserção Could causar it to Succeed.

A ilustração a seguir mostra o que acontece quando você usar Assert.Assume that the seguinte Statements are Verdadeiro about assemblies A, B, C, E, and F, and Two Permissions, P1 and P1A:

  • P1A representa o direito de ler arquivos .txt na unidade C.

  • P1 represents the direito to ler Todos os Arquivos on the unidade C.

  • P1A e p1 são Ambos tipos FileIOPermission e P1A é um subconjunto de P1.

  • Conjuntos de Módulos (Assemblies) E e F foram concedidos permissão P1A.

  • Assembly C has been permissão Concedido P1.

  • Assemblies A and B have been Concedido neither P1 NOR P1A Permissions.

  • Método A está contido no conjunto de módulos (assembly) A, método B é contido no conjunto de módulos (assembly) B e assim por diante.

Utilizando Assert

Neste cenário, chamadas de método B, chamadas B C, C chama E e E chama f.Método C declara permissão para ler arquivos na unidade C (permissão P1), e método E exige permissão para ler arquivos .txt na unidade C (permissão P1A).Quando a demanda em F é encontrado em tempo de execução, um movimentação de pilha é executada para verificar as permissões de Tudo cTudoers de F, começando com e.E foi permissão Concedido P1A, portanto, o movimentação de pilha continua para examinar as permissões de C, onde asserção do C é descoberta.Because the permissão demanded (P1A) is a subconjunto of the permissão asserted (P1), the movimentação de pilha Stops and the Segurança verificar automaticamente succeeds.It does not Matter that Not Have Been assemblies A and B Concedido P1A permissão.Por declarando P1, método C garante que seus chamadores podem acessar o recurso protegido pelo P1, mesmo se os chamadores tem não sido concedidos permissão para acessar esse recurso.

If you design a biblioteca de classes and a classe accesses a Protected recurso, you should, in cases Most, Make a Security Demand requiring that the callers of the classe have the apropriado permissão.Se a classe, em seguida, executa uma operação para o qual você sabe a maioria dos seus chamadores não terão permissão e se você estiver disposto a tomar a responsabilidade para permitir que esses chamadores chamar seu código, você pode declarar a permissão por chamar o método Assert em um objeto de permissão que representa a operação de código está executando.Usar Assert dessa forma permite chamadores que normalmente poderiam não fazer isso chamam seu código.Portanto, se você declarar uma permissão, você deve certificar executar verificações de segurança apropriadas antecipadamente para impedir que o componente que está sendo usados incorretamente.

For exemplo, suppose Your Highly de confiança classe biblioteca has a método that deletes Arquivos.Ele acessa o arquivo Chamando uma função do Win32 não gerenciada.Um chamador chama o Código's método Excluir, passando in the name of o arquivo a ser excluído, C:\Test.txt.Dentro de método excluir, seu codificar cria um FileIOPermission representando objeto Gravar acessar para C:\Test.txt.(Gravar acessar é exigido para excluir um arquivo.) Your Código invokes then an verificação de segurança obrigatória by chamado Demand método 's objeto the FileIOPermission.If one of the callers in the Pilha de Chamadas Not Have this permissão, a SecurityException is thrown.Se nenhuma exceção é acionada, você saberá que Tudo cTudoers ter o direito para acessar C:\Test.txt.Porque você acha que a maioria das suas chamadores não terão permissão para acessar código não gerenciado, seu codificar, em seguida, cria um objeto https://msdn.microsoft.com/pt-br/library/system.security.permissions.securitypermission(v=vs.80) SecurityPermission que representa o direito para chamar código não gerenciado e chamadas método Assert do objeto.Finally, it calls the não gerenciado Win32 função to delete controle C:\Texto.txt and returns to the chamador.

Observação de cautelaCuidado:

Você deve ter certeza que seu código não usa declarações em situações onde seu código pode ser usado por outro código para acessar um recurso que é protegido por você é declarar a permissão.De exemplo, em Código que grava para um arquivo cujo nome é especificado pelo chamador como um parâmetro, você não faria afirmar a FileIOPermission para escrever para arquivos, pois seu Código seria aberto para uso indevido por um terceiros.

Quando você usa o imperativo Segurança sintaxe, chamado de método Assert em múltiplo permissões no mesmo método faz com que um Segurança exceção para ser acionada.Em vez disso, você deve criar um objeto PermissionSet, passá-lo as permissões individuais que você deseja chamar e chamamos o método Assert no objeto PermissionSet.You can chamar the método Assert Mais than once When You Use the sintaxe segurança declarativa.

O exemplo a seguir mostra sintaxe declarativa para substituir as verificações de segurança usando o método Assert.Observe que o FileIOPermissionAttribute sintaxe leva dois valores: Uma enumeração SecurityAction https://msdn.microsoft.com/pt-br/library/system.security.permissions.securityaction(v=vs.80) e a localização do arquivo ou diretório ao qual a permissão é para ser concedido.The chamar to Assert causes Demands for acessar to C:\Log.txt to Succeed, Even though callers Are Not Marcado For permissão to the arquivo acessar.

[Visual Basic]

Option Explicit
Option Strict

Imports System
Imports System.IO
Imports System.Security.Permissions

Namespace LogUtil
   Public Class Log
      Public Sub New()

      End Sub

     <FileIOPermission(SecurityAction.Assert, All := "C:\Log.txt")> Public Sub 
      MakeLog()
         Dim TextStream As New StreamWriter("C:\Log.txt")
         TextStream.WriteLine("This  Log was created on {0}", DateTime.Now) '
         TextStream.Close()
      End Sub
   End Class
End Namespace

namespace LogUtil
{
   using System;
   using System.IO;
   using System.Security.Permissions;

   public class Log
   {
      public Log()
      {    
      }   
      [FileIOPermission(SecurityAction.Assert, All = @"C:\Log.txt")]
      public void MakeLog()
      {   
         StreamWriter TextStream = new StreamWriter(@"C:\Log.txt");
         TextStream.WriteLine("This  Log was created on {0}", DateTime.Now);
         TextStream.Close();
      }
   }
} 

Os fragmentos de código a seguir mostram imperativa sintaxe para substituir as verificações de segurança usando o método Assert.Neste exemplo, uma instância do objeto FileIOPermission está declarada.Its construtor is Passed FileIOPermissionAccess.AllAccess to the tipo of acessar Allowed, define followed by a Cadeia de Caracteres describing localidade 's the arquivo.Once the objeto FileIOPermission is defined, You need only to chamar its método Assert to substituir the Segurança verificar.

[Visual Basic]

Option Explicit
Option Strict
Imports System
Imports System.IO
Imports System.Security.Permissions
Namespace LogUtil
   Public Class Log
      Public Sub New()
      End Sub 'New
      
      Public Sub MakeLog()
         Dim FilePermission As New FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\Log.txt")
         FilePermission.Assert()
         Dim TextStream As New StreamWriter("C:\Log.txt")
         TextStream.WriteLine("This  Log was created on {0}", DateTime.Now)
         TextStream.Close()
      End Sub
   End Class
End Namespace 

namespace LogUtil
{
   using System;
   using System.IO;
   using System.Security.Permissions;

   public class Log
   {
      public Log()
      {    
      }   
      public void MakeLog()
      {
         FileIOPermission FilePermission = new FileIOPermission(FileIOPermissionAccess.AllAccess,@"C:\Log.txt"); 
         FilePermission.Assert();
         StreamWriter TextStream = new StreamWriter(@"C:\Log.txt");
         TextStream.WriteLine("This  Log was created on {0}", DateTime.Now);
         TextStream.Close();
      }
   }
}
Mostrar:
© 2016 Microsoft