Passwort Sicherheit ist seit jeher ein wichtiges Thema, wenn man mit Datenbanken Applikationen arbeitet. Das Passwort soll dabei eine gewisse Komplexität haben, nur eine bestimmte Anzahl von fehlerhaften Login-Versuchen erlauben und irgendwann auch ablaufen. Innerhalb der Oracle Datenbanken verwendet man dafür die Oracle User Profiles.
Was sind noch einmal Oracle User Profiles? Ganz einfach gesagt: User Profiles ermöglichen es, eine Reihe von Datenbank-Limits einzustellen. Wenn ein Profile einem Benutzer zugewiesen ist, dann kann dieser Benutzer diese Limits nicht überschreiten. Dabei kann es um Limits für Datenbank Ressourcen und/oder Passwort Sicherheit gehen. Möchte man Datenbank Ressourcen begrenzen, gilt allerdings die Empfehlung, den Datenbank Ressource Manager mit mehr Funktionalität und Flexibilität zu verwenden. Bei den Passwörtern hingegen sind User Profiles das Mittel der Wahl.
Wie werden diese eingestellt bzw. wie lassen sie sich administrieren? Oracle User Profiles werden mit CREATE PROFILE angelegt. Jeder User, der das CREATE PROFILE Recht besitzt, kann ein User Profile anlegen. Ein Oracle Profile kann natürlich auch von mehreren Benutzern verwendet werden, so dass die Profile-Einstellungen gemeinsam gelten.
Um ein User Profile zuzuweisen, wird das CREATE oder ALTER USER Kommando verwendet. Die Änderungen werden bei der nächsten User Connection gültig. Falls man kein Profile zuweist, wird automatisch ein Default Profile verwendet. Darüberhinaus gibt es out-of-the-box weitere Profiles wie zum Beispiel das Profile mit Namen ORA_STIG_PROFILE, das die aktuellsten STIG (Security Technical Implementation Guide’s)- Richtlinien addressiert, wie z.B. die Notwendigkeit einer Passwortkomplexitätsfunktion, maximale Fehlversuche bei der Anmeldung, Wiederverwendungszeit usw. Um einen Überblick über die Profiles zu bekommen, selektiert man am Einfachsten USER/DBA/CDB_PROFILES. Neu mit 21c ist auch die Einführung des Profiles ORA_CIS_PROFILE um den neuesten CIS (Center for Internet Security)-Richtlinien für Passwörter zu entsprechen.
Folgendes Beispiel zeigt die von Oracle vordefinierten Profiles und ihre Einstellungen in einer PDB im Datenbank Release 21c.
SQL> select profile, resource_name, limit from dba_profiles where resource_type='PASSWORD'order by 1; PROFILE RESOURCE_NAME LIMIT -------------------- --------------------------- --------------------------- DEFAULT PASSWORD_REUSE_TIME 365 DEFAULT PASSWORD_LOCK_TIME 1 DEFAULT PASSWORD_GRACE_TIME 7 DEFAULT INACTIVE_ACCOUNT_TIME UNLIMITED DEFAULT PASSWORD_VERIFY_FUNCTION NULL DEFAULT PASSWORD_REUSE_MAX 5 DEFAULT PASSWORD_ROLLOVER_TIME 0 DEFAULT PASSWORD_LIFE_TIME 60 DEFAULT FAILED_LOGIN_ATTEMPTS 3 ORA_CIS_PROFILE PASSWORD_REUSE_TIME 365 ORA_CIS_PROFILE PASSWORD_LIFE_TIME 90 ORA_CIS_PROFILE PASSWORD_VERIFY_FUNCTION ORA12C_VERIFY_FUNCTION ORA_CIS_PROFILE PASSWORD_REUSE_MAX 20 ORA_CIS_PROFILE FAILED_LOGIN_ATTEMPTS 5 ORA_CIS_PROFILE PASSWORD_ROLLOVER_TIME DEFAULT ORA_CIS_PROFILE INACTIVE_ACCOUNT_TIME 120 ORA_CIS_PROFILE PASSWORD_GRACE_TIME 5 ORA_CIS_PROFILE PASSWORD_LOCK_TIME 1 ORA_STIG_PROFILE PASSWORD_VERIFY_FUNCTION ORA12C_STIG_VERIFY_FUNCTION ORA_STIG_PROFILE PASSWORD_LIFE_TIME 35 ORA_STIG_PROFILE PASSWORD_REUSE_TIME 175 ORA_STIG_PROFILE FAILED_LOGIN_ATTEMPTS 3 ORA_STIG_PROFILE PASSWORD_REUSE_MAX 5 ORA_STIG_PROFILE PASSWORD_LOCK_TIME UNLIMITED ORA_STIG_PROFILE INACTIVE_ACCOUNT_TIME 35 ORA_STIG_PROFILE PASSWORD_ROLLOVER_TIME DEFAULT ORA_STIG_PROFILE PASSWORD_GRACE_TIME 0
Aus den Bezeichnungen lässt sich leicht die Art der Begrenzung ableiten. So steht die Ressource PASSWORD_LIFE_TIME für die Gültigkeitsdauer eines Passworts oder FAILED_LOGIN_ATTEMPTS für die mögliche Anzahl der fehlerhaften Login-Versuche. Die Ressource INACTIVE_ACCOUNT_TIME, die mit 12.2. eingeführt wurde, gibt dabei die Anzahl der Tage an, die ein User “idle” sein kann. Nach Ablauf der Frist wird das Konto gesperrt. Der Standardwert ist UNLIMITED, der Mindestwert muss 15 betragen.
Details zu den Funktionen wie ORA12C_STIG_VERIFY_FUNCTION und ORA12C_VERIFY_FUNCTION, die für die Komplexität des Passworts eingesetzt werden können, kann man in folgendem Link nachlesen.
Möchte man die Profile Einstellungen pro User sehen, kann man die View DBA_USERS selektieren.
SQL> select account_status, profile, password_change_date from dba_users
where username in ('APPS1','SCOTT');
ACCOUNT_STATUS PROFILE PASSWORD_CHANGE_DATE
-------------------- -------------------- --------------------
OPEN DEFAULT 23-MAR-21
OPEN & IN ROLLOVER APPS1_ROLLOVER 21-JUN-21
Neues Feature: Passwörter ändern ohne Downtime
Seit neuestem kann eine Anwendung ihre Datenbankpasswörter ändern, ohne dass ein Administrator eine Ausfallzeit einplanen muss. Das Feature hat den aussagekräftigen Namen Gradual Database Password Rollover for Applications. Damit besteht die Möglichkeit eine Übergangszeit für das Datenbankpasswort zu definieren, indem man den neuen Profile-Parameter PASSWORD_ROLLOVER_TIME (in Tagen) verwendet. Das alte und das neue Passwort bleiben dann im Zeitraum von PASSWORD_ROLLOVER_TIME gültig.
Hinweis: Gradual Database Password Rollover for Applications ist ein 21c Feature. Mit dem Release Update 19.12 steht es allerdings auch in Oracle Database 19c zur Verfügung. Mehr Informationen zu Release Update Features finden sich im New Features Guide im Kapitel New Features in 19c Release Updates.
Das folgende, einfache Beispiel zeigt die Funktionsweise.
Es geht um den Datenbank User APPS1, der ein neues Profile mit PASSWORD_ROLLOVER_TIME von 2 Tagen zugewiesen bekommt.
SQL> connect apps1/apps_orig@PDB1 Connected. -- Prüfen des Account Status SQL> select account_status from user_users; ACCOUNT_STATUS -------------------------------------------- OPEN
Nun wird das neue Profile angelegt und dem User APPS1 zugewiesen.
SQL> create profile apps1_rollover limit PASSWORD_ROLLOVER_TIME 2; Profile created. SQL> alter user apps1 profile apps1_rollover; User altered.
Zur Überprüfung können wir wieder DBA_PROFILES und DBA_USERS selektieren.
SQL> select resource_name, limit from dba_profiles where resource_type='PASSWORD' and profile='APPS1_ROLLOVER'; RESOURCE_NAME LIMIT ------------------------- -------------------- FAILED_LOGIN_ATTEMPTS DEFAULT PASSWORD_LIFE_TIME DEFAULT PASSWORD_REUSE_TIME DEFAULT PASSWORD_REUSE_MAX DEFAULT PASSWORD_VERIFY_FUNCTION DEFAULT PASSWORD_LOCK_TIME DEFAULT PASSWORD_GRACE_TIME DEFAULT INACTIVE_ACCOUNT_TIME DEFAULT PASSWORD_ROLLOVER_TIME 2 9 rows selected. SQL> select account_status from dba_users where username='APPS1'; ACCOUNT_STATUS ---------------------------------------------------------------------------- OPEN & IN ROLLOVER
Nun kann man sich 2 Tage mit beiden Passwörtern einloggen. In meinen Tests habe ich SQL Developer verwendet.

