Změna hesel prostřednictvím kódu programu

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformní systém (PDW)

Stáhnout ovladač OLE DB

Před SQL Server 2005 (9.x) mohl po vypršení uživatelského hesla resetovat pouze administrátor. Od SQL Server 2005 (9.x) podporuje OLE DB Driver for SQL Server programové řešení expirace hesel pomocí OLE DB Driver a změny v dialogových oknech SQL Server Login.

Note

Pokud je to možné, vyzvejte uživatele k zadání přihlašovacích údajů za běhu a vyhněte se jejich ukládání v trvalém formátu. Pokud musíte zachovat jejich přihlašovací údaje, měli byste je zašifrovat pomocí kryptografického API Win32. Pro více informací o používání hesel viz Silná hesla.

Chybové kódy přihlášení SQL Server

Pokud nelze spojení navázat kvůli problémům s autentizací, aplikace má k dispozici jeden z následujících chybových kódů SQL Server, který pomůže s diagnostikou a obnovou.

Chybový kód SQL Server Zpráva o chybě
15113 Přihlášení pro uživatele%.*ls' selhalo. Důvod: ověření hesla selhalo. Účet je zablokovaný.
18463 Přihlášení uživatele%.*ls se nezdařilo. Důvod: Změna hesla se nezdařila. Heslo nelze v tuto chvíli použít.
18464 Přihlášení uživatele%.*ls se nezdařilo. Důvod: Změna hesla se nezdařila. Heslo nesplňuje požadavky zásad, protože je příliš krátké.
18465 Přihlášení uživatele%.*ls se nezdařilo. Důvod: Změna hesla se nezdařila. Heslo nesplňuje požadavky politiky, protože je příliš dlouhé.
18466 Přihlášení uživatele%.*ls se nezdařilo. Důvod: Změna hesla se nezdařila. Heslo nesplňuje požadavky zásad, protože není dostatečně složité.
18467 Přihlášení uživatele%.*ls se nezdařilo. Důvod: Změna hesla se nezdařila. Heslo nesplňuje požadavky filtru hesel DLL.
18468 Přihlášení uživatele%.*ls se nezdařilo. Důvod: Změna hesla se nezdařila. Během ověřování hesla došlo k neočekávané chybě.
18487 Přihlášení uživatele%.*ls se nezdařilo. Důvod: Platnost hesla účtu vypršela.
18488 Přihlášení uživatele%.*ls se nezdařilo. Důvod: Heslo účtu se musí změnit.

Ovladač OLE DB pro SQL Server

OLE DB Driver for SQL Server podporuje vypršení hesla prostřednictvím uživatelského rozhraní a programovaně.

Vypršení hesla uživatelského rozhraní OLE DB

OLE DB Driver for SQL Server podporuje vypršení platnosti hesla prostřednictvím změn provedených v dialogových oknech SQL Server Login. Pokud je hodnota DBPROP_INIT_PROMPT nastavena na DBPROMPT_NOPROMPT, počáteční pokus o připojení selže, pokud heslo vyprší.

Pokud DBPROP_INIT_PROMPT nastaveno na jinou hodnotu, uživatel vidí SQL Server Login dialog, bez ohledu na to, zda heslo vypršelo nebo ne. Uživatel může kliknout na tlačítko Možnosti a zaškrtnout Změnit heslo pro změnu hesla.

Pokud uživatel klikne na OK a heslo vypršelo, SQL Server ho vyzve k zadání a potvrzení nového hesla pomocí dialogu Změnit heslo SQL Server.

Chování promptů v OLE DB a zamčené účty

Pokusy o připojení mohou selhat kvůli zamčení účtu. Pokud k tomu dojde po zobrazení dialogu SQL Server Login, zobrazí se uživateli chybová zpráva serveru a pokus o připojení je přerušen. Může se také objevit po zobrazení dialogu Změnit heslo SQL Server, pokud uživatel zadá špatnou hodnotu pro staré heslo. V tomto případě se zobrazí stejná chybová zpráva a pokus o připojení je přerušen.

Poolování spojení OLE DB, vypršení hesla a zamčené účty

Účet může být zamčen nebo jeho heslo může vypršet, zatímco je spojení stále aktivní v poolu připojení. Server dvakrát kontroluje vypršená hesla a uzamčené účty. První je, když je spojení poprvé vytvořeno. Podruhé je to při resetu připojení, kdy je spojení odebráno z poolu.

Když pokus o reset selže, spojení je z poolu odstraněno a chyba se vrátí.

Expirace programatického hesla v OLE DB

OLE DB Driver for SQL Server podporuje vypršení hesla přidáním vlastnosti SSPROP_AUTH_OLD_PASSWORD (typ VT_BSTR), která byla přidána do sady DBPROPSET_SQLSERVERDBINIT.

Stávající vlastnost "Password" odkazuje na DBPROP_AUTH_PASSWORD a slouží k uložení nového hesla.

Note

V připojovací řetězec vlastnost "Old Password" nastavuje SSPROP_AUTH_OLD_PASSWORD, což je aktuální (možná expirované) heslo, které není dostupné přes vlastnost řetězce poskytovatele.

Poskytovatel neudržuje hodnotu této nemovitosti. Když je tato vlastnost nastavena, poskytovatel nepoužívá pool připojení pro první připojení, protože nastane nové připojení. Pokud je změna hesla úspěšná, současné připojení nelze znovu použít, protože stále obsahuje staré heslo, které po změně hesla bude neplatné. Pokud přihlášení uspěje, poskytovatel tuto nemovitost vymaže. Následné pokusy o získání starého hesla vracejí VT_EMPTY.

Note

SSPROP_AUTH_OLD_PASSWORD by nikdy neměla být trvalá, protože se používá pouze tehdy, když heslo vyprší.

Všimněte si, že kdykoli je vlastnost "Staré heslo" nastavena, poskytovatel předpokládá, že se pokusí heslo změnit, pokud není také specifikováno Windows Authentication, v takovém případě má vždy přednost.

Pokud je použito Windows autentizace, zadání starého hesla vede buď k DB_E_ERRORSOCCURRED, nebo DB_S_ERRORSOCCURRED v závislosti na tom, zda bylo staré heslo zadáno jako POVINNÉ nebo VOLITELNÉ, a hodnota stavu DBPROPSTATUS_CONFLICTINGBADVALUE se vrací v dwStatus. Toto je detekováno, když je vyvoláno IDBInitialize::Initialize .

Pokud pokus o změnu hesla nečekaně selže, server vrátí chybový kód 18468. Při pokusu o připojení se vrátí standardní chyba OLEDB.

Pro více informací o sadě DBPROPSET_SQLSERVERDBINIT vlastností viz Inicializace a autorizační vlastnosti.