Programmgesteuertes Ändern von SQL Server Native Client Kennwörtern

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Wichtig

Der SQL Server Native Client (häufig abgekürzt mit SNAC) wurde aus SQL Server 2022 (16.x) und SQL Server Management Studio 19 (SSMS) entfernt. Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der Microsoft OLE DB-Legacyanbieter für SQL Server (SQLOLEDB) werden für neue Anwendungsentwicklungen nicht empfohlen. Verwenden Sie in Zukunft den neuen Microsoft OLE DB-Treiber für SQL Server (MSOLEDBSQL) oder den neuesten Microsoft ODBC Driver for SQL Server. Informationen zu SQLNCLI, das als Komponente von SQL Server Datenbank-Engine (Versionen 2012 bis 2019) ausgeliefert wird, finden Sie in dieser Supportlebenszyklus-Ausnahme.

Vor SQL Server 2005 (9.x) konnte nur ein Administrator ein abgelaufenes Kennwort eines Benutzers zurücksetzen. Ab SQL Server 2005 (9.x) unterstützt SQL Server Native Client die programmgesteuerte Verarbeitung des Kennwortablaufs sowohl über den SQL Server Native Client OLE DB-Anbieter als auch über den SQL Server Native Client ODBC-Treiber sowie durch Änderungen an die Dialogfelder SQL Server Anmeldung.

Hinweis

Fordern Sie, wenn möglich, Benutzer dazu auf, ihre Anmeldeinformationen zur Laufzeit einzugeben, um zu vermeiden, diese Informationen in einem persistenten Format speichern zu müssen. Wenn Sie die Anmeldeinformationen persistent speichern müssen, verschlüsseln Sie sie mit der Win32 Crypto-API. Weitere Informationen zur Verwendung von Kennwörtern finden Sie unter Sichere Kennwörter.

Fehlercodes bei der SQL Server-Anmeldung

Wenn eine Verbindung aufgrund von Authentifizierungsproblemen nicht hergestellt werden kann, wird für die Anwendung einer der folgenden SQL Server-Fehlercodes bereitgestellt, um Diagnose und Wiederherstellung zu erleichtern.

SQL Server-Fehlercode Fehlermeldung
15113 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Fehler bei der Kennwortüberprüfung. Das Konto ist gesperrt.
18463 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Fehler bei der Kennwortänderung. Das Kennwort kann zurzeit nicht verwendet werden.
18464 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Fehler bei der Kennwortänderung. Das Kennwort ist zu kurz und erfüllt daher nicht die Anforderungen der Richtlinie.
18465 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Fehler bei der Kennwortänderung. Das Kennwort ist zu lang und erfüllt daher nicht die Anforderungen der Richtlinie.
18466 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Fehler bei der Kennwortänderung. Das Kennwort ist nicht komplex genug und erfüllt daher nicht die Anforderungen der Windows-Richtlinie.
18467 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Fehler bei der Kennwortänderung. Das Kennwort erfüllt nicht die Anforderungen der Kennwortfilter-DLL.
18468 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Fehler bei der Kennwortänderung. Unerwarteter Fehler während der Kennwortüberprüfung.
18487 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Das Kennwort des Kontos ist abgelaufen.
18488 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Das Kennwort des Kontos muss geändert werden.

SQL Server Native Client OLE DB-Anbieter

Der SQL Server Native Client OLE DB-Anbieter unterstützt das Ablaufen von Kennwörtern über eine Benutzeroberfläche und programmgesteuert.

OLE DB-Benutzeroberfläche für abgelaufene Kennwörter

Der SQL Server Native Client OLE DB-Anbieter unterstützt das Ablaufen von Kennwörtern durch Änderungen an den Dialogfeldern SQL Server Anmeldung. Wenn der Wert DBPROP_INIT_PROMPT auf DBPROMPT_NOPROMPT festgelegt wird, schlägt der erste Verbindungsversuch fehl, wenn das Kennwort abgelaufen ist.

Wenn für DBPROP_INIT_PROMPT ein beliebiger anderer Wert festgelegt wurde, wird dem Benutzer ein Dialogfeld zur SQL Server-Anmeldung angezeigt, unabhängig davon, ob das Kennwort abgelaufen ist oder nicht. Der Benutzer kann dann auf die Schaltfläche Optionen klicken und Kennwort ändern aktivieren, um das Kennwort zu ändern.

Wenn der Benutzer auf OK klickt, und das Kennwort abgelaufen war, fordert SQL Server ihn dazu auf, im Dialogfeld SQL Server-Kennwort ändern ein neues Kennwort einzugeben und zu bestätigen.

