Domanda

Ho due app che usano la sicurezza integrata. Uno assegna Integrated Security = true nella stringa di connessione e l'altro imposta Integrated Security = SSPI .

Qual è la differenza tra SSPI e true nel contesto della sicurezza integrata?

È stato utile?

Soluzione

Secondo Microsoft loro sono la stessa cosa.

  

Quando false , ID utente e password sono specificati nella connessione. Se vero, le credenziali dell'account Windows corrente vengono utilizzate per l'autenticazione.
  I valori riconosciuti sono true , false , yes , no e sspi (fortemente consigliato), che equivale a true .

Altri suggerimenti

Integrated Security = true; non funziona in tutti i provider SQL, genera un'eccezione se utilizzato con il provider OleDb .

Quindi sostanzialmente Integrated Security = SSPI; è preferito poiché funziona con entrambi SQLClient & amp; provider OleDB .

Ecco il set completo di sintassi secondo MSDN - Sintassi della stringa di connessione (ADO.NET)

! [Sintassi autenticazione Windows

Uso dell'autenticazione di Windows

Per connettersi al server di database si consiglia di utilizzare l'autenticazione di Windows, comunemente nota come sicurezza integrata. Per specificare l'autenticazione di Windows, è possibile utilizzare una delle due seguenti coppie chiave-valore con il fornitore di dati. NET Framework per SQL Server:

 Integrated Security = true;
 Integrated Security = SSPI;

Tuttavia, solo il secondo funziona con il fornitore di dati .NET Framework OleDb . Se si imposta Integrated Security = true per ConnectionString viene generata un'eccezione.

Per specificare l'autenticazione di Windows nel fornitore di dati. NET Framework per ODBC, è necessario utilizzare la seguente coppia chiave-valore.

Trusted_Connection = yes;

Fonte: MSDN: utilizzo delle stringhe di connessione

Molte domande ottengono risposte se utilizziamo .Net Reflector per vedere il codice effettivo di SqlConnection :) true e sspi sono gli stessi:

internal class DbConnectionOptions

...

internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
    if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
    {
        return true;
    }
}

...

MODIFICA 20.02.2018 Ora in .Net Core possiamo vedere il suo open source su github! Cerca il metodo ConvertValueToIntegratedSecurityInternal:

Sicurezza integrata = Falso: ID utente e password sono specificati nella connessione. Sicurezza integrata = true: le credenziali dell'account Windows corrente vengono utilizzate per l'autenticazione.

Sicurezza integrata = SSPI: questo è equivalente a vero.

Possiamo evitare gli attributi di nome utente e password dalla stringa di connessione e usare la sicurezza integrata

Vorrei iniziare con Integrated Security = false

false ID utente e password sono specificati nella stringa di connessione.
true le credenziali dell'account Windows vengono utilizzate per l'autenticazione.

I valori riconosciuti sono true , false , yes , no e SSPI .

Se sono specificati ID utente e Password e Integrated Security è impostato su true , quindi ID utente e Password verrà ignorato e verrà utilizzata la sicurezza integrata

True è valido solo se si utilizza la libreria .NET SqlClient. Non è valido quando si utilizza OLEDB. Dove SSPI è bvaid in entrambi si sta utilizzando la libreria .net SqlClient o OLEDB.

Dal mio punto di vista,

Se non si utilizza Integrated security = SSPI, è necessario codificare il nome utente e la password nella stringa di connessione, il che significa "relativamente insicuro" perché perché, tutti i dipendenti hanno accesso anche se un ex dipendente può usare le informazioni in modo dannoso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top