Como: Acesso o SQL servidor usando segurança integrada do Windows

Se seu aplicativo for executado em uma intranet com base no Windows, você poderá para usar a autenticação integrada do Windows para acesso a banco de dados.A segurança integrada usa a identidade atual do Windows estabelecida no thread do sistema operacional para acessar o banco de dados do SQL Server.Em seguida, você pode mapear a identidade do Windows para permissões e um banco de dados do SQL Server.

Para se conectar ao Servidor SQL usando a autenticação integrada do Windows, você deve identificar a identidade do Windows sob qual aplicativo ASP.NET está sendo executado.Você também deve assegurar-se que a identidade recebeu acesso ao banco de dados do Servidor SQL.Este tópico inclui um exemplo de código que exibe a identidade do Windows atual do aplicativo ASP.NET.

Conectando-se ao SQL Server

Se o SQL Server estiver em um computador diferente do servidor Web, a identidade Windows deve ser capaz de fluir através da rede para a instância remota do SQL Server.(as redes do Windows que foram configurados adequadamente com autenticação Kerberos serão capazes de fazer isso.) Entretanto, dependendo das configurações no elemento de configuração identity, a identidade Windows estabelecida na thread do sistema operacional para aplicativos ASP.NET talvez não consiga para fluir corretamente para o SQL Server remoto.

Você pode fornecer um determinado nome de usuário e a senha do site para a identidade do processo de trabalhocomo mostrado em Como: Acesso o SQL servidor usando um usuário do domínio Windows mapeada, ou você pode representar a identidade autenticada fornecida pelo Serviços de Informações da Internet (IIS).Para representar a identidade do Windows fornecidoa pelo IIS, defina o atributo impersonate do elemento de configuração identidade como true conforme mostrado no exemplo a seguir:

<system.web>
  <identity impersonate="true" />
</system.web>

No IIS, somente a Autenticação Básica efetua logon de usuários com um símbolo de segurança que flui através da rede para um SQL Server remoto.Por padrão, outros modos de segurança do IIS usado em conjunto com o elemento de configuração idenitity não resultarão em um símbolo que pode autenticar em um servidor SQL remoto.

Se o site estiver configurado para oferecer suporte apenas a acesso anônimo no IIS, o símbolo de segurança passado pelo IIS será aquele da conta de usuário do Windows para acesso anônimo como configurado no IIS.A conta de usuário anônima pode ser usada para autenticar em um SQL Server remoto.No entanto, a conta de usuário anônima padrão é uma conta de máquina local e assim não irá existir como uma conta no SQL Server remoto.Você pode alterar a conta anônima do IIS para usar uma conta de domínio, ou você pode espelhar a conta de máquina local no SQL Server remoto, criando uma conta local no SQL Server remoto com o mesmo nome de usuário e senha.Além disso, a propriedade da metabase LogonMethod para IIS6 deve ser definida como uma opção que permite que credenciais fluam através da rede.Por exemplo, a configuração de metabase MD_LOGON_NETWORK_CLEARTEXT permite que credenciais de logon fluam através da rede.

Se você não tiver certeza da identidade do Windows para o aplicativo e se o logon dessa identidade é efetuado com um símbolo que pode fluir através da rede, você pode executar a seguinte página ASP.NET como parte do seu aplicativo para exibir o nome da identidade do Windows e um valor indicando se a identidade pode fluir através da rede.Observe que o exemplo a seguir não leva em consideração se a delegação Kerberos foi ou não configurada com êxito para o domínio.

<%@ Page Language="VB" %>
<%@ Import namespace="System.Security.Principal" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>ASP.NET Example</title>
<script >

Public Function WillFlowAcrossNetwork(w As WindowsIdentity) As Boolean
  For Each s As SecurityIdentifier In w.Groups
    If s.IsWellKnown(WellKnownSidType.InteractiveSid) Then Return True
    If s.IsWellKnown(WellKnownSidType.BatchSid)       Then Return True
    If s.IsWellKnown(WellKnownSidType.ServiceSid)     Then Return True
  Next

  Return False
End Function

</script>
</head>
<body>
<%
  Dim current As WindowsIdentity =  WindowsIdentity.GetCurrent()
  Response.Write(current.Name & ", " & WillFlowAcrossNetwork(current) & "<br />")