Hinweis: Beim Ausprobieren mit SQL*Plus im Oracle Cloud Datenbank Service gibt es noch einen internen Bug in SQL*Plus, der im nächsten RU mit 21.3 behoben sein wird.
Beide Passwörter können nun 2 Tage lang verwendet werden. Möchte man das Passwort vorzeitig auslaufen lassen, kann man den Passwort-Rollover-Zeitraum auch mit EXPIRE PASSWORD ROLLOVER PERIOD beenden. Der Benutzer muss dann bei der nächsten Anmeldung das neue Passwort angeben, da das alte Passwort abgelaufen ist,
SQL> ALTER USER APPS1 EXPIRE PASSWORD ROLLOVER PERIOD; User altered.
Wie man sehen kann, ist der ACCOUNT_STATUS wieder OPEN.
SQL> select account_status from dba_users where username='APPS1'; ACCOUNT_STATUS -------------------------------- OPEN
Und das Einloggen funktioniert nur noch mit dem neuen Passwort.
SQL> connect apps1/apps_new@PDB1 Connected. SQL> connect apps1/apps1_orig@pdb1 ERROR: ORA-01017: invalid username/password; logon denied Warning: You are no longer connected to ORACLE.
Fazit
Oracle User Profiles ist eine wichtige Technologie, wenn es um Passwort Sicherheit geht. Sie ist einfach zu verwenden und zu verwalten und wird ständig weiterentwickelt. Ein interessantes und sehr nützliches Feature ist sicherlich die Neuigkeit in 21c ein Passwort ohne Downtime ändern zu können. Ein Grund mehr sich einmal wieder mit den Passwort Sicherheits Mechanismen in der Oracle Datenbank zu beschäftigen. Viel Spaß beim Testen!
Weitere Informationen
- Security Guide
- dbi Services Blog Posting: Oracle 21c Security : Gradual Database Password Rollover
