Freigeben über


Programmgesteuertes Ändern von SQL Server Native Client-Kennwörtern

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Wichtig

SQL Server Native Client (SNAC) wird nicht ausgeliefert mit:

  • SQL Server 2022 (16.x) und höhere Versionen
  • SQL Server Management Studio 19 und höhere Versionen

Der SQL Server Native Client (SQLNCLI oder SQLNCLI11) und der ältere Microsoft OLE DB-Anbieter für SQL Server (SQLOLEDB) werden für die entwicklung neuer Anwendungen nicht empfohlen.

Für neue Projekte verwenden Sie einen der folgenden Treiber:

Informationen zu SQLNCLI, das als Komponente der SQL Server Datenbank-Engine (Versionen 2012 bis 2019) ausgeliefert wird, finden Sie in dieser Ausnahme für den Supportlebenszyklus.

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 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

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 OLE DB-Anbieter von SQL Server Native Client unterstützt das Ablaufen von Kennwörtern durch eine Benutzeroberfläche und programmgesteuert.

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

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 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 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 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 OLE DB-Anbieter von SQL Server Native Client unterstützt das Ablaufen von Kennwörtern durch eine Benutzeroberfläche und programmgesteuert.

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

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 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, 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 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 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 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 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.

Weitere Informationen

SQL Server Native Client-Funktionen