Ich habe zwei Apps, die Integrated Security verwenden. Einer weist Integrated Security = true
in der Verbindungszeichenfolge zu, und der andere legt Integrated Security = SSPI
fest.
Was ist der Unterschied zwischen SSPI
und true
im Kontext der integrierten Sicherheit?
Laut Microsoft sind sie dasselbe.
Wenn
false
, werden Benutzer-ID und Kennwort in der Verbindung angegeben. Wenn true, werden die aktuellen Windows-Kontoanmeldeinformationen für die Authentifizierung verwendet.
Erkannte Werte sindtrue
,false
,yes
,no
undsspi
(dringend empfohlen), wastrue
entspricht.
Integrated Security=true;
funktioniert nicht bei allen SQL-Providern, sondern löst bei Verwendung mit dem Provider OleDb
eine Ausnahme aus.
Grundsätzlich wird Integrated Security=SSPI;
bevorzugt, da es mit beiden Anbietern SQLClient
& OleDB
funktioniert.
Hier ist der vollständige Satz von Syntaxen gemäß MSDN - Connection String Syntax (ADO.NET)
Verwenden der Windows-Authentifizierung
Um eine Verbindung zum Datenbankserver herzustellen, wird die Verwendung der Windows-Authentifizierung empfohlen, die allgemein als integrierte Sicherheit bezeichnet wird. Um die Windows-Authentifizierung festzulegen, können Sie mit dem Datenprovider eines der beiden folgenden Schlüssel-Wert-Paare verwenden. NET Framework für SQL Server:
Integrated Security = true;
Integrated Security = SSPI;
Mit dem Datenprovider funktioniert jedoch nur der zweite .NET Framework OleDb . Wenn Sie Integrated Security = true
für ConnectionString festlegen, wird eine Ausnahme ausgelöst.
So legen Sie die Windows-Authentifizierung im Datenprovider fest In NET Framework für ODBC sollten Sie das folgende Schlüssel-Wert-Paar verwenden.
Trusted_Connection = yes;
Viele Fragen werden beantwortet, wenn wir .Net Reflector
verwenden, um den tatsächlichen Code von SqlConnection
zu sehen :) true
und sspi
sind gleich:
internal class DbConnectionOptions
...
internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
{
return true;
}
}
...
EDIT 20.02.2018 Jetzt in .Net Core können wir seine Open Source auf Github sehen! Suchen Sie nach der Methode ConvertValueToIntegratedSecurityInternal:
Integrierte Sicherheit = Falsch: Benutzer-ID und Kennwort werden in der Verbindung angegeben. Integrierte Sicherheit = true: Die aktuellen Windows-Anmeldeinformationen werden für die Authentifizierung verwendet.
Integrierte Sicherheit = SSPI: Dies ist gleichbedeutend mit true.
Wir können die Benutzer- und Kennwortattribute aus der Verbindungszeichenfolge vermeiden und die integrierte Sicherheit verwenden
Lass mich mit Integrated Security = false
beginnen
false
Benutzer-ID und Kennwort werden in der Verbindungszeichenfolge angegeben.true
Windows-Kontoanmeldeinformationen werden für die Authentifizierung verwendet.
Erkannte Werte sind true
, false
, yes
, no
und SSPI
.
Wenn User ID
und Password
angegeben sind und Integrated Security auf true
eingestellt ist, werden User ID
und Password
ignoriert und Integrated Security verwendet
Beachten Sie, dass Verbindungszeichenfolgen spezifisch für sind, mit was und wie Sie eine Verbindung herstellen Daten. Diese stellen eine Verbindung zu derselben Datenbank her, die erste verwendet jedoch den .NET Framework-Datenanbieter für SQL Server. Integrated Security = True funktioniert bei OleDb nicht.
Verwenden Sie im Zweifelsfall die Visual Studio Server Explorer-Datenverbindungen.
True ist nur gültig, wenn Sie die .NET SqlClient-Bibliothek verwenden. Es ist nicht gültig, wenn OLEDB verwendet wird. Wenn SSPI in beiden Fällen bvaid ist, verwenden Sie entweder die .net SqlClient-Bibliothek oder OLEDB.
Aus meiner Sicht,
Wenn Sie Integrated Security = SSPI nicht verwenden, müssen Sie den Benutzernamen und das Kennwort in der Verbindungszeichenfolge fest codieren, was "relativ unsicher" bedeutet, da alle Mitarbeiter Zugriff haben, auch wenn die Informationen von ehemaligen Mitarbeitern böswillig verwendet werden könnten.