Az SQL Server natív kliensjelszavak programozott módosítása

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Important

SQL Server Native Client (SNAC) nem kerül szállításra a következőkkel:

  • SQL Server 2022 (16.x) és újabb verziók
  • AZ SQL Server Management Studio 19- és újabb verziói

Az SQL Server natív ügyfele (SQLNCLI vagy SQLNCLI11) és az örökölt Microsoft OLE DB Provider for SQL Server (SQLOLEDB) nem ajánlott az új alkalmazásfejlesztéshez.

Új projektek esetén használja az alábbi illesztőprogramok egyikét:

Az SQL Server adatbázismotor (2012–2019) egyik összetevőjeként szállított SQLNCLI esetében tekintse meg az alábbi támogatási életciklus-kivételt.

Az SQL Server 2005 (9.x) előtt, amikor egy felhasználó jelszavaja lejárt, csak egy adminisztrátor állíthatta vissza. Az SQL Server 2005 (9.x) verziótól kezdve az SQL Server Native Client támogatja a jelszó lejáratának programozási kezelését mind az SQL Server Native Client OLE DB szolgáltatóján, mind az SQL Server Native Client ODBC illesztőprogramján, valamint az SQL Server bejelentkezési párbeszédablakainak módosításán keresztül.

Note

Lehetőség szerint kérje a felhasználókat, hogy adják meg a hitelesítő adataikat a futás közben, és kerüld a titkosítási adatokat tartós formátumban tárolni. Ha meg kell őrizned a hitelesítésüket, akkor a Win32 kriptos API-val kell titkosítanod őket. További információért a jelszavak használatáról lásd: Strong Passwords.

SQL Server bejelentkezési hibakódok

Ha hitelesítési problémák miatt nem lehet kapcsolatot létrehozni, az alkalmazás számára elérhető lesz az alábbi SQL Server hibakódok egyike, hogy segítse a diagnosztikát és a helyreállítást.

SQL Server hibakód Hibaüzenet
15113 Bejelentkezés sikertelen volt a '%.*ls' felhasználó esetében Ok: Jelszó ellenőrzése sikertelen. A fiók le van zárva.
18463 A (z)%.*ls felhasználó bejelentkezése sikertelen volt. Ok: A jelszó módosítása nem sikerült. A jelszó jelenleg nem használható.
18464 A (z)%.*ls felhasználó bejelentkezése sikertelen volt. Ok: A jelszó módosítása nem sikerült. A jelszó nem felel meg a szabályzat követelményeinek, mert túl rövid.
18465 A (z)%.*ls felhasználó bejelentkezése sikertelen volt. Ok: A jelszó módosítása nem sikerült. A jelszó nem felel meg a szabályzati követelményeknek, mert túl hosszú.
18466 A (z)%.*ls felhasználó bejelentkezése sikertelen volt. Ok: A jelszó módosítása nem sikerült. A jelszó nem felel meg a szabályzat követelményeinek, mert nem elég bonyolult.
18467 A (z)%.*ls felhasználó bejelentkezése sikertelen volt. Ok: A jelszó módosítása nem sikerült. A jelszó nem felel meg a jelszószűrő DLL követelményeinek.
18468 A (z)%.*ls felhasználó bejelentkezése sikertelen volt. Ok: A jelszó módosítása nem sikerült. Váratlan hiba történt a jelszó érvényesítése során.
18487 A (z)%.*ls felhasználó bejelentkezése sikertelen volt. Ok: A fiók jelszava lejárt.
18488 A (z)%.*ls felhasználó bejelentkezése sikertelen volt. Ok: A fiók jelszavát módosítani kell.

SQL Server Native Client OLE DB-szolgáltató

Az SQL Server Native Client OLE DB szolgáltató támogatja a jelszó lejáratát felhasználói felületen és programozási úton keresztül.

OLE DB felhasználói felület jelszó lejárata

Az SQL Server Native Client OLE DB szolgáltató támogatja a jelszó lejáratát az SQL Server bejelentkezési ablakainak módosításaival. Ha DBPROP_INIT_PROMPT értéke DBPROMPT_NOPROMPT-re van állítva, az első kapcsolati próbálkozás sikertelen, ha a jelszó lejárt.

