Das Wichtigste rund um Benutzer-Profile

04.
Januar
2010
Veröffentlicht von: Matthias Meyer

Haben Sie sich als Datenbank-Administrator schon einmal eine der folgenden Fragen gestellt?

Haben Sie sich als Datenbank-Administrator schon einmal eine der folgenden Fragen gestellt?

  • Wie kann ich die Anzahl an gleichzeitigen Sessions eines Benutzers einschränken?
  • Wie kann ich verhindern, dass die Benutzer unbegrenzt lange eine Verbindung zur Datenbank haben (, aber nichts mehr tun)?
  • Gibt es eine Möglichkeit die erforderliche Arbeitslast durch Benutzerzugriffe zu limitieren?
  • Wie kann ich die Laufzeit der Benutzer-Passwörter begrenzen?
  • Kann ich die Oracle-Passwörter sicherer machen?

Falls Sie eine oder mehrere Fragen mit ja beantworten können und bislang noch keine wirkliche Antwort dafür gefunden haben, dann haben wir etwas interessantes für Sie.

Der folgende Beitrag erläutert die Bedeutung und Verwaltung von Benutzer-Profilen und verdeutlicht die einzelnen Parameter, die darüber gesetzt werden können.


Der Profil-Begriff

Mit einem Benutzer-Profil können Sie die Passwortverwaltung und die Ressourcennutzung der Benutzer steuern bzw. limitieren. Dafür stehen insgesamt 16 Parameter zur Verfügung, die innerhalb einer CREATE PROFILE oder ALTER PROFILE-Anweisung definiert werden können. In jeder Oracle Datenbank gibt es ein Profil namens DEFAULT, dass standardmäßig jedem Benutzer zugewiesen wird.

Eine Übersicht über die vorhandenen Profile und deren Begrenzungen erhalten Sie über:

SELECT * FROM dba_profiles
ORDER BY profile, resource_type, resource_name;


-- Standard-Ausgabe zu 9i

PROFILE              RESOURCE_NAME                    RESOURCE LIMIT
-------------------- -------------------------------- -------- ----------
DEFAULT              COMPOSITE_LIMIT                  KERNEL   UNLIMITED
DEFAULT              CONNECT_TIME                     KERNEL   UNLIMITED
DEFAULT              CPU_PER_CALL                     KERNEL   UNLIMITED
DEFAULT              CPU_PER_SESSION                  KERNEL   UNLIMITED
DEFAULT              IDLE_TIME                        KERNEL   UNLIMITED
DEFAULT              LOGICAL_READS_PER_CALL           KERNEL   UNLIMITED
DEFAULT              LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITED
DEFAULT              PRIVATE_SGA                      KERNEL   UNLIMITED
DEFAULT              SESSIONS_PER_USER                KERNEL   UNLIMITED
DEFAULT              FAILED_LOGIN_ATTEMPTS            PASSWORD UNLIMITED
DEFAULT              PASSWORD_GRACE_TIME              PASSWORD UNLIMITED
DEFAULT              PASSWORD_LIFE_TIME               PASSWORD UNLIMITED
DEFAULT              PASSWORD_LOCK_TIME               PASSWORD UNLIMITED
DEFAULT              PASSWORD_REUSE_MAX               PASSWORD UNLIMITED
DEFAULT              PASSWORD_REUSE_TIME              PASSWORD UNLIMITED
DEFAULT              PASSWORD_VERIFY_FUNCTION         PASSWORD NULL


-- Standard-Ausgabe zu 10g

