Qual è la differenza tra Sicurezza integrata = True e Sicurezza integrata = SSPI?
-
22-07-2019 - |
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?
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 sonotrue
,false
,yes
,no
esspi
(fortemente consigliato), che equivale atrue
.
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)
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;
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:
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
Nota che le stringhe di connessione sono specifiche per cosa e come ti stai collegando ai dati. Si stanno connettendo allo stesso database ma il primo utilizza .NET Framework Data Provider per SQL Server. Sicurezza integrata = True non funzionerà per OleDb.
- Origine dati = .; Catalogo iniziale = aspnetdb; Sicurezza integrata = True
- Provider = SQLOLEDB; Origine dati = .; Sicurezza integrata = SSPI; Catalogo iniziale = aspnetdb
In caso di dubbi, utilizzare le connessioni dati Explorer di Visual Studio Server.
- Che cos'è sspi ?
- Sintassi delle stringhe di connessione
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.