Ha DBPROP_INIT_PROMPT más értékre van beállítva, a felhasználó meglátja a SQL Server Bejelentkezés párbeszédet, függetlenül attól, hogy a jelszó lejárt-e vagy sem. A felhasználó rákattinthat az Opciók gombra, és bejelölheti a Jelszó módosítását , hogy megváltoztassa a jelszót.

Ha a felhasználó az OK-ra kattint, és a jelszó lejárt, az SQL Server arra kéri a felhasználót, hogy adjon be és erősítse meg az új jelszót a Change SQL Server Password párbeszéd segítségével.

OLE DB prompt viselkedése és zárt fiókok

A kapcsolati próbálkozások kudarcot okozhatnak, mert a fiók zárolva van. Ha ez az SQL Server bejelentkezési párbeszéd megjelenítése után történik, a szerver hibaüzenete megjelenik a felhasználónak, és a csatlakozási kísérlet megszakításra kerül. Ez előfordulhat az Change SQL Server jelszó párbeszéd megjelenítése után is, ha a felhasználó rossz értéket ír be a régi jelszóra. Ebben az esetben ugyanaz a hibaüzenet jelenik meg, és a csatlakozási kísérlet megszakításra kerül.

OLE DB kapcsolati csoportosítás, jelszó lejárata és zárolt fiókok

Egy fiókot lezárhatnak, vagy a jelszó lejárhat, amíg a kapcsolat még aktív a kapcsolati poolban. A szerver kétszer is ellenőrizi a lejárt jelszavakat és a zárolt fiókokat. Az első az, amikor először jön létre egy kapcsolat. A második alkalom a kapcsolat visszaállításakor történik, amikor a kapcsolatot a medencéből veszik el.

Ha a visszaállítási kísérlet sikertelenül működik, a kapcsolat eltávolítódik a poolból, és hiba jelenik meg.

OLE DB Programmatic Password Expire

Az SQL Server Native Client OLE DB szolgáltató támogatja a jelszó lejáratát a SSPROP_AUTH_OLD_PASSWORD (VT_BSTR típus) tulajdonság hozzáadásával, amelyet a DBPROPSET_SQLSERVERDBINIT tulajdonsághalmazhoz adtak.

A meglévő "Jelszó" tulajdonság DBPROP_AUTH_PASSWORD-re utal, és az új jelszó tárolására szolgál.

Note

A kapcsolati karakterlánc-ban a "Old Password" tulajdonság beállítja a SSPROP_AUTH_OLD_PASSWORD-ot, ami a jelenlegi (esetleg lejárt) jelszó, amely nem elérhető szolgáltató string tulajdonságon keresztül.

A szolgáltató nem tartja fenn az ingatlan értékét. Amikor ez a tulajdonság be van állítva, a szolgáltató nem használja az első kapcsolat poolát, mert új kapcsolat keletkezik. Ha a jelszóváltás sikeres, a jelenlegi kapcsolatot nem lehet újrahasználni, mivel az továbbra is tartalmazza a régi jelszót, amely a jelszó megváltoztatása után érvénytelenné válik. Ha a bejelentkezés sikeres, a szolgáltató töröli ezt az ingatlant. A későbbi próbálkozások a régi jelszó visszaszerzésére VT_EMPTY.

Note

SSPROP_AUTH_OLD_PASSWORD soha nem szabad fenntartani, mivel csak akkor használják, ha egy jelszó lejárt.

Fontos megjegyezni, hogy amikor a "Régi jelszó" tulajdonságot beállítják, a szolgáltató feltételezi, hogy megpróbálják megváltoztatni a jelszót, hacsak nincs Windows hitelesítés is megadva, amikor mindig az elsőbbséget élvezi.

Ha Windows hitelesítést használnak, a régi jelszó megadása vagy DB_E_ERRORSOCCURRED vagy DB_S_ERRORSOCCURRED eredményt eredményez, attól függően, hogy a régi jelszót KÖTELEZETTNEK vagy OPCIONÁLISNAK adták-e meg, és a dwStatusban a DBPROPSTATUS_CONFLICTINGBADVALUE státuszérték jelenik meg. Ezt akkor észlelik, amikor az IDBInitialize::Initialize hívást kapjuk.