OLE DB-Eingabeaufforderungsverhalten und gesperrte Konten

Verbindungsversuche schlagen möglicherweise fehl, weil das Konto gesperrt wurde. Falls dies nach der Anzeige des Dialogfelds SQL Server-Anmeldung geschieht, wird dem Benutzer die entsprechende Fehlermeldung des Servers ausgegeben, und die Verbindung wird abgebrochen. Dies geschieht unter Umständen auch nach der Anzeige des Dialogfelds SQL Server-Kennwort ändern, falls der Benutzer einen falschen Wert für das alte Kennwort eingibt. In diesem Fall wird dieselbe Fehlermeldung angezeigt, und der Verbindungsversuch wird abgebrochen.

OLE DB-Verbindungspooling, Ablauf von Kennwörtern und gesperrte Konten

Ein Konto kann gesperrt werden oder das dazugehörige Kennwort ablaufen, solange die Verbindung noch in einem Verbindungspool aktiv ist. Der Server überprüft bei zwei Gelegenheiten auf abgelaufene Kennwörter und gesperrte Konten. Zunächst findet eine Überprüfung statt, wenn eine Verbindung hergestellt wird. Die zweite Überprüfung wird nach dem Zurücksetzen einer Verbindung ausgeführt, wenn die Verbindung aus dem Verbindungspool entfernt wird.

Falls der Zurücksetzungsversuch fehlschlägt, wird die Verbindung aus dem Pool entfernt, und ein Fehler wird zurückgegeben.

Programmgesteuerter Ablauf von Kennwörtern in OLE DB

Der SQL Server Native Client OLE DB-Anbieter unterstützt das Ablaufen von Kennwörtern durch das Hinzufügen der eigenschaft SSPROP_AUTH_OLD_PASSWORD (type VT_BSTR), die dem DBPROPSET_SQLSERVERDBINIT-Eigenschaftssatz hinzugefügt wurde.

Die vorhandene Password-Eigenschaft verweist auf DBPROP_AUTH_PASSWORD und wird verwendet, um das neue Kennwort zu speichern.

Hinweis

In der Verbindungszeichenfolge legt die "Old Password"-Eigenschaft SSPROP_AUTH_OLD_PASSWORD fest. Dies entspricht dem aktuellen (möglicherweise abgelaufenen) Kennwort, das nicht über eine Anbieterzeichenfolgen-Eigenschaft verfügbar ist.

Der Anbieter speichert den Wert dieser Eigenschaft nicht persistent. Wenn diese Eigenschaft festgelegt ist, verwendet der Anbieter nicht den Verbindungspool für die erste Verbindung, da eine neue Verbindung hergestellt wird. Wenn die Kennwortänderung ordnungsgemäß vorgenommen werden konnte, kann die aktuelle Verbindung nicht wiederverwendet werden, da sie weiterhin das alte Kennwort verwendet, das nach der Kennwortänderung ungültig wird. Wenn die Anmeldung erfolgreich ist, löscht der Anbieter zudem diese Eigenschaft. Bei späteren Versuchen, das alte Kennwort abzurufen, wird VT_EMPTY zurückgegeben.

Hinweis

SSPROP_AUTH_OLD_PASSWORD sollte nie persistent gespeichert werden, da es nur verwendet wird, wenn ein Kennwort abgelaufen ist.

Beachten Sie, dass der Anbieter jedes Mal, wenn die Old Password-Eigenschaft festgelegt ist, davon ausgeht, dass versucht wird, das Kennwort zu ändern, es sei denn, es ist auch die Windows-Authentifizierung angegeben, die immer Vorrang hat.

Wird die Windows-Authentifizierung verwendet, führt die Angabe des alten Kennworts entweder zu DB_E_ERRORSOCCURRED oder zu DB_S_ERRORSOCCURRED, abhängig davon, ob das alte Kennwort als REQUIRED (im ersten Fall) oder als OPTIONAL (im zweiten Fall) angegeben war. Der Statuswert von DBPROPSTATUS_CONFLICTINGBADVALUE wird in dwStatus zurückgegeben. Dies wird erkannt, wenn IDBInitialize::Initialize aufgerufen wird.

Wenn ein Versuch, das Kennwort zu ändern, unerwartet fehlschlägt, gibt der Server den Fehlercode 18468 zurück. Für den Verbindungsversuch wird ein Standard-OLEDB-Fehler zurückgegeben.

