Angenommen, Sie haben einen SQL Server mit einem "Verbindungsserver" zu einem anderen Server - "Verbindungsserver" verwendet "Authentifizierung unter Verwendung des aktuellen Sicherheitskontexts des Logins" als Authentifizierungsmodell.
Wie stellt der SQL Server dem anderen Server das richtige Kennwort (bei Nicht-Windows-Anmeldeinformationen) zur Verfügung, wenn der Server nur über einen Hash verfügt?
Ich habe zuvor Anmeldungen von Server zu Server übertragen und weiß, dass nur der Hash in SQL gespeichert ist. Dies wird häufig als Hex-Wert hex angezeigt, wenn Anmeldungen mit Kennwörtern erstellt werden, zum Beispiel:
create login test with password = '0x22A9AE652CFC38938D56A9C3872B266B192D16E4' hashed
Wenn in SQL nur ein Hash verfügbar ist - kann es sich mit dem Hash beim Remote-Server anmelden? Oder wird das ursprüngliche (nicht gehashte) Kennwort für die gesamte Dauer seiner Verbindung in der Sitzung / im Speicher des Benutzers gespeichert, das SQL dann abrufen und zur Anmeldung an den Remote-Server weiterleiten kann?
Wenn sich der Server mit einem Hash anstelle des Kennworts anmelden kann - kann dies bei normalen Anmeldungen erfolgen oder handelt es sich lediglich um eine interne Funktion von Verbindungsservern?
Rein eine Neugierfrage - möchte verstehen, wie diese Dinge funktionieren.
quelle
Antworten:
Während der Kontaktaufnahme mit Microsoft zu einem anderen Problem (bezahlte Supportanfrage) habe ich sie zufällig danach gefragt und sie haben bestätigt, dass das nicht gehashte Kennwort an den Remote-Server übergeben wurde, aber der Mechanismus, in dem die SQL Engine dies tut, ist "versteckt und kann nicht erfasst werden". - aber es reicht zu sagen, dass die Anmeldung nicht mit dem Hash erfolgt.
Hier ist die vollständige Antwort:
quelle
Ich glaube, dass das Protokoll den Austausch von Benutzername und Hash-Passwort erlaubt. Dies wird wahrscheinlich verwendet, wenn eine Verbindung zu einem Verbindungsserver hergestellt wird, kann jedoch nicht verwendet werden, wenn eine Verbindung von einer dritten Anwendung hergestellt wird.
Natürlich speichert das Datenbankmodul nur den Benutzernamen und das Hash-Passwort intern. Dies wird auch in http://msdn.microsoft.com/en-us/library/bb669066.aspx bestätigt . Ich glaube nicht, dass das eindeutige Passwort irgendwo "in der Sitzung des Benutzers" gespeichert ist.
Das Hash-Passwort wird auch verwendet, wenn alle Benutzerdetails in der SQL-Sprache ausgegeben werden. Dies ist nützlich, um Benutzer auf eine andere Instanz zu klonen. Daher musste die Engine auch das
CREATE LOGIN
Akzeptieren des Hash-Passworts exportieren .quelle
Sie müssen den Benutzernamen (nicht gehasht) des Remote-Servers angeben, wenn Sie den Verbindungsserver einrichten.
Wenn Sie einen Nicht-Windows-Benutzernamen angeben, sollte das Kennwort auf beiden Servern gleich sein, damit es funktioniert!
quelle