Programowe zmienianie haseł

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

pobierz sterownik OLE DB

Przed SQL Server 2005 (9.x), gdy hasło użytkownika wygasło, tylko administrator mógł je zresetować. Począwszy od SQL Server 2005 (9.x), OLE DB Driver for SQL Server obsługuje programową obsługę wygaśnięcia hasła za pomocą sterownika OLE DB oraz poprzez zmiany w oknie dialogowych logowania SQL Server.

Note

Gdy to możliwe, zachęcaj użytkowników do wprowadzania danych uwierzytelniających w czasie działania i unikaj przechowywania ich w formacie trwałym. Jeśli musisz zachować ich dane uwierzytelniające, powinieneś je zaszyfrować za pomocą API kryptowalutowego Win32. Więcej informacji o użyciu haseł można znaleźć w sekcji Strong Passwords.

Kody błędów logowania do SQL Server

Gdy połączenie nie może zostać nawiązane z powodu problemów z uwierzytelnianiem, aplikacja będzie miała do dyspozycji jeden z następujących kodów błędów SQL Server, aby pomóc w diagnozie i odzyskaniu.

Kod błędu SQL Server Komunikat o błędzie
15113 Logowanie użytkownika%.*ls' nie powiodło: weryfikacja hasła nie powiodła. Konto jest zablokowane.
18463 Logowanie użytkownika "%.*ls" nie powiodło się. Przyczyna: Zmiana hasła nie powiodła się. Nie można obecnie używać hasła.
18464 Logowanie użytkownika "%.*ls" nie powiodło się. Przyczyna: Zmiana hasła nie powiodła się. Hasło nie spełnia wymagań zasad, ponieważ jest zbyt krótkie.
18465 Logowanie użytkownika "%.*ls" nie powiodło się. Przyczyna: Zmiana hasła nie powiodła się. Hasło nie spełnia wymogów polityki, ponieważ jest zbyt długie.
18466 Logowanie użytkownika "%.*ls" nie powiodło się. Przyczyna: Zmiana hasła nie powiodła się. Hasło nie spełnia wymagań zasad, ponieważ nie jest wystarczająco złożone.
18467 Logowanie użytkownika "%.*ls" nie powiodło się. Przyczyna: Zmiana hasła nie powiodła się. Hasło nie spełnia wymagań biblioteki DLL filtru haseł.
18468 Logowanie użytkownika "%.*ls" nie powiodło się. Przyczyna: Zmiana hasła nie powiodła się. Wystąpił nieoczekiwany błąd podczas walidacji hasła.
18487 Logowanie użytkownika "%.*ls" nie powiodło się. Przyczyna: hasło do konta wygasło.
18488 Logowanie użytkownika "%.*ls" nie powiodło się. Przyczyna: Należy zmienić hasło konta.

Sterownik OLE DB dla programu SQL Server

Sterownik OLE DB Driver for SQL Server obsługuje wygaśnięcie haseł poprzez interfejs użytkownika i programowanie.

Wygaśnięcie hasła do interfejsu użytkownika OLE DB

Sterownik OLE DB Driver for SQL Server obsługuje wygaśnięcie hasła poprzez zmiany wprowadzone w okna dialogowym SQL Server Login. Jeśli wartość DBPROP_INIT_PROMPT jest ustawiona na DBPROMPT_NOPROMPT, początkowa próba połączenia zakończy się niepowodzeniem, jeśli hasło wygasło.

Jeśli DBPROP_INIT_PROMPT ustawiono na inną wartość, użytkownik widzi okno SQL Server Login, niezależnie od tego, czy hasło wygasło. Użytkownik może kliknąć przycisk Opcje i zaznaczyć Zmień hasło , aby zmienić hasło.

Jeśli użytkownik kliknie OK, a hasło wygasło, SQL Server prosi go o wpisanie i potwierdzenie nowego hasła za pomocą okna Zmień hasło SQL Server.

Zachowanie promptów w OLE DB i zablokowane konta

Próby połączenia mogą się nie powiódć z powodu zablokowania konta. Jeśli nastąpi to po wyświetleniu okna logowania SQL Server, komunikat o błędzie serwera zostaje wyświetlony użytkownikowi i próba połączenia zostaje przerwana. Może się to również zdarzyć po wyświetleniu okna okna zmiany hasła SQL Server, jeśli użytkownik wpisze błędną wartość dla starego hasła. W tym przypadku wyświetlany jest ten sam komunikat o błędzie, a próba połączenia zostaje przerwana.

Pula połączeń OLE DB, wygaśnięcie haseł i zablokowane konta

Konto może zostać zablokowane lub jego hasło może wygasnąć, gdy połączenie jest nadal aktywne w puli połączeń. Serwer dwukrotnie sprawdza wygasłe hasła i zablokowane konta. Pierwszy to moment, gdy połączenie zostaje po raz pierwszy utworzone. Drugi przypadek to po resetowaniu połączenia, gdy połączenie jest pobierane z puli.

Gdy próba resetu się nie powiedzie, połączenie jest usuwane z puli i zwracany jest błąd.

OLE DB Programmatic Password Expiration

OLE DB Driver for SQL Server obsługuje wygaśnięcie hasła poprzez dodanie właściwości SSPROP_AUTH_OLD_PASSWORD (typ VT_BSTR), która została dodana do zestawu DBPROPSET_SQLSERVERDBINIT.

Istniejąca właściwość "Password" odnosi się do DBPROP_AUTH_PASSWORD i służy do przechowywania nowego hasła.

Note

W parametry połączenia właściwość "Stare hasło" ustawia SSPROP_AUTH_OLD_PASSWORD, czyli aktualne (być może wygasłe) hasło, które nie jest dostępne przez właściwość łańcucha znaków dostawców.

Dostawca nie utrzymuje wartości tej nieruchomości. Gdy ta właściwość jest ustawiona, dostawca nie używa puli połączeń dla pierwszego połączenia, ponieważ pojawi się nowe połączenie. Jeśli zmiana hasła zakończy się sukcesem, obecne połączenie nie może zostać ponownie użyte, ponieważ nadal zawiera stare hasło, które po zmianie hasła będzie nieważne. Jeśli logowanie się powiedzie, dostawca usuwa tę własność. Kolejne próby odzyskania starego hasła zwracają VT_EMPTY.

Note

SSPROP_AUTH_OLD_PASSWORD nigdy nie powinno być utrwalane, ponieważ używa się go tylko wtedy, gdy hasło wygasło.

Należy zauważyć, że za każdym razem, gdy ustawiana jest właściwość "Stare hasło", dostawca zakłada, że podejmowana jest próba zmiany hasła, chyba że określono również uwierzytelnianie Windows, wtedy zawsze ma ono pierwszeństwo.

Jeśli użyte jest uwierzytelnianie Windows, podanie starego hasła powoduje DB_E_ERRORSOCCURRED lub DB_S_ERRORSOCCURRED w zależności od tego, czy stare hasło było oznaczone jako WYMAGANE lub OPCJONALNE, a wartość statusu DBPROPSTATUS_CONFLICTINGBADVALUE zwracana jest w dwStatus. Jest to wykrywane, gdy wywołane zostanie IDBInitialize::Initialize .

Jeśli próba zmiany hasła niespodziewanie się nie powiedzie, serwer zwraca kod błędu 18468. Standardowy błąd OLEDB zwracany jest przy próbie połączenia.

Więcej informacji o zbiorze właściwości DBPROPSET_SQLSERVERDBINIT można znaleźć w sekcji Inicjalizacja i Właściwości Autoryzacyjne.