Wie wird das Benutzerkennwort an den Remoteserver übergeben, wenn der aktuelle Sicherheitskontext des Logins verwendet wird?


7

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.


Verwendet der lokale Server die integrierte Windows-Authentifizierung?
Chris Travers

Hallo Chris, beide Server verwenden die Authentifizierung im gemischten Modus - aber wie in meiner Frage angegeben - bezieht sich dies auf eine Verbindung ohne Windows-Anmeldeinformationen (dh eine SQL-Anmeldeinformation)
Prost

Antworten:


5

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:

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?

Antwort : Wenn über die SQL Server-Authentifizierung eine Verbindung zum lokalen Server hergestellt wird, werden Anmeldename und Kennwort verwendet, um eine Verbindung zum Remoteserver herzustellen. In diesem Fall muss auf dem Remote-Server ein Login mit genau demselben Namen und Passwort vorhanden sein.

Verwenden Sie den aktuellen Sicherheitskontext des Logins :

Geben Sie an, dass eine Verbindung unter Verwendung des aktuellen Sicherheitskontexts der Anmeldung für nicht in der Liste definierte Anmeldungen hergestellt wird. Wenn Sie über die Windows-Authentifizierung eine Verbindung zum lokalen Server herstellen, werden Ihre Windows-Anmeldeinformationen verwendet, um eine Verbindung zum Remoteserver herzustellen. Wenn über die SQL Server-Authentifizierung eine Verbindung zum lokalen Server hergestellt wird, werden der Anmeldename und das Kennwort verwendet, um eine Verbindung zum Remoteserver herzustellen. In diesem Fall muss auf dem Remote-Server ein Login mit genau demselben Namen und Passwort vorhanden sein.

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?

Antwort : Der Anmeldename und das Kennwort werden an den Remote-Server übergeben. Dieser Mechanismus / diese Aufgabe wird von der SQL Engine ausgeführt, die ausgeblendet ist und nicht erfasst werden kann.

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?

Antwort : HASH kann nicht zum Anmelden am SQL Server verwendet werden. SQL Engine ist für die Abwicklung des Anmeldevorgangs verantwortlich, und wir haben nicht viel Dokumentation dazu.


1

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 LOGINAkzeptieren des Hash-Passworts exportieren .


-3

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!


4
Sie müssen beim Einrichten eines Verbindungsservers überhaupt keinen Benutzernamen und kein Kennwort des Remote-Servers angeben? Das ist der springende Punkt des Parameters @useself auf sp_addlinkedsrvlogin - daher meine Frage :)
HeavenCore
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.