Freigeben über


Programmgesteuertes Ändern von Kennwörtern

Vor SQL Server 2005, wenn das Kennwort eines Benutzers abgelaufen ist, konnte nur ein Administrator es zurücksetzen. Ab SQL Server 2005 unterstützt SQL Server Native Client die programmgesteuerte Verarbeitung des Kennwortablaufs sowohl über den OLE DB-Anbieter des SQL Server Native Client als auch über den SQL Server Native Client ODBC-Treiber sowie durch Änderungen an den Dialogfeldern für die SQL Server-Anmeldung .

Hinweis

Wenn möglich, fordern Sie Benutzer auf, ihre Anmeldeinformationen zur Laufzeit einzugeben, und vermeiden Sie, ihre Anmeldeinformationen in einem dauerhaften Format zu speichern. Wenn Sie ihre Anmeldeinformationen beibehalten müssen, sollten Sie sie mit der Win32-Krypto-API verschlüsseln. Weitere Informationen zur Verwendung von Kennwörtern finden Sie unter "Sichere Kennwörter".

SQL Server-Anmeldefehlercodes

Wenn aufgrund von Authentifizierungsproblemen keine Verbindung hergestellt werden kann, steht eine der folgenden SQL Server-Fehlercodes der Anwendung zur Verfügung, um Diagnose und Wiederherstellung zu unterstützen.

SQL Server-Fehlercode Fehlermeldung
15113 Fehler bei der Anmeldung für die%.*ls' Reason: 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 erfüllt keine Richtlinienanforderungen, da es zu kurz ist.
18465 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Fehler bei der Kennwortänderung. Das Kennwort erfüllt keine Richtlinienanforderungen, da es zu lang ist.
18466 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Ursache: Fehler bei der Kennwortänderung. Das Kennwort erfüllt keine Richtlinienanforderungen, da es nicht komplex genug ist.
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'. Grund: Das Kennwort des Kontos ist abgelaufen.
18488 Fehler bei der Anmeldung für den Benutzer '%.*ls'. Grund: Das Kennwort des Kontos muss geändert werden.

SQL Server Native Client OLE DB-Anbieter

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

Ablauf des OLE DB-Benutzeroberflächenkennworts

Der OLE DB-Anbieter von SQL Server Native Client unterstützt den Ablauf des Kennworts durch Änderungen, die an den Dialogfeldern für die SQL Server-Anmeldung vorgenommen wurden. Wenn der Wert von DBPROP_INIT_PROMPT auf DBPROMPT_NOPROMPT festgelegt ist, schlägt der anfängliche Verbindungsversuch fehl, wenn das Kennwort abgelaufen ist.

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

Wenn der Benutzer auf "OK" klickt und das Kennwort abgelaufen ist, fordert SQL Server den Benutzer auf, ein neues Kennwort mithilfe des Dialogfelds "SQL Server-Kennwort ändern" einzugeben und zu bestätigen.

OLE DB-Eingabeaufforderungsverhalten und gesperrte Konten

Verbindungsversuche können aufgrund des gesperrten Kontos fehlschlagen. Wenn dies nach der Anzeige des Dialogfelds "SQL Server-Anmeldung " auftritt, wird dem Benutzer die Serverfehlermeldung angezeigt, und der Verbindungsversuch wird abgebrochen. Es kann auch nach der Anzeige des Dialogfelds "SQL Server-Kennwort ändern" auftreten, wenn der Benutzer einen ungültigen Wert für das alte Kennwort eingibt. In diesem Fall wird dieselbe Fehlermeldung angezeigt, und der Verbindungsversuch wird abgebrochen.

OLE DB-Verbindungspooling, Kennwortablauf und gesperrte Konten

Ein Konto kann gesperrt sein, oder sein Kennwort läuft ab, während die Verbindung noch in einem Verbindungspool aktiv ist. Der Server sucht zweimal nach abgelaufenen Kennwörtern und gesperrten Konten. Die erste ist, wenn eine Verbindung zum ersten Mal erstellt wird. Bei der zweiten Gelegenheit wird die Verbindung zurückgesetzt, wenn die Verbindung vom Pool genommen wird.

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

Programmgesteuertes Ablaufen von OLE DB-Kennwörtern

Der OLE DB-Anbieter von SQL Server Native Client unterstützt den Kennwortablauf durch das Hinzufügen der SSPROP_AUTH_OLD_PASSWORD -Eigenschaft (Typ VT_BSTR), die dem DBPROPSET_SQLSERVERDBINIT-Eigenschaftensatz hinzugefügt wurde.

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

