A napokban kaptam egy hibaüzenetet a szokásos oracle login-nál, hogy a jelszavam hamarosan lejár… Mint kiderült az Oracle-nál a 11-es verzióban valakinek jó ötletnek tűnt, hogy egy adatbázisnál alapértelmezett beállítás az, ha lejárnak a jelszavak. Szerintem ez egy nagyon rossz ötlet, ami elég sok komplikációt okozott, ami aztán rengeteg blog és dokumentáció olvasásához vezetett (+1 db restore-hoz). Ezért gyorsan le is írom mire jutottam:
Azt, hogy egy oracle felhasználóra milyen jelszó lejárati/kitiltási beállítások vonatkoznak a felhasználó profile beállítása írja le. Hogy milyen profile tartozik az adott felhasználóhoz, azt az alábbi select mondja meg:
select profile from DBA_USERS where username = 'DETDB';
Ha megvan a profile (jó esetben DEFAULT) akkor annak a beállításait lekérdezhetjük az alábbi módon:
select resource_name,limit from dba_profiles where profile='DEFAULT';
Itt mindennek UNLIMITED-nek kellene lenni, kivéve a PASSWORD_VERIFY_FUNCTION változónak, mert annak NULL
Ha valaki sql-ből szeretné ezt állítani, akkor:
alter profile default limit password_life_time unlimited;
De a beállítások elérhetőek az Oracle Enterprise Managerben is: Server->Profiles->Default->Edit->Password->Expire in->Unlimited
(Oracle EM indítása (shell, oracle user): emctl start dbconsole)
Ha már megtörtént a baj (lejárt a jelszó), akkor az alábbit kell tenni:
ALTER USER DETDB IDENTIFIED BY ******; ALTER USER DETDB ACCOUNT UNLOCK;
Ez megváltoztatja a felhasználó jelszavát (ezáltal újra resetelődik a lejárati idő) és visszaengedi a felhasználót. Célszerű a limitek módosítása után ezt megtenni, akkor többet nem kell vele foglalkozni.
Ha ezután sem tudunk belépni, akkor érdemes megvizsgálni azokat a felhasználókat akikkel gond van:
SELECT username, account_status, created, lock_date, expiry_date FROM dba_users WHERE account_status != 'OPEN';
Ha a felhasználónkat (mondjuk a jelszóváltoztatás után) folyamatosan zárolják a rossz jelszóval történő próbálkozások miatt, akkor jó lenne tudni, hogy ki és honnan. Ezt alapból nem tudjuk meg, ehhez engedélyezni kell a bejelentkezési események auditálását…
AUDIT network BY ACCESS;
Unlockoljuk a felhasználót, és várjuk a csodát (a 1017 return kóddal záródó login próbálkozásokat)
SELECT username,userhost,returncode, t.TIMESTAMP FROM dba_audit_session t WHERE username='DETDB' and returncode='1017' ORDER BY sessionid DESC;
A listában látható host-okon kell megváltoztatni a jelszót, és egy ideig megint minden jó lesz…