Representação e credenciais para conexões
Na integração CLR (Common Language Runtime) do SQL Server, o uso da Autenticação do Windows é complexo, porém é mais seguro do que usar a 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. Todavia, é possível mapear uma função CLR para uma identidade proxy, de modo que suas conexões de saída tenham um contexto de segurança diferente daquele da conta de serviço do Windows.
Em alguns casos, talvez você queira representar o chamador usando a propriedade SqlContext.WindowsIdentity 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ó estará disponível se o cliente usou a Autenticação do Windows. Depois de obter a instância WindowsIdentity, você poderá chamar Impersonate para alterar o token de segurança do thread e, em seguida, abrir as conexões ADO.NET em nome do cliente.
Depois de chamar SQLContext.WindowsIdentity.Impersonate, você não pode acessar os dados locais nem os dados do sistema. Para acessar os dados novamente, é necessário chamar WindowsImpersonationContext.Undo.
O exemplo a seguir mostra como representar o chamador usando a propriedade SqlContext.WindowsIdentity.
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 |
---|
No SQL Server 2008, existem alterações no comportamento de representação. Para obter mais informações, consulte Alterações em recursos do Mecanismo de Banco de Dados que causam interrupção no SQL Server 2008. |
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 infra-estrutura de segurança do Windows impõe essa restrição por padrão. Porém, há um mecanismo chamado "delegação" que permite a propagação de identidades do Windows por vários computadores. Você pode saber mais sobre delegação no artigo da TechNet, "Transição de protocolos e delegação restrita de Kerberos".