Hinweis

In der Verbindungszeichenfolge legt die Eigenschaft "Altes Kennwort" SSPROP_AUTH_OLD_PASSWORD fest, bei dem es sich um das aktuelle (möglicherweise abgelaufene) Kennwort handelt, das über eine Anbieterzeichenfolgeneigenschaft nicht verfügbar ist.

Der Anbieter behält den Wert dieser Eigenschaft nicht bei. Wenn diese Eigenschaft festgelegt ist, verwendet der Anbieter nicht den Verbindungspool für die erste Verbindung, da eine neue Verbindung auftritt. Wenn die Kennwortänderung erfolgreich ist, kann die aktuelle Verbindung nicht wiederverwendet werden, da sie weiterhin das alte Kennwort enthält, das nach der Kennwortänderung ungültig ist. Wenn die Anmeldung erfolgreich ist, löscht der Anbieter diese Eigenschaft. Anschließend wird versucht, das alte Kennwort VT_EMPTY zurückzugeben.

Hinweis

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

Beachten Sie, dass beim Festlegen der Eigenschaft "Altes Kennwort" der Anbieter davon ausgeht, dass versucht wird, das Kennwort zu ändern, es sei denn, die Windows-Authentifizierung ist ebenfalls angegeben, in diesem Fall hat sie immer Vorrang.

Wenn die Windows-Authentifizierung verwendet wird, führt die Angabe des alten Kennworts entweder zu DB_E_ERRORSOCCURRED oder DB_S_ERRORSOCCURRED, je nachdem, ob das alte Kennwort als ERFORDERLICH oder OPTIONAL angegeben wurde, und der Statuswert von DBPROPSTATUS_CONFLICTINGBADVALUE in dwStatus zurückgegeben wird. 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. Ein OLEDB-Standardfehler wird vom Verbindungsversuch zurückgegeben.

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

ODBC-Treiber für SQL Server Native Client

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

Ablauf des ODBC-Benutzeroberflächenkennworts

Der SQL Server Native Client ODBC-Treiber unterstützt den Kennwortablauf durch Änderungen, die an den Dialogfeldern für die SQL Server-Anmeldung vorgenommen wurden.

Wenn SQLDriverConnect aufgerufen wird und der Wert von DriverCompletion auf SQL_DRIVER_NOPROMPT festgelegt ist, schlägt der anfängliche 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 auf die Schaltfläche "Optionen " klicken und das Kennwort ändern , um das Kennwort zu ändern.

Wenn der Benutzer auf "OK" klickt und das Kennwort abgelaufen ist, fordert SQL Server zum Eingeben und Bestätigen eines neuen Kennworts mithilfe des Dialogfelds "SQL Server-Kennwort ändern " auf.

ODBC-Eingabeaufforderungsverhalten und gesperrte Konten

Verbindungsversuche können aufgrund des gesperrten Kontos fehlschlagen. Wenn dies nach der Anzeige des Dialogfelds "SQL Server-Anmeldung " auftritt, wird dem Benutzer die Serverfehlermeldung angezeigt, und der Verbindungsversuch wird abgebrochen. Es kann auch nach der Anzeige des Dialogfelds "SQL Server-Kennwort ändern" auftreten, wenn der Benutzer einen ungültigen Wert für das alte Kennwort eingibt. In diesem Fall wird dieselbe Fehlermeldung angezeigt, und der Verbindungsversuch wird abgebrochen.

ODBC-Verbindungspooling, Kennwortablauf und gesperrte Konten

Ein Konto kann gesperrt sein, oder sein Kennwort läuft ab, während die Verbindung noch in einem Verbindungspool aktiv ist. Der Server sucht zweimal nach abgelaufenen Kennwörtern und gesperrten Konten. Die erste ist, wenn eine Verbindung zum ersten Mal erstellt wird. Bei der zweiten Gelegenheit wird die Verbindung zurückgesetzt, wenn die Verbindung vom Pool genommen wird.

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

Programmgesteuertes ODBC-Kennwortablauf

Der ODBC-Treiber für SQL Server Native Client 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 SQLSetConnectAttr-Funktion hergestellt wird.

Das SQL_COPT_SS_OLDPWD Attribut des Verbindungshandle bezieht sich auf das abgelaufene Kennwort. Für dieses Attribut gibt es kein Verbindungszeichenfolgen-Attribut, da dies zu Einer Beeinträchtigung der Verbindungspooling führen würde. Wenn die Anmeldung erfolgreich ist, löscht der Treiber dieses Attribut.

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

Siehe auch

SQL Server Native Client-Funktionen