Condividi tramite


Procedura: accedere a SQL Server tramite la protezione integrata di Windows

Aggiornamento: novembre 2007

Se l'applicazione viene eseguita in una rete Intranet Windows, è possibile utilizzare l'autenticazione integrata di Windows per l'accesso al database. La sicurezza integrata utilizza l'identità di Windows corrente stabilita sul thread del sistema operativo per accedere al database SQL Server. È quindi possibile eseguire il mapping dell'identità di Windows su un database SQL Server e sulle relative autorizzazioni.

Per connettersi a SQL Server tramite l'autenticazione integrata di Windows, è necessario identificare l'identità di Windows utilizzata dall'applicazione ASP.NET. Assicurarsi inoltre che all'identità sia stato concesso l'accesso al database SQL Server. In questo argomento è incluso un esempio di codice che visualizza l'identità di Windows corrente dell'applicazione ASP.NET.

Connessione a SQL Server

Se SQL Server si trova su un computer diverso rispetto al server Web, l'identità di Windows deve essere in grado di passare dalla rete all'istanza remota di SQL Server (le reti Windows che sono state configurate correttamente con l'autenticazione Kerberos sono in grado di farlo). Tuttavia, a seconda delle impostazioni dell'elemento di configurazione identity, l'identità di Windows stabilita sul thread del sistema operativo per le applicazioni ASP.NET potrebbe non essere in grado di passare correttamente all'istanza remota di SQL Server.

È possibile fornire un nome utente e una password specifici per l'identità del processo di lavoro del sito Web come illustrato in Procedura: accedere a SQL Server in qualità di utente noto del dominio Windows. In alternativa è possibile rappresentare l'identità autenticata fornita da Internet Information Services (IIS). Per rappresentare l'identità di Windows fornita da IIS, impostare l'attributo impersonate dell'elemento di configurazione identity su true come illustrato nell'esempio seguente:

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

In IIS solo l'autenticazione di base consente l'accesso con un token di sicurezza che passa dalla rete a un'istanza remota di SQL Server. Per impostazione predefinita, le altre modalità di sicurezza IIS utilizzate insieme alle impostazioni dell'elemento di configurazione identity non genereranno un token in grado di eseguire l'autenticazione con un'istanza remota di SQL Server.

Se il sito Web è configurato per il supporto solo dell'accesso anonimo in IIS, il token di sicurezza passato da IIS è quello dell'account utente Windows per l'accesso anonimo così come configurato in IIS. L'account utente anonimo può essere utilizzato per l'autenticazione con un'istanza remota di SQL Server. Tuttavia l'account utente anonimo predefinito è un account di un computer locale, quindi non esiste sull'istanza remota di SQL Server. È possibile modificare l'account anonimo IIS in modo che utilizzi un account di dominio oppure eseguire il mirroring dell'account del computer locale sull'istanza remota di SQL Server mediante la creazione di un account locale sull'istanza remota con lo stesso nome utente e la stessa password. Inoltre la proprietà di metabase LogonMethod per IIS6 deve essere impostata su un'opzione che consenta alle credenziali di passare dalla rete. Ad esempio, l'impostazione di metabase MD_LOGON_NETWORK_CLEARTEXT consente alle credenziali di accesso di passare dalla rete.

Se non si è sicuri dell'identità di Windows per l'applicazione e se l'applicazione ha eseguito l'accesso con un token in grado di passare dalla rete, è possibile eseguire la seguente pagina ASP.NET come parte dell'applicazione per visualizzare il nome dell'identità di Windows e un valore che indica se l'identità può passare dalla rete. Si tenga presente che nel seguente esempio non viene considerata l'impostazione o meno della delega Kerberos per il dominio.

<%@ 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>

Nella seguente procedura viene illustrato come accedere a un database SQL Server mediante l'autenticazione integrata di Windows in una rete Intranet, in cui a ciascun utente è stato concesso l'accesso a SQL Server.

Innanzitutto è necessario configurare l'applicazione in IIS in modo da disattivare l'accesso anonimo e attivare l'autenticazione di Windows.

Per configurare IIS in modo da utilizzare l'autenticazione integrata di Windows

  1. In Windows aprire lo strumento di amministrazione Internet Information Services.

    • In Microsoft Windows 2000 Server o Windows Server 2003 scegliere Start , Programmi, Strumenti di amministrazione e quindi Gestione servizio Internet Microsoft.

    • In Microsoft Windows XP Professional aprire Strumenti di amministrazione nel Pannello di controllo.

  2. Aprire il nodo corrispondente al proprio server, quindi aprire i nodi successivi fino al nodo dell'applicazione, in genere in Sito Web predefinito.

  3. Fare clic con il pulsante destro del mouse sull'applicazione e scegliere Proprietà.

  4. Nella scheda Protezione directory fare clic su Modifica.

  5. Nella finestra di dialogo Metodi di autenticazione deselezionare la casella di controllo Accesso anonimo e quindi eseguire una delle operazioni seguenti:

    • Se SQL Server non si trova sullo stesso computer in cui è installato IIS, selezionare la casella di controllo Autenticazione integrata di Windows.

    • Se SQL Server è un server remoto, selezionare la casella di controllo Autenticazione di base e deselezionare la casella di controllo Autenticazione integrata di Windows.

  6. Fare clic in tutte le finestre di dialogo.

Nel file di configurazione dell'applicazione (Web.config) specificare che l'applicazione rappresenterà le credenziali dell'utente fornite da IIS.

Per configurare Web.config in modo da rappresentare l'identità fornita da IIS

  • Aprire il file Web.config dell'applicazione e aggiungere quanto segue all'elemento system.web:

    <identity impersonate="true"/>
    
    Nota:

    Per gli elementi del file Web.config viene fatta distinzione tra maiuscole e minuscole.

Quando si crea una stringa di connessione per accedere a SQL Server, è necessario includere attributi che indichino a SQL Server che si sta utilizzando la sicurezza integrata.

Per configurare le stringhe di connessione in modo da utilizzare la sicurezza integrata di Windows

  • In ogni stringa di connessione a SQL Server includere l'attributo Trusted_Connection=Yes e rimuovere gli attributi per il nome utente e la password.

    Nell'esempio che segue viene mostrata una tipica stringa di connessione configurata per l'utilizzo della sicurezza integrata di Windows:

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

Configurare SQL Server in modo che riconosca gli utenti che vi accederanno.

Per configurare SQL Server in modo da utilizzare la sicurezza integrata di Windows

  1. Dal menu Start di Windows scegliere Microsoft SQL Server e quindi Enterprise Manager.

  2. Aprire il nodo relativo al server ed espandere il nodo del database per cui si desidera concedere autorizzazioni agli utenti.

  3. Fare clic con il pulsante destro del mouse sul nodo Utenti e scegliere Nuovo utente database.

  4. Nella finestra di dialogo Proprietà utente database immettere domain\username nella casella Nome di accesso e quindi fare clic su OK. Configurare inoltre SQL Server in modo da consentire l'accesso al database agli utenti di tutti i domini.

Vedere anche

Concetti

Rappresentazione ASP.NET

Accesso a SQL Server da un'applicazione Web

Altre risorse

Sicurezza dei siti Web ASP.NET