Ha a jelszó módosítási kísérlete váratlanul kudarcot vall, a szerver 18468-as hibakódot ad vissza. A csatlakozási kísérletből egy szokásos OLEDB hiba jelenik meg.

További információért a DBPROPSET_SQLSERVERDBINIT tulajdonsághalmazról lásd: Inicializációs és engedélyezési tulajdonságok.

SQL Server natív ügyfél ODBC-illesztőprogramja

Az SQL Server Native Client OLE DB szolgáltató támogatja a jelszó lejáratát felhasználói felületen és programozási úton keresztül.

ODBC felhasználói felület jelszó lejárata

Az SQL Server Native Client ODBC illesztőprogram támogatja a jelszó lejáratát az SQL Server bejelentkezési ablakainak módosításával.

Ha az SQLDriverConnectet hívják meg, és a DriverCompletion értéke SQL_DRIVER_NOPROMPT-re van beállítva, az első kapcsolati kísérlet sikertelen, ha a jelszó lejárt. A SQLSTATE érték 28000 és a natív hibakód érték 18487 a következő SQLError vagy SQLGetDiagRec hívások során kerül vissza.

Ha a DriverCompletion más értékre volt beállítva, a felhasználó látja az SQL Server bejelentkezési párbeszédet, függetlenül attól, hogy a jelszó lejárt-e vagy sem. A felhasználó rákattinthat az Opciók gombra, és bejelölheti a Jelszó módosítását , hogy megváltoztassa a jelszót.

Ha a felhasználó OK-ra kattint, és a jelszó lejárt, az SQL Server új jelszó beírását és megerősítését kéri az SQL Server jelszó megváltoztatása párbeszéd segítségével.

ODBC prompt viselkedése és zárt fiókok

A kapcsolati próbálkozások kudarcot okozhatnak, mert a fiók zárolva van. Ha ez az SQL Server bejelentkezési párbeszéd megjelenítése után történik, a szerver hibaüzenete megjelenik a felhasználónak, és a csatlakozási kísérlet megszakításra kerül. Ez előfordulhat az Change SQL Server jelszó párbeszéd megjelenítése után is, ha a felhasználó rossz értéket ír be a régi jelszóra. Ebben az esetben ugyanaz a hibaüzenet jelenik meg, és a csatlakozási kísérlet megszakításra kerül.

ODBC kapcsolati csoportosítás, jelszó lejárt idő és zárolt fiókok

Egy fiókot lezárhatnak, vagy a jelszó lejárhat, amíg a kapcsolat még aktív a kapcsolati poolban. A szerver kétszer is ellenőrizi a lejárt jelszavakat és a zárolt fiókokat. Az első az, amikor először jön létre egy kapcsolat. A második alkalom a kapcsolat visszaállításakor történik, amikor a kapcsolatot a medencéből veszik el.

Ha a visszaállítási kísérlet sikertelenül működik, a kapcsolat eltávolítódik a poolból, és hiba jelenik meg.

ODBC programozott jelszó lejárata

A SQL Server Native Client ODBC illesztőprogram támogatja a jelszó lejáratát a SQL_COPT_SS_OLDPWD attribútumának hozzáadásával, amelyet a szerverhez való csatlakozás előtt állítanak be az SQLSetConnectAttr funkcióval.

A kapcsolati handle SQL_COPT_SS_OLDPWD attribútuma a lejárt jelszóra utal. Nincs kapcsolati karakterlánc attribútuma ehhez az attribútumhoz, mivel ez zavarná a kapcsolat poolingját. Ha a bejelentkezés sikerül, a meghajtó töröli ezt az attribútumot.

A SQL Server Native Client ODBC illezőprogram négy esetben SQL_ERROR visszaadja ezt a funkciót: jelszó lejárulása, jelszó-politika ütközés, fiókzárolás, valamint amikor a régi jelszó tulajdonságot beállítják Windows hitelesítés használatakor. Az illesztőprogram a megfelelő hibaüzeneteket küldi a felhasználónak, amikor SQLGetDiagField meghívást kap.