%>
</body>
</html>
<%@ Page Language="C#" %>
<%@ Import namespace="System.Security.Principal" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>ASP.NET Example</title>
<script >

public bool WillFlowAcrossNetwork(WindowsIdentity w)
{
  foreach (SecurityIdentifier s in w.Groups)
  {
    if (s.IsWellKnown(WellKnownSidType.InteractiveSid)) { return true; }
    if (s.IsWellKnown(WellKnownSidType.BatchSid))       { return true; }
    if (s.IsWellKnown(WellKnownSidType.ServiceSid))     { return true; }
  }

  return false;
}

</script>
</head>
<body>
<%
  WindowsIdentity current =  WindowsIdentity.GetCurrent();
  Response.Write(current.Name + ", " + WillFlowAcrossNetwork(current) + "<br />");
%>
</body>
</html>

O procedimento a seguir mostra como acessar um banco de dados do SQL Server usando a autenticação integrada do Windows em um cenário de intranet, onde cada usuário recebeu acesso para o SQL Server individualmente.

Para começar, você deve configurar seu aplicativo no IIS para desativar o acesso anônimo e ativar a autenticação do Windows.

Para configurar o IIS para autenticação integrada do Windows

  1. No Windows, abra a ferramenta de administração Internet Information Services.

    • Nos sistemas operacionais Microsoft Windows 2000 servidor ou Windows servidor 2003: No Windows Iniciar , aponte para Programas, then Ferramentas administrativas, and then Gerenciador de serviços de Internet.

    • No sistema operacional Microsoft Windows XP Professional: Abra o Ferramentas administrativas no painel de controle.

  2. Abra o nó para o seu servidor, e abra nós até encontrar o nó para o aplicativo, normalmente dentro do Site Padrão da Web.

  3. Clique com o botão direito do mouse em seu aplicativo e clique em Propriedades.

  4. Na guia Segurança de Diretórios, clique em Editar.

  5. Na caixa de diálogo Métodos de Autenticação , desmarque a caixa de seleção Acesso Anônimo ,e em seguida, siga um destes procedimentos:

    • Se o Servidor SQL estiver no mesmo computador que o IIS, certifique-se de que a caixa de seleção Autenticação Integrada do Windows está marcada.

    • Se o Servidor SQL for um servidor remoto, selecione a caixa de seleção Autenticação Básica e desmarque a caixa de seleção Autenticação integrada do Windows .

  6. Marque todas as caixas de diálogo.

No arquivo de configuração de aplicativo (Web.config), especifique que o aplicativo irá representar as credenciais do usuário fornecidas pelo IIS.

Para configurar o Web.config para representar a identidade fornecida pelo IIS

  • Abra o arquivo Web.config do seu aplicativo e adicione o seguinte ao elemento system.web:

    <identity impersonate="true"/>
    
    Observação:

    Elementos do Web.config diferenciam maiúsculas de minúsculas.

Quando você criar uma sequência de conexão para acessar o SQL Server, você deve incluir atributos que informam SQL Server que você está usando segurança integrada.

Para configurar sequências de conexão para segurança integrada do Windows

  • Em qualquer string de conexão para o Servidor SQL, inclua o atributo Trusted_Connection=Yes e remova os atributos de nome e senha.

    A seguir, uma sequência de conexão típica configurada para a segurança integrada do Windows:

    "workstation id=WebServer1;packet size=4096;
    Trusted_Connection=Yes;data source=SQLServer01";
    persist security info=False;initial catalog=northwind"
    

Configure o SQL Server para reconhecer os usuários que o estarão acessando.

Para configurar o SQL Server para segurança integrada do Windows

  1. No menu Iniciar do Windows, escolha Servidor Microsoft SQL, e escolha Gerenciamento de Corporação.

  2. Abra o nó para o servidor e expanda o nó para o banco de dados para o qual você deseja dar permissões aos usuários.

  3. Clique com o botão direito do mouse no nó Usuários e escolha Novo Banco de Dados de Usuário.

  4. Na caixa de diálogo Propriedades de Banco de Dados de Usuário, digite domínio\nome de usuário na caixa Nome de Login, e clique em OK.Além disso, configure o SQL Server para permitir que todos os usuários de domínio acessem o banco de dados.

Consulte também

Conceitos

ASP.NET Impersonation

Acessando o SQL Server a Partir de um Aplicativo da Web

Outros recursos

Protegendo sites da Web ASP.NET