2009-08-04 8 views
405

Ich habe zwei Anwendungen, die integrierte Sicherheit verwenden. Man ordnet Integrated Security = true in der Verbindungszeichenfolge und die anderen setzt Integrated Security = SSPI.Der Unterschied zwischen integrierter Sicherheit = True und Integrated Sicherheit = SSPI

Was ist der Unterschied zwischen SSPI und true im Kontext der integrierten Sicherheit?

+36

Die angenommene Antwort ist nicht die beste, sie ist auch nicht ganz korrekt. 'Integrierte Sicherheit = True' oder' SSPI' sind nicht gleich. 'Integrated Security = true;' funktioniert nicht in allen SQL-Anbietern, es löst eine Ausnahme aus, wenn es mit dem 'OleDb'-Provider verwendet wird. Also im Grunde 'Integrierte Sicherheit = SSPI;' ist bevorzugt, da mit beiden 'SQLClient' &' OleDB' Provider funktioniert.Ich habe eine Antwort zur besseren Erläuterung hinzugefügt. –

+2

@PranavSingh hat die richtige Idee, diese Frage ist unvollständig, wenn Sie nicht angeben, welchen _provider_ Sie verwenden. Verschiedene Anbieter akzeptieren und/oder übersetzen verschiedene Strings in interne Zustände. – Mark

+0

Obwohl sie gleich sind, glaube ich, dass es ein sehr altes Dokument in einer der Websites gab, zu der Zeit war ich neugierig wie Sie, die sagte, wenn Sie für Windows Mobile entwickeln (nicht was Sie heute sehen, die alten Geräte, die Ich erinnere mich nicht an das OS-Suffix, da ich nie einen hatte), sollten Sie SSPI und Benutzerpasswort zusammen verwenden. aber da ich nie einen geschrieben habe und ich mich nicht an die Quelle dieses Dokuments erinnere, kann ich das nicht garantieren. – deadManN

Antwort

354

Nach Microsoft sind sie das gleiche.

Wenn false, sind Benutzer-ID und Passwort in der Verbindung angegeben. Wenn dies der Fall ist, werden die aktuellen Windows-Kontoanmeldeinformationen für die Authentifizierung verwendet.
Gültige Werte sind true, false, yes, no und (dringend empfohlen), die true entspricht.

+17

Ursprünglich, ich denke, es gab einen Unterschied in diesem "True" verwendet NTLM und "SSPI" verwendet Kerberos, aber sie sind jetzt austauschbar. – SqlRyan

+0

Danke für die Antwort. Gibt es einen Grund, warum es mit einem und nicht mit dem anderen funktioniert? In der Tat, wenn Sie sich richtig erinnern, der Fehler, der erhalten wurde, als ich "wahr" verwendete, war über irgendeinen Fahrer (auf einem 2003 Windows-Bediener mit sql-Bediener ausdrückliches). JD. –

+5

Hat letzten Kommentar nicht überprüft, aber wenn das stimmt, sollte als Antwort, aber nicht der Kommentar sein –

11

Lassen Sie uns beginnen mit Integrated Security = false

false Benutzer-ID und Kennwort in der Verbindungszeichenfolge angegeben werden.
true Windows-Kontoanmeldeinformationen werden für die Authentifizierung verwendet.

Erkannte Werte sind true, false, yes, no und SSPI.

Wenn User ID und Password spezifiziert und integrierte Sicherheit wird auf true, dann User ID und Password werden ignoriert und Integrierte Sicherheit wird

57

Verwendung von Windows-Authentifizierung verwendet werden

Um die Verbindung Datenbankserver wird empfohlen, die Windows-Authentifizierung zu verwenden, die allgemein als integrierte Sicherheit bezeichnet wird. Um die Windows-Authentifizierung anzugeben, können Sie eines der folgenden zwei Schlüssel/Wert-Paare mit dem Datenprovider verwenden. NET Framework für SQL Server:

Integrated Security = true; 
Integrated Security = SSPI; 

