Compartilhar via


Representação e credenciais para conexões

Na integração do CLR (Common Language Runtime) do SQL Server, o uso da Autenticação do Windows é complexo, mas é mais seguro do que o uso da Autenticação do SQL Server. Quando usar a Autenticação do Windows, lembre-se das considerações a seguir.

Por padrão, um processo do SQL Server que se conecta ao Windows adquire o contexto de segurança da conta de serviço do Windows para SQL Server. Mas é possível mapear uma função CLR para uma identidade de proxy, de modo que suas conexões de saída tenham um contexto de segurança diferente do da conta de serviço do Windows.

Em alguns casos, talvez você queira representar o chamador usando a SqlContext.WindowsIdentity propriedade em vez de executar como a conta de serviço. A instância WindowsIdentity representa a identidade do cliente que invocou o código de chamada e só está disponível quando o cliente usou a Autenticação do Windows. Depois de obter a WindowsIdentity instância, você pode chamar Impersonate para alterar o token de segurança do thread e, em seguida, abrir ADO.NET conexões em nome do cliente.

Depois de chamar SQLContext.WindowsIdentity.Impersonate, você não poderá acessar dados locais e não poderá acessar dados do sistema. Para acessar os dados novamente, você precisa chamar WindowsImpersonationContext.Undo.

O exemplo a seguir mostra como representar o chamador usando a SqlContext.WindowsIdentity propriedade.

Visual C#

WindowsIdentity clientId = null;  
WindowsImpersonationContext impersonatedUser = null;  
  
clientId = SqlContext.WindowsIdentity;  
  
// This outer try block is used to protect from   
// exception filter attacks which would prevent  
// the inner finally block from executing and   
// resetting the impersonation.  
try  
{  
   try  
   {  
      impersonatedUser = clientId.Impersonate();  
      if (impersonatedUser != null)  
         return GetFileDetails(directoryPath);  
         else return null;  
   }  
   finally  
   {  
      if (impersonatedUser != null)  
         impersonatedUser.Undo();  
   }  
}  
catch  
{  
   throw;  
}  

Observação

Para obter informações sobre alterações de comportamento na representação, consulte Alterações significativas nos recursos do mecanismo de banco de dados no SQL Server 2014.

Além disso, se você obteve a instância de identidade do Microsoft Windows, por padrão, não poderá propagar essa instância para outro computador; A infraestrutura de segurança do Windows restringe isso por padrão. No entanto, há um mecanismo chamado "delegação" que permite a propagação de identidades do Windows em vários computadores confiáveis. Você pode saber mais sobre a delegação no artigo do TechNet, "Transição de Protocolo Kerberos e Delegação Restrita".

Consulte Também

Objeto SqlContext