PROFILE              RESOURCE_NAME                    RESOURCE LIMIT
-------------------- -------------------------------- -------- ----------
DEFAULT              COMPOSITE_LIMIT                  KERNEL   UNLIMITED
DEFAULT              CONNECT_TIME                     KERNEL   UNLIMITED
DEFAULT              CPU_PER_CALL                     KERNEL   UNLIMITED
DEFAULT              CPU_PER_SESSION                  KERNEL   UNLIMITED
DEFAULT              IDLE_TIME                        KERNEL   UNLIMITED
DEFAULT              LOGICAL_READS_PER_CALL           KERNEL   UNLIMITED
DEFAULT              LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITED
DEFAULT              PRIVATE_SGA                      KERNEL   UNLIMITED
DEFAULT              SESSIONS_PER_USER                KERNEL   UNLIMITED
DEFAULT              FAILED_LOGIN_ATTEMPTS            PASSWORD 10
DEFAULT              PASSWORD_GRACE_TIME              PASSWORD UNLIMITED
DEFAULT              PASSWORD_LIFE_TIME               PASSWORD UNLIMITED
DEFAULT              PASSWORD_LOCK_TIME               PASSWORD UNLIMITED
DEFAULT              PASSWORD_REUSE_MAX               PASSWORD UNLIMITED
DEFAULT              PASSWORD_REUSE_TIME              PASSWORD UNLIMITED
DEFAULT              PASSWORD_VERIFY_FUNCTION         PASSWORD NULL
MONITORING_PROFILE   COMPOSITE_LIMIT                  KERNEL   DEFAULT
MONITORING_PROFILE   CONNECT_TIME                     KERNEL   DEFAULT
MONITORING_PROFILE   CPU_PER_CALL                     KERNEL   DEFAULT
MONITORING_PROFILE   CPU_PER_SESSION                  KERNEL   DEFAULT
MONITORING_PROFILE   IDLE_TIME                        KERNEL   DEFAULT
MONITORING_PROFILE   LOGICAL_READS_PER_CALL           KERNEL   DEFAULT
MONITORING_PROFILE   LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT
MONITORING_PROFILE   PRIVATE_SGA                      KERNEL   DEFAULT
MONITORING_PROFILE   SESSIONS_PER_USER                KERNEL   DEFAULT
MONITORING_PROFILE   FAILED_LOGIN_ATTEMPTS            PASSWORD UNLIMITED
MONITORING_PROFILE   PASSWORD_GRACE_TIME              PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_LIFE_TIME               PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_LOCK_TIME               PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_REUSE_MAX               PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_REUSE_TIME              PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_VERIFY_FUNCTION         PASSWORD DEFAULT


-- Standard-Ausgabe zu 11g