jedoch nur die zweite Arbeit mit dem Datenanbieter .NET Framework OleDb. Wenn Sie Integrated Security = true für ConnectionString festlegen, wird eine Ausnahme ausgelöst.

Zum Angeben der Windows-Authentifizierung im Datenprovider. NET Framework für ODBC sollten Sie das folgende Schlüssel/Wert-Paar verwenden.

Trusted_Connection = yes; 

Quelle: MSDN: Working with Connection Strings

+0

Danke, bekam einen seltsamen Fehler in einem VBS-Skript mit '= true', änderte es in' = SSPI' reparierte es. –

20

Integrated Security = False: User-ID und Passwort sind in der Verbindung angegeben. Integrierte Sicherheit = true: Die aktuellen Windows-Kontoanmeldeinformationen werden für die Authentifizierung verwendet.

Integrierte Sicherheit = SSPI: Dies ist gleichbedeutend mit wahr.

Wir können den Benutzernamen und das Passwort vermeiden Attribute aus der Verbindungszeichenfolge und verwenden Sie die integrierte Sicherheit

23

Viele Fragen Antworten bekommen, wenn wir .Net Reflector verwenden den eigentlichen Code von SqlConnection :) true und gleich sind zu sehen:

internal class DbConnectionOptions 

... 

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

... 

EDIT 2018.02.20 Jetzt in .Net-Core können wir seine Open-Source auf github sehen! Suche nach ConvertValueToIntegratedSecurityInternal Methode:

https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs

6

Beachten Sie, dass Verbindungszeichenfolgen sind spezifisch für WHAT und wie Sie Daten verbinden. Diese verbinden sich mit derselben Datenbank, aber die erste verwendet .NET Framework Data Provider für SQL Server. Integrierte Sicherheit = True funktioniert nicht für OleDb.

  • Data Source = .; Initial Catalog = aspnetdb; Integrated Security = True
  • Provider = SQLOLEDB; Data Source = .; Integrated Security = SSPI; Initial Catalog = aspnetdb

Im Zweifel Verwenden Sie die Datenverbindungen von Visual Studio Server Explorer.

+0

+1 für informative msdn link. –

80

Integrated Security=true; funktioniert nicht in allen SQL-Provider, es löst eine Ausnahme aus, wenn sie mit dem OleDb Anbieter verwendet.

Also grundsätzlich Integrated Security=SSPI; ist bevorzugt, da mit SQLClient & OleDB Anbieter arbeitet.

Hier ist der volle Satz von Syntaxen nach MSDN - Connection String Syntax (ADO.NET)

Windows Auth Syntax

+1

Danke so viel, Das nervte mich wirklich, als meine .net SQL Verbindungszeichenfolge nicht funktionierte, wenn ich es für ein DTSX Paket verwendete. Ich änderte Wahr zu SSPI und es funktionierte. Ihre Antwort erklärt warum, was die angenommene Antwort nicht tut. – zeocrash

4

Wahr ist nur gültig, wenn Sie die .NET SqlClient-Bibliothek verwenden. Es ist nicht gültig, wenn Sie OLEDB verwenden. Wenn SSPI in beiden verwendet wird, verwenden Sie entweder die .net SqlClient-Bibliothek oder OLEDB.

+0

https://social.msdn.microsoft.com/Forums/en-US/b61c092b-48c8-4bc7-b26b-47b41ea72b69/is-there-a-difference-bt-integrated-security-true-and-integrated-security -sspi? forum = adodotnetdataproviders –

1

In meiner Sicht, nicht

Wenn Sie die integrierte Sicherheit verwenden = SSPI, dann müssen Sie den Benutzernamen und das Kennwort in der Verbindungszeichenfolge codieren, die „relativ unsicher“ warum denn alle Mitarbeiter die haben bedeutet, Zugang auch Ex-Mitarbeiter könnten die Informationen in böser Absicht nutzen.

+1

Die Verbindungszeichenfolge ist für einen Mitarbeiter nicht unbedingt sichtbar. –

Verwandte Themen