[A sorozat korábbi részei itt és itt meg itt]
Kivételesen most nem olyasmivel készültem, amivel megszívattam magam :-). A minap auditáltunk Oracle 11gR2-t - ez volt az első, úgyhogy gondoltam leírom a tapasztalatokat - persze az érdekesebbeket :-). Először is a jelszókezelésről néhány szó.
Az első dolog, amit jó ha tud az ember, hogy a 11-es Oracle segít nekünk abban, hogy felderítsük azokat a default accountokat, amik az alapértelmezett jelszavakat használják. Régebben erre még külön tool-t használtunk: checkpwd - Red Database Security. Az új módi azonban ez:
SELECT * FROM DBA_USERS_WITH_DEFPWD;
A másik, amit sokat hirdetnek is, hogy a jelszó politikája sokat fejlődött a 11-es Oracle-nek. Ez igaz is - részben, illetve hát izé… Ha azt nézzük, hogy a 10gR2-ben jelszó politika címén csak a
FAILED_LOGIN_ATTEMPTS = 10
beállítást használták alapértelmezésben, most pedig:
FAILED_LOGIN_ATTEMPTS = 10
PASSWORD_LOCK_TIME = 1
PASSWORD_GRACE_TIME = 7
PASSWORD_LIFE_TIME = 180
Ekkor tényleg mondhatjuk, hogy biztonságosabb lett. Viszont ami becsapós - sőt bevallom még én is rosszul tudtam -, hogy a másik fícsör, miszerint egész jó jelszó komplexitás ellenőrzés is van az új verzióban, alapértelmezésben nem került beállításra.
Egész pontosan azt mondja a hivatalos okosság, hogy ha upgrade-el az ember egy korábbi verzióról vagy DBCA-val csinál egy új adatbázist, akkor azoknál nem lesz bekapcsolva. Márpedig lássuk be, általában DBCA-val csinál az ember új adatbázist. Persze meg lehet reszelgetni, hogy jó legyen nekünk, csak tudni kell hozzá mit hol kell keresni. Van ugyanis egy $ORACLE_HOME/rdbms/admin/utlpwdmg.sql
nevű szkript, amiben benne van az új hiper-szuper jelszó komplexitást kikényszerítő függvény (password verifycation function). Nem árt tudni, hogy két függvény is lakik ott, van egy régi (verify_function) és az új (verify_function_11G). Amikor lefuttatjuk a fenti SQL szkriptet, mindkét függvényt betölti, de az utóbbit állítja be a „default” nevű adatbázis profilhoz. És hogy mi is van ebben a gyári jelszó komplexitás ellenőrzésben?
- Minimum 8 karakteres jelszó
- Legalább 1 szám és egy betű legyen benne
- Nem lehet „egyszerű” jelszó
- A jelszó nem lehet egyenlő a felhasználónévvel
- A jelszó hossza nem lehet egyenlő a felhasználónév hosszával (he? :-)
- A jelszó nem lehet ugyanaz, mint a felhasználónév visszafele
- A jelszó nem lehet ugyanaz, mint a szerver neve vagy a szerver neve valamilyen 1 és 100 közötti számmal postfixelve (pl.: oracle1)
És még egy kis érdekesség:
A 11-es verziótól kezdve az Oracle áttért az SHA-1 algoritmus használatára (megjegyzem, mire ők elkezdték használni, hivatalosan már depricated minősítést kapott az SHA-1, de mindegy is :-). Ennek az újításnak is a hozománya, hogy most már megkülönbözteti a rendszer kis és NAGY betűket a jelszavakban. Egész pontosan egy sec_case_ssensitive_login paraméterrel lehet ezt befolyásolni, ami alapértelmezésben TRUE értéket vesz fel. Ez eddig jó. Viszont, amit tudni kell, hogy ha korábbi verzióról frissítünk, akkor a régi jelszavak esetében amíg nem változtat jelszót a felhasználó, a kis/NAGY betűk továbbra is egyenértékűek lesznek (magyarul case-insensitive a dolog :-)
Sőt még le is tudjuk kérdezni, hogy adott usernek milyen „verziójú” jelszava van.
SELECT username, password_versions FROM dba_users WHERE username='SCOTT';
USERNAME PASSWORD ------------------------------ --------
SCOTT 10G 11G
Ha „10G”-t látunk, akkor még régi, case-insensitive jelszava van, míg a „10G 11G” azt jelenti, hogy már csilli-villi új case-sensitive jelszava van az emberünknek.