Weitere Informationen zum DBPROPSET_SQLSERVERDBINIT-Eigenschaftensatz finden Sie unter Initialisierungs- und Autorisierungseigenschaften.

ODBC-Treiber für SQL Server Native Client

Der SQL Server Native Client OLE DB-Anbieter unterstützt das Ablaufen von Kennwörtern über eine Benutzeroberfläche und programmgesteuert.

ODBC-Benutzeroberfläche für abgelaufene Kennwörter

Der SQL Server Native Client ODBC-Treiber unterstützt das Ablaufen von Kennwörtern durch Änderungen an den Dialogfeldern SQL Server Anmeldung.

Wenn SQLDriverConnect aufgerufen wird und der Wert von DriverCompletion auf SQL_DRIVER_NOPROMPT festgelegt ist, schlägt der erste Verbindungsversuch fehl, wenn das Kennwort abgelaufen ist. Der SQLSTATE-Wert 28000 und der systemeigene Fehlercodewert 18487 werden durch nachfolgende Aufrufe von SQLError oder SQLGetDiagRec zurückgegeben.

Wenn DriverCompletion auf einen anderen Wert festgelegt wurde, wird dem Benutzer das Dialogfeld SQL Server Anmeldung angezeigt, unabhängig davon, ob das Kennwort abgelaufen ist oder nicht. Der Benutzer kann dann auf die Schaltfläche Optionen klicken und Kennwort ändern aktivieren, um das Kennwort zu ändern.

Wenn der Benutzer auf OK klickt und das Kennwort abgelaufen ist, werden SQL Server aufgefordert, im Dialogfeld SQL Server Kennwort ändern ein neues Kennwort einzugeben und zu bestätigen.

ODBC-Eingabeaufforderungsverhalten und gesperrte Konten

Verbindungsversuche schlagen möglicherweise fehl, weil das Konto gesperrt wurde. Falls dies nach der Anzeige des Dialogfelds SQL Server-Anmeldung geschieht, wird dem Benutzer die entsprechende Fehlermeldung des Servers ausgegeben, und die Verbindung wird abgebrochen. Dies geschieht unter Umständen auch nach der Anzeige des Dialogfelds SQL Server-Kennwort ändern, falls der Benutzer einen falschen Wert für das alte Kennwort eingibt. In diesem Fall wird dieselbe Fehlermeldung angezeigt, und der Verbindungsversuch wird abgebrochen.

ODBC-Verbindungspooling, Ablauf von Kennwörtern und gesperrte Konten

Ein Konto kann gesperrt werden oder das dazugehörige Kennwort ablaufen, solange die Verbindung noch in einem Verbindungspool aktiv ist. Der Server überprüft bei zwei Gelegenheiten auf abgelaufene Kennwörter und gesperrte Konten. Zunächst findet eine Überprüfung statt, wenn eine Verbindung hergestellt wird. Die zweite Überprüfung wird nach dem Zurücksetzen einer Verbindung ausgeführt, wenn die Verbindung aus dem Verbindungspool entfernt wird.

Falls der Zurücksetzungsversuch fehlschlägt, wird die Verbindung aus dem Pool entfernt, und ein Fehler wird zurückgegeben.

Programmgesteuerter Ablauf von Kennwörtern in ODBC

Der SQL Server Native Client ODBC-Treiber unterstützt den Kennwortablauf durch das Hinzufügen des SQL_COPT_SS_OLDPWD-Attributs, das festgelegt wird, bevor eine Verbindung mit dem Server mithilfe der FUNKTION SQLSetConnectAttr hergestellt wird.

Das SQL_COPT_SS_OLDPWD-Attribut des Verbindungshandles verweist auf das abgelaufene Kennwort. Es gibt kein Verbindungszeichenfolgenattribut für dieses Attribut, da dies mit dem Verbindungspooling nicht übereinstimmen würde. Wenn die Anmeldung erfolgreich ist, löscht der Treiber zudem dieses Attribut.

Der SQL Server Native Client ODBC-Treiber gibt in vier Fällen SQL_ERROR für dieses Feature zurück: Kennwortablauf, Kennwortrichtlinienkonflikt, Kontosperrung und wenn die alte Kennworteigenschaft während der Verwendung der Windows-Authentifizierung festgelegt wird. Der Treiber gibt die entsprechenden Fehlermeldungen an den Benutzer zurück, wenn SQLGetDiagField aufgerufen wird.

Weitere Informationen

SQL Server Native Client-Funktionen