Programmgesteuertes Ändern von Kennwörtern
Vor SQL Server 2005 konnte nur ein Administrator ein abgelaufenes Kennwort eines Benutzers zurücksetzen. Ab SQL Server 2005 unterstützt SQL Server Native Client die programmgesteuerte Verwaltung von abgelaufenen Kennwörtern sowohl durch den SQL Server Native Client OLE DB-Anbieter, den SQL Server Native Client ODBC-Treiber als auch durch Änderungen an den Dialogfeldern zur SQL Server-Anmeldung.
Hinweis |
---|
Fordern Sie, wenn möglich, Benutzer dazu auf, ihre Anmeldeinformationen zur Laufzeit einzugeben, um zu vermeiden, diese Informationen in einem permanenten Format speichern zu müssen. Wenn Sie die Anmeldeinformationen permanent 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 Windows-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 Windows-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. |
Weitere Informationen zum Behandeln von SQL Server-Fehlern finden Sie unter Behandeln von Fehlern und Meldungen in Anwendungen.
SQL Server Native Client OLE DB-Anbieter
Der SQL Server Native Client OLE DB-Anbieter unterstützt das Ablaufen von Kennwörtern programmgesteuert sowie über eine Benutzerschnittstelle.
OLE DB-Benutzeroberfläche für abgelaufene Kennwörter
Der SQL Server Native Client OLE DB-Anbieter unterstützt die Verwaltung von abgelaufenen Kennwörtern durch Änderungen, die an den Dialogfeldern zur 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 SQL Server Native Client OLE DB-Anbieter unterstützt das Ablaufen von Kennwörtern durch die SSPROP_AUTH_OLD_PASSWORD-Eigenschaft (vom 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 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 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 beibehalten 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 Kenwort 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.
SQL Server Native Client-ODBC-Treiber
Der SQL Server Native Client-ODBC-Anbieter unterstützt das Ablaufen von Kennwörtern programmgesteuert sowie über eine Benutzerschnittstelle.
ODBC-Benutzeroberfläche für abgelaufene Kennwörter
Der SQL Server Native Client ODBC-Treiber unterstützt die Verwaltung von abgelaufenen Kennwörtern durch Änderungen, die an den Dialogfeldern zur SQL Server-Anmeldung vorgenommen wurden.
Wenn SQLDriverConnect aufgerufen wird und der Wert von DriverCompletion auf SQL_DRIVER_NOPROMPT festgelegt wird, schlägt der erste Verbindungsversuch fehl, wenn das Kennwort abgelaufen ist. Bei darauffolgenden Aufrufen von SQLError oder SQLGetDiagRec werden der SQLSTATE-Wert 28000 und der systemeigene Fehlercodewert 18487 zurückgegeben.
Wenn für DriverCompletion 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.
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 das Ablaufen von Kennwörtern durch das hinzugefügte SQL_COPT_SS_OLDPWD-Attribut, das vor der Herstellung der Verbindung mit dem Server mithilfe der SQLSetConnectAttr-Funktion festgelegt 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.
Es gibt vier Fälle, in denen der SQL Server Native Client ODBC-Treiber für dieses Feature SQL_ERROR zurückgibt: Ablaufen des Kennworts, Konflikte mit den Kennwortrichtlinien, Kontosperrung und Fälle, in denen das alte Kennwort als Eigenschaft festgelegt ist, während die Windows-Authentifizierung verwendet wird. Der Treiber gibt die entsprechenden Fehlermeldungen an den Benutzer zurück, wenn SQLGetDiagField aufgerufen wird.