Tipps & Tricks: Januar 2010 Bereich: DBA Erstellung: 01/2010 MM Versionsinfo: 9.2, 10.2, 11.1 Letzte Überarbeitung: 01/2010 MM Das Wichtigste rund um Benutzer-Profile 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 Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 1 von 7 DEFAULT DEFAULT DEFAULT DEFAULT PASSWORD_LOCK_TIME PASSWORD_REUSE_MAX PASSWORD_REUSE_TIME PASSWORD_VERIFY_FUNCTION PASSWORD UNLIMITED PASSWORD UNLIMITED PASSWORD UNLIMITED 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 Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 2 von 7 DEFAULT DEFAULT DEFAULT DEFAULT DEFAULT DEFAULT DEFAULT DEFAULT DEFAULT DEFAULT MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE UNLIMITED MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE MONITORING_PROFILE WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF WKSYS_PROF LOGICAL_READS_PER_SESSION PRIVATE_SGA SESSIONS_PER_USER FAILED_LOGIN_ATTEMPTS PASSWORD_GRACE_TIME PASSWORD_LIFE_TIME PASSWORD_LOCK_TIME PASSWORD_REUSE_MAX PASSWORD_REUSE_TIME PASSWORD_VERIFY_FUNCTION COMPOSITE_LIMIT CONNECT_TIME CPU_PER_CALL CPU_PER_SESSION IDLE_TIME LOGICAL_READS_PER_CALL LOGICAL_READS_PER_SESSION PRIVATE_SGA SESSIONS_PER_USER FAILED_LOGIN_ATTEMPTS KERNEL UNLIMITED KERNEL UNLIMITED KERNEL UNLIMITED PASSWORD 10 PASSWORD 7 PASSWORD 180 PASSWORD 1 PASSWORD UNLIMITED PASSWORD UNLIMITED PASSWORD NULL KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT PASSWORD PASSWORD_GRACE_TIME PASSWORD_LIFE_TIME PASSWORD_LOCK_TIME PASSWORD_REUSE_MAX PASSWORD_REUSE_TIME PASSWORD_VERIFY_FUNCTION COMPOSITE_LIMIT CONNECT_TIME CPU_PER_CALL CPU_PER_SESSION IDLE_TIME LOGICAL_READS_PER_CALL LOGICAL_READS_PER_SESSION PRIVATE_SGA SESSIONS_PER_USER FAILED_LOGIN_ATTEMPTS PASSWORD_GRACE_TIME PASSWORD_LIFE_TIME PASSWORD_LOCK_TIME PASSWORD_REUSE_MAX PASSWORD_REUSE_TIME PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT PASSWORD DEFAULT PASSWORD DEFAULT PASSWORD DEFAULT PASSWORD DEFAULT PASSWORD DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT KERNEL DEFAULT PASSWORD UNLIMITED PASSWORD DEFAULT PASSWORD DEFAULT PASSWORD DEFAULT PASSWORD DEFAULT PASSWORD DEFAULT 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; Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 3 von 7 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 Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 4 von 7 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, Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 5 von 7 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 Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 6 von 7 / 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. Muniqsoft GmbH Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40 IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0 Seite 7 von 7