Ho due app che utilizzano 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?
Ho due app che utilizzano 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?
Risposte:
Secondo Microsoft 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.
Valori riconosciuti sonotrue
,false
,yes
,no
, esspi
(fortemente raccomandato), che è equivalente atrue
.
Integrated Security=true;
non funziona in tutti i provider SQL, genera un'eccezione se utilizzato con il OleDb
provider.
Quindi, in pratica, Integrated Security=SSPI;
è preferito poiché funziona con entrambi SQLClient
e OleDB
provider.
Ecco il set completo di sintassi secondo MSDN - Sintassi della stringa di connessione (ADO.NET)
Utilizzo 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 provider 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 usiamo .Net Reflector
per vedere il codice effettivo di SqlConnection
:)
true
e sspi
sono le stesse:
internal class DbConnectionOptions
...
internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
{
return true;
}
}
...
EDIT 20.02.2018 Ora in .Net Core possiamo vedere il suo open source su github! Cerca il metodo ConvertValueToIntegratedSecurityInternal:
ConvertValueToIntegratedSecurityInternal
. Che la proprietà viene utilizzata solo quando provider è SqlClient
così in SqlClient
, SSPI
e true
sono gli stessi, ma non quando il cliente è OleDb
o OracleClient
. Ho chiarito che in stackoverflow.com/a/23637478/704008 con riferimento
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 utilizzare la sicurezza integrata
Vorrei iniziare 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 User ID
e Password
sono specificati e Integrated Security è impostato su true
, allora User ID
e Password
verrà ignorato e verrà utilizzato Integrated Security
Si noti che le stringhe di connessione sono specifiche di cosa e come ci si connette 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.
In caso di dubbi, utilizzare le connessioni dati Explorer di Visual Studio Server.
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é, poiché tutti gli impiegati hanno accesso, anche gli ex dipendenti potrebbero utilizzare le informazioni in modo dannoso.
Integrated Security = True
oSSPI
non sono uguali.Integrated Security=true;
non funziona in tutti i provider SQL, genera un'eccezione se utilizzato con ilOleDb
provider. Quindi, in pratica,Integrated Security=SSPI;
è preferito poiché funziona con entrambiSQLClient
eOleDB
provider. Ho aggiunto una risposta per un migliore chiarimento.