PROFILE              RESOURCE_NAME                    RESOURCE LIMIT
-------------------- -------------------------------- -------- ----------
DEFAULT              COMPOSITE_LIMIT                  KERNEL   UNLIMITED
DEFAULT              CONNECT_TIME                     KERNEL   UNLIMITED
DEFAULT              CPU_PER_CALL                     KERNEL   UNLIMITED
DEFAULT              CPU_PER_SESSION                  KERNEL   UNLIMITED
DEFAULT              IDLE_TIME                        KERNEL   UNLIMITED
DEFAULT              LOGICAL_READS_PER_CALL           KERNEL   UNLIMITED
DEFAULT              LOGICAL_READS_PER_SESSION        KERNEL   UNLIMITED
DEFAULT              PRIVATE_SGA                      KERNEL   UNLIMITED
DEFAULT              SESSIONS_PER_USER                KERNEL   UNLIMITED
DEFAULT              FAILED_LOGIN_ATTEMPTS            PASSWORD 10
DEFAULT              PASSWORD_GRACE_TIME              PASSWORD 7
DEFAULT              PASSWORD_LIFE_TIME               PASSWORD 180
DEFAULT              PASSWORD_LOCK_TIME               PASSWORD 1
DEFAULT              PASSWORD_REUSE_MAX               PASSWORD UNLIMITED
DEFAULT              PASSWORD_REUSE_TIME              PASSWORD UNLIMITED
DEFAULT              PASSWORD_VERIFY_FUNCTION         PASSWORD NULL
MONITORING_PROFILE   COMPOSITE_LIMIT                  KERNEL   DEFAULT
MONITORING_PROFILE   CONNECT_TIME                     KERNEL   DEFAULT
MONITORING_PROFILE   CPU_PER_CALL                     KERNEL   DEFAULT
MONITORING_PROFILE   CPU_PER_SESSION                  KERNEL   DEFAULT
MONITORING_PROFILE   IDLE_TIME                        KERNEL   DEFAULT
MONITORING_PROFILE   LOGICAL_READS_PER_CALL           KERNEL   DEFAULT
MONITORING_PROFILE   LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT
MONITORING_PROFILE   PRIVATE_SGA                      KERNEL   DEFAULT
MONITORING_PROFILE   SESSIONS_PER_USER                KERNEL   DEFAULT
MONITORING_PROFILE   FAILED_LOGIN_ATTEMPTS            PASSWORD
UNLIMITED
MONITORING_PROFILE   PASSWORD_GRACE_TIME              PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_LIFE_TIME               PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_LOCK_TIME               PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_REUSE_MAX               PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_REUSE_TIME              PASSWORD DEFAULT
MONITORING_PROFILE   PASSWORD_VERIFY_FUNCTION         PASSWORD DEFAULT
WKSYS_PROF           COMPOSITE_LIMIT                  KERNEL   DEFAULT
WKSYS_PROF           CONNECT_TIME                     KERNEL   DEFAULT
WKSYS_PROF           CPU_PER_CALL                     KERNEL   DEFAULT
WKSYS_PROF           CPU_PER_SESSION                  KERNEL   DEFAULT
WKSYS_PROF           IDLE_TIME                        KERNEL   DEFAULT
WKSYS_PROF           LOGICAL_READS_PER_CALL           KERNEL   DEFAULT
WKSYS_PROF           LOGICAL_READS_PER_SESSION        KERNEL   DEFAULT
WKSYS_PROF           PRIVATE_SGA                      KERNEL   DEFAULT
WKSYS_PROF           SESSIONS_PER_USER                KERNEL   DEFAULT
WKSYS_PROF           FAILED_LOGIN_ATTEMPTS            PASSWORD UNLIMITED
WKSYS_PROF           PASSWORD_GRACE_TIME              PASSWORD DEFAULT
WKSYS_PROF           PASSWORD_LIFE_TIME               PASSWORD DEFAULT
WKSYS_PROF           PASSWORD_LOCK_TIME               PASSWORD DEFAULT
WKSYS_PROF           PASSWORD_REUSE_MAX               PASSWORD DEFAULT
WKSYS_PROF           PASSWORD_REUSE_TIME              PASSWORD DEFAULT
WKSYS_PROF           PASSWORD_VERIFY_FUNCTION         PASSWORD DEFAULT


Ab Version 10g wird bei einer Standard-Installation ein zweites Profil mit dem Namen MONITORING_PROFILE erzeugt und dem Benutzer DBSNMP zugewiesen.

Ab Version 11g kommt noch das Profil WKSYS_PROF dazu, das der Benutzer WKSYS erhält.

Welcher Benutzer welches Profil bekommen hat, ermitteln Sie über:

SELECT username, user_id, profile FROM dba_users;


Die Ressourcen-Parameter eines Profils

SESSIONS_PER_USER

Limitiert die Anzahl an gleichzeitig geöffneten Sessions eines Benutzers. Bei Überschreiten erhält man folgenden Fehler beim Anmeldeversuch:

ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit


CPU_PER_SESSION

Limitiert die CPU-Zeit einer einzelnen Session in hundertstel Sekunden. Bei Überschreiten beendet Oracle das Statement bzw. rollt es zurück, meldet den Benutzer ab und gibt die folgende Fehlermeldung aus:

ORA-02392: exceeded session limit on CPU usage, you are being logged off


CPU_PER_CALL

Limitiert die CPU-Zeit eines einzelnen Aufrufs (eines Parse-, Execute- oder Fetch-Vorgangs) in hundertstel Sekunden. Bei Überschreiten beendet Oracle nur dieses Statement bzw. rollt es zurück und gibt folgeden Fehler aus (die vorangegangenen Befehle bleiben davon unberührt):

ORA-02393: exceeded call limit on CPU usage


CONNECT_TIME

Limitiert die gesamte Verbindungszeit einer Session in Minuten. Wird die Grenze überschritten, wird eine offene Transaktion zurückgerollt, der Benutzer abgemeldet und es kommt zu folgendem Fehler:

ORA-02399: exceeded maximum connect time, you are being logged off


IDLE_TIME

Limitiert die zusammenhängende inaktive Verbindungszeit (Leerlaufzeit) innerhalb einer Session in Minuten. Langläufer sind davon nicht betroffen. Wird die Grenze überschritten, wird eine offene Transaktion zurückgerollt, der Benutzer abgemeldet und es kommt zu folgendem Fehler:

ORA-02396: exceeded maximum idle time, please connect again


LOGICAL_READS_PER_SESSION

Limitiert die Gesamtanzahl von Datenblock-Lesezugriffen in einer Sitzung. Dazu gehören Blocklesezugriffe vom Speicher und der Platte. Bei Überschreiten beendet Oracle das Statement bzw. rollt es zurück, meldet den Benutzer ab und gibt die folgende Fehlermeldung aus:

ORA-02394: exceeded session limit on IO usage, you are being logged OFF


LOGICAL_READS_PER_CALL

Limitiert die Höchstzahl von Datenblock-Lesezugriffen für einen Aufruf (Parse-, Execute- oder Fetch-Vorgang) zur Verarbeitung einer SQL-Anweisung. Bei Überschreiten beendet Oracle nur dieses Statement bzw. rollt es zurück und gibt folgeden Fehler aus (die vorangegangenen Befehle bleiben davon unberührt):

ORA-02395: exceeded call limit on IO usage


PRIVATE_SGA

Limitiert die allokierbare Größe einer einzelnen Session im Shared Pool der SGA in Bytes, Kilo- oder Megabytes. Dies gilt allerdings nur für Shared Server Verbindungen. Bei Überschreiten beendet Oracle das Statement bzw. rollt es zurück, meldet den Benutzer ab und gibt die folgende Fehlermeldung aus:

ORA-02397: exceeded PRIVATE_SGA limit, you are being logged off


COMPOSITE_LIMIT

Limitiert die gesamten Ressourcenkosten für eine Sitzung. Die Kosten für eine Sitzung entsprechen der gewichteten Summe von CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION, and PRIVATE_SGA. Mit dem ALTER RESOURCE COST Befehl lässt sich die Gewichtung verändern.

Beispiel

ALTER RESOURCE COST
   CPU_PER_SESSION 200
   CONNECT_TIME      2;

Damit ergibt sich folgende Kostenformel für eine Sitzung

cost = (200 * CPU_PER_SESSION) + (2 * CONNECT_TIME)

Die Werte für CPU_PER_SESSION und CONNECT_TIME werden dabei aus dem Benutzer-Profil für die laufende Session übernommen. Ist einem Benutzer über sein Profil ein COMPOSITE_LIMIT-Wert von 1000 zugewiesen worden, dann würde beispielsweise eine CPU Zeit von 0,05 und eine Laufzeit von 126 Minuten dieses Limit übersteigen. Bei Überschreiten beendet Oracle das Statement bzw. rollt es zurück, meldet den Benutzer ab und gibt die folgende Fehlermeldung aus:

ORA-02390: exceeded COMPOSITE_LIMIT, you are being logged off


Die Passwort-Parameter eines Profils

FAILED_LOGIN_ATTEMPTS

Limitiert die Anzahl an nicht erfolgreichen Anmeldeversuchen, danach wird der Account gesperrt.


PASSWORD_LOCK_TIME

Gibt die Anzahl an Tagen an, die der Account nach Erreichen der FAILED_LOGIN_ATTEMPTS-Grenze gesperrt ist.


PASSWORD_LIFE_TIME

Begrenzt die Laufzeit eines Passworts in Tagen.

ORA-28001: the password has expired

Sollte PASSWORD_GRACE_TIME ebenfalls gesetzt sein, läuft das Passwort erst ab, falls es nicht innerhalb der Verlängerungsfrist geändert wird.


PASSWORD_GRACE_TIME

Bestimmt die Anzahl an Tagen der Verlängerungsfrist. Innerhalb dieser Frist ist die Anmeldung weiterhin erlaubt, der Benutzer erhält aber eine Warnung:

ORA-28002: the password will expire within 7 days


PASSWORD_VERIFY_FUNCTION

Ermöglicht die Verwendung einer PL/SQL-Routine als Komplexitätsanforderung für ein zulässiges Kennwort. Diese Routine muss lokal zur Ausführung auf der Datenbank verfügbar sein, für die dieses Profil gilt.

Oracle stellt ein Standardskript (%ORACLE_HOME%\rdbms\admin\utlpwdmg.sql) bereit. Sie können jedoch auch eine eigene Routine erstellen oder eine Software von einem anderen Hersteller als Alternative verwenden. Die Routine zur Überprüfung des Kennworts muss SYS gehören.


PASSWORD_REUSE_TIME

Begrenzt die Anzahl an Tagen, bevor ein Kennwort nach dem Ablauf wiederverwendet werden kann.


PASSWORD_REUSE_MAX

Gibt an, wie oft ein Kennwort geändert werden muss, bevor es erneut verwendet werden kann. 

Die letzten beiden Parameter müssen immer in Kombination gesetzt werden, ansonsten kann es sein, dass ein Passwort überhaupt nicht mehr verwendet werden kann.

 

Beispiele zu Profilen

Erstellung eines Profils:

CREATE PROFILE my_profile LIMIT
  PASSWORD_REUSE_MAX       10
  PASSWORD_REUSE_TIME      30
  PASSWORD_LIFE_TIME       60
  PASSWORD_GRACE_TIME      10
  PASSWORD_LOCK_TIME       1/1440
  PASSWORD_VERIFY_FUNCTION verify_function
/

CREATE PROFILE app_profile LIMIT
  SESSIONS_PER_USER          UNLIMITED
  CPU_PER_SESSION            UNLIMITED
  CPU_PER_CALL               6000
  IDLE_TIME                  20
  LOGICAL_READS_PER_SESSION  DEFAULT
  LOGICAL_READS_PER_CALL     1000
  PRIVATE_SGA                3M
  COMPOSITE_LIMIT            5000000
/


Änderung eines Profils:

ALTER PROFILE my_profile LIMIT
  PASSWORD_LIFE_TIME 60
  PASSWORD_GRACE_TIME 10
  FAILED_LOGIN_ATTEMPTS 3
  PASSWORD_LOCK_TIME 1/1440
/

Löschen eines Profils:

DROP PROFILE app_profile;

Zuweisen eines Profils:

ALTER USER scott PROFILE my_profile;

 

Hinweise und Tipps zu Profilen

Wird ein Profil gelöscht, das noch einem Benutzer zugewiesen ist, dann erhält dieser automatisch das DEFAULT-Profil.

Werden beim Erstellen eines Profils nicht alle Parameter übergeben, bekommen diese die Einstellung des DEFAULT-Profils.

Damit die Ressourcen-Einschränkungen eines Profil greifen, muss noch der SPFILE-Parameter RESOURCE_LIMIT auf TRUE gesetzt werden. Die Passwortverwaltung ist davon nicht betroffen.

ALTER SYSTEM SET resource_limit = true;

Ab Version 11g wird bei den Passwörtern standardmäßig Groß- und Kleinschreibung unterschieden (case-sensitive). Wollen Sie dies wieder unterdrücken, so ist der SPFILE-Parameter SEC_CASE_SENSITIVE_LOGON auf FALSE zu setzen:

ALTER SYSTEM SET sec_case_sensitive_logon=false;

Dieser Parameter ist auch für folgendes Problem verantwortlich:

Sie wollen über SQL*Plus (Version 10g) auf eine Datenbank (Version 11g) zugreifen und werden bei der Anmeldung aufgefordert Ihr Passwort zu ändern:

conn scott/tiger@o11g
ERROR:
ORA-28001: the password has expired

Kennwort für scott wird geändert
Neues Kennwort: *****
Neues Kennwort erneut eingeben: *****
ERROR:
ORA-01017: invalid username/password; logon denied

Kennwort unverändert

Die Passwortänderung ist nur über SQL*Plus der Version 11g möglich oder Sie setzen wieder den Parameter SEC_CASE_SENSITIVE_LOGON auf FALSE.

Benutzerverwaltung DBA

Jede Menge Know-how für Sie!

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.