Mit Hilfe von Benutzerprofilen können zwei Bereiche gesteuert werden. So gibt es zum einen eine Sammlung von Parametern, die die Lebensdauer, die Ablaufzeit sowie die Wiederverwendbarkeit von Kennwörtern und das Sperren von Accounts nach Eingabe falscher Passwörter regelt. Zum anderen – in der Praxis jedoch seltener eingesetzt – kann das Benutzerprofil Limitierungen für bestimmte Systemressourcen enthalten. Diese begrenzen zum Beispiel die maximal erlaubte Verbindungszeit einer Session, den Verbrauch an CPU oder die Anzahl an Blöcken, die innerhalb einer Session maximal gelesen werden dürfen.
Profile werden den einzelnen Benutzern einer Datenbank zugewiesen und gelten dann für dieses Benutzerkonto. Benutzerkonten können nur über ein einziges Profil verfügen. Das Zuweisen eines neuen Profils zu einem Benutzerkonto ersetzt alle früheren Profileinstellungen.
Oracle liefert ein DEFAULT-Profil mit, welches jedem Benutzer zugewiesen wird, der nicht explizit ein anderes Profil zugeordnet bekommt. Ein sehr wichtiger und gerne vergessener Aspekt des DEFAULT-Profils ist, dass das Kennwort eines Benutzers damit nach 180 Tagen abläuft.
Schon aus diesem Grund empfiehlt es sich, eigene Profile anzulegen und den Benutzern explizit zuzuweisen. Hierauf wird weiter unten noch eingegangen.
Mit folgender Abfrage können die Parameter (Spalte RESOURCE_NAME) ermittelt werden, die sich über Profile steuern lassen:
SQL> set lines 120 pages 200
SQL> col profile for a20
SQL> col limit for a15
SQL> SELECT * FROM DBA_PROFILES ORDER BY 1,3,2;
PROFILE RESOURCE_NAME RESOURCE LIMIT COM INH IMP
-------------------- ------------------------- -------- --------------- --- --- ---
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED NO NO NO
DEFAULT CONNECT_TIME KERNEL UNLIMITED NO NO NO
DEFAULT CPU_PER_CALL KERNEL UNLIMITED NO NO NO
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED NO NO NO
DEFAULT IDLE_TIME KERNEL UNLIMITED NO NO NO
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED NO NO NO
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED NO NO NO
DEFAULT PRIVATE_SGA KERNEL UNLIMITED NO NO NO
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED NO NO NO
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10 NO NO NO
DEFAULT INACTIVE_ACCOUNT_TIME PASSWORD UNLIMITED NO NO NO
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7 NO NO NO
DEFAULT PASSWORD_LIFE_TIME PASSWORD 180 NO NO NO
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1 NO NO NO
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED NO NO NO
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED NO NO NO
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL NO NO NO
ORA_STIG_PROFILE COMPOSITE_LIMIT KERNEL DEFAULT NO NO NO
ORA_STIG_PROFILE CONNECT_TIME KERNEL DEFAULT NO NO NO
ORA_STIG_PROFILE CPU_PER_CALL KERNEL DEFAULT NO NO NO
ORA_STIG_PROFILE CPU_PER_SESSION KERNEL DEFAULT NO NO NO
ORA_STIG_PROFILE IDLE_TIME KERNEL 15 NO NO NO
ORA_STIG_PROFILE LOGICAL_READS_PER_CALL KERNEL DEFAULT NO NO NO
ORA_STIG_PROFILE LOGICAL_READS_PER_SESSION KERNEL DEFAULT NO NO NO
ORA_STIG_PROFILE PRIVATE_SGA KERNEL DEFAULT NO NO NO
ORA_STIG_PROFILE SESSIONS_PER_USER KERNEL DEFAULT NO NO NO
ORA_STIG_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD 3 NO NO NO
ORA_STIG_PROFILE INACTIVE_ACCOUNT_TIME PASSWORD 35 NO NO NO
ORA_STIG_PROFILE PASSWORD_GRACE_TIME PASSWORD 5 NO NO NO
ORA_STIG_PROFILE PASSWORD_LIFE_TIME PASSWORD 60 NO NO NO
ORA_STIG_PROFILE PASSWORD_LOCK_TIME PASSWORD UNLIMITED NO NO NO
ORA_STIG_PROFILE PASSWORD_REUSE_MAX PASSWORD 10 NO NO NO
ORA_STIG_PROFILE PASSWORD_REUSE_TIME PASSWORD 365 NO NO NO
ORA_STIG_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD ORA12C_STIG_VER NO NO NO
IFY_FUNCTION
Im Folgenden gehen wir auf die Parameter vom Ressource-Typ „PASSWORD“ ein, denn diese werden in der Praxis am häufigsten genutzt. Für eine genaue Übersicht der KERNEL-Parameter sei hier auf die Oracle Dokumentation verwiesen.
PASSWORT_LIFE_TIME
Die PASSWORD_LIFE_TIME ist die Zeit in Tagen, die ein Passwort gültig ist. Bei einem Login nach dieser Zeit erhält der Benutzer folgende Fehlermeldung angezeigt:
ORA-28001: the password has expired
Der Benutzer erhält anschließend aber sofort die Möglichkeit, das Passwort zu ändern.
Der Account-Status des Benutzerkontos in der Datenbank ist in diesem Fall EXPIRED.
PASSWORD_GRACE_TIME
Gibt die Anzahl der Tage an, die einem Benutzer bleiben, um sein Kennwort zu ändern bevor es endgültig abläuft. Bei einem Login während dieser Zeit erhält der Benutzer folgende Warnung angezeigt:
ORA-28002: the password will expire within n days
Der Account-Status des Benutzerkontos in der Datenbank ist in diesem Fall EXPIRED(GRACE).
FAILED_LOGIN_ATTEMPTS
Über FAILED_LOGIN_ATTEMPTS wird gesteuert, wie oft ein falsches Passwort hintereinander eingegeben werden kann, bevor der Account gelockt wird. Wird zwischen den Versuchen das Passwort richtig eingegeben, geht die Zählung wieder bei null los.
Der Account-Status des Benutzerkontos in der Datenbank ist nach Überschreiten der Anzahl an ungültigen Login-Versuche LOCKED.
PASSWORD_LOCK_TIME
Wird eine PASSWORD_LOCK_TIME mitgegeben, wird der Account jedoch nur übergangsweise für die entsprechende Anzahl an Tagen gelockt. Nach Ende dieser Zeit wird der Account automatisch wieder entsperrt. Ohne diesen Parameter muss der Benutzer-Account händisch entsperrt werden. Der Account-Status des Benutzerkontos in der Datenbank ist während dieser Phase LOCKED (TIMED).
PASSWORD_VERIFY_FUNCTION:
Die PASSWORD_VERIFY_FUNCTION stellt sicher, dass die Benutzerkennwörter die erforderliche Komplexität besitzen. Oracle liefert selbst Funktionen hierfür mit, u. a. die ora12c_verify_function. Diese Funktion kann mit dem Script $ORACLE_HOME/rdbms/admin/utlpwdmg.sql installiert werden.
Alternativ können auch eigene Passwortfunktionen - am einfachsten basierend auf dieser Oracle Funktion - erstellt werden.
PASSWORD_REUSE_TIME
Begrenzt die Anzahl an Tagen, bevor ein Kennwort nach dessen Ablauf wiederverwendet werden kann. Der Wert UNLIMITED führt hier zu keinen Einschränkungen.
PASSWORD_REUSE_MAX
Gibt an, wie oft ein Kennwort geändert werden muss, bevor es erneut verwendet werden kann. Der Wert UNLIMITED führt hier zu keinen Einschränkungen.
Mit folgendem Befehl wird ein Profil ohne große Einschränkungen erstellt - wird nur empfohlen für Applikations-Benutzer:
CREATE PROFILE APP_PROFILE LIMIT
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED
FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_LOCK_TIME 1
PASSWORD_VERIFY_FUNCTION f_ora_pwd_verify_app;
Alle hierbei nicht explizit angegebenen Parameter werden vom DEFAULT-Profil übernommen.
Für Applikations-Benutzer wird ein Profil mit der Passwortgültigkeit UNLIMITED erstellt, so dass das Passwort nicht mehr ablaufen kann. Die Komplexität des Passwords wird über die Funktion SYS. f_ora_pwd_verify_app gesteuert.
Mit folgendem Befehl wird ein Profil für normale Benutzer erstellt:
CREATE PROFILE USER_PROFILE LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 7
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1
PASSWORD_VERIFY_FUNCTION f_ora_pwd_verify_user;
Für normale Benutzer wird ein Profil mit einer Passwortgültigkeit zwischen 30 und 180 Tagen erstellt, hier 90 Tage. Der Account wird für einen Tag gesperrt, falls es zu mehr als 5 fehlerhaften Login-Versuchen kommt. Die Komplexität des Passwords wird über die Funktion SYS. f_ora_pwd_verify_app gesteuert.
Die Zuweisung eines Profils zu einem Benutzer erfolgt mit CREATE USER oder ALTER USER.
SQL> CREATE USER MUNIQSOFT_APP … PROFILE APP_PROFILE;
oder
SQL> ALTER USER MUNIQSOFT_USER PROFILE USER_PROFILE;
So ermitteln sie, welcher Benutzer aktuell welches Profil besitzt:
SQL> col username for a20
SQL> col account_status for a20
SQL> col profile for a20
SQL> SELECT username, account_status, expiry_date, profile FROM dba_users where username like 'MUNIQSOFT%';
USERNAME ACCOUNT_STATUS EXPIRY_D PROFILE
-------------------- -------------------- -------- --------------------
MUNIQSOFT_APP OPEN APP_PROFILE
MUNIQSOFT_USER OPEN 24.12.20 USER_PROFILE
Das Ändern von Profilen erfolgt mittels ALTER PROFILE:
SQL> ALTER PROFILE APP_PROFILE LIMIT PASSWORD_LIFE_TIME 1;
Alle nicht genannten Parameter behalten ihren aktuellen Wert bei.
Das Löschen von Profilen erfolgt mittels DROP PROFILE, und kann nur mittels CASCADE gelöscht werden, sollte es aktuell noch Benutzern zugewiesen sein:
SQL> DROP PROFILE APP_PROFILE;
ORA-02382: Profil APP_PROFILE hat zugewiesene Benutzer, kann nicht ohne CASCADE gelöscht werden
Dann eben so:
SQL> DROP PROFILE APP_PROFILE CASCADE;
Profile APP_PROFILE gelöscht.
Besser als mit der Option CASCADE ist es natürlich, den Benutzern vor dem Löschen des alten Profils explizit ein neues zuzuweisen.
Alle Benutzer, die das gelöschte Profil zugewiesen hatten, erhalten nun automatisch das DEFAULT-Profil.
SQL> SELECT username, account_status, expiry_date, profile FROM dba_users where username like 'MUNIQSOFT%';
USERNAME ACCOUNT_STATUS EXPIRY_D PROFILE
-------------------- -------------------- -------- --------------------
MUNIQSOFT_APP OPEN DEFAULT
MUNIQSOFT_USER OPEN 24.12.20 USER_PROFILE
Soll die Verwendung von System-Ressourcen ebenfalls über die Profile limitiert werden, muss zusätzlich der INIT-Parameter RESOUCRE_LIMIT auf TRUE gesetzt werden:
SQL> SHOW PARAMETER RESOURCE_LIMIT;
NAME TYPE VALUE
------------------- --------------- ------------
resource_limit boolean FALSE
SQL> ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;
SQL> SHOW PARAMETER RESOURCE_LIMIT;
NAME TYPE VALUE
------------------- --------------- ------------
resource_limit boolean TRUE
Für die Steuerung von Account/Passwortlaufzeiten oder ähnliches ist dieser Schritt nicht notwendig.
In Unternehmen werden überwiegend die Passwortrichtlinien mit Profilen gesteuert. Die Limitierung von Systemressourcen kommt zunehmend vor, spielt aber nach unseren Erfahurngen eine nicht ganz so große Rolle.
Es ist Best Practice, mindestens drei Arten von Profilen einzurichten. Diese sind:
Profil für technische User/Applikationsuser:
Profil für Datenbankadministratoren und weitere Admins:
Profil für die normalen Benutzer (personalisierte Accounts):
Wichtig ist auch noch der folgende Punkt:
Die beiden Profilparameter password_reuse_max und password_reuse_time erlauben mit dem Default UNLIMITED die erneute Verwendung desselben Passworts zu jeder Zeit. Zur Sicherheit empfehlen wir einen oder beide Parameter ungleich UNLIMITED zu setzen.
Sollten Sie Fragen hierzu haben, wenden Sie sich gern an uns.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.