Zu Oracle

Bereich:
Versionsinfo:
PL/SQL, DBA, Security
9.2, 10.2, 11.
Erstellung:
Letzte Überarbeitung:
01/2005 MP
06/2009 EF
 Als PDF Downloaden!

Logon-Trigger

Logon-Trigger sind System-Trigger, die beim Anmelden eines Benutzers eine Aktion ausführen. Man könnte es mit der Autostart-Funktion von Windows vergleichen. Aber auch hier gilt: ein fehlerhafter Logon-Trigger kann zur Folge haben, dass sich die Benutzer nicht mehr an der Datenbank anmelden können. Glücklicherweise zünden Logon Trigger nicht für den Benutzer SYS, der dann in einer Notsituation den Trigger wieder löschen kann.

Beispiel 1: Wenn Scott sich anmeldet wird er wieder abgemeldet

CREATE OR REPLACE TRIGGER system.logon_check
  AFTER LOGON ON DATABASE
BEGIN
  IF sys.login_user = 'SCOTT' THEN
    RAISE_APPLICATION_ERROR(-20001,'Sorry Scott, heute nicht!');
  END IF;
END;
/

connect scott/tiger
ERROR:
ORA-00604: Fehler auf rekursiver SQL-Ebene 1
ORA-20001: Sorry Scott, heute nicht!
ORA-06512: in Zeile 3

Beispiel 2: Abhängig von der Dienstzeit werden Benutzer nicht in die DB gelassen

CREATE OR REPLACE TRIGGER system.logon_check
  AFTER LOGON ON DATABASE
BEGIN
  IF TO_NUMBER(to_char(sysdate,'HH24')) NOT BETWEEN 7 AND 17
     OR TO_CHAR(sysdate,'DAY') IN ('SA','SO') THEN
     RAISE_APPLICATION_ERROR
      (-20001,'Sorry, aber die Gewerkschaft (unter-)sagt ...!');
  END IF;
END;
/

Beispiel 3: Abhängig vom Terminal werden Benutzer wieder abgemeldet

CREATE OR REPLACE TRIGGER system.logon_check
  AFTER LOGON ON DATABASE
BEGIN
  IF SYS_CONTEXT('USERENV','TERMINAL') ='GOOFY'
    RAISE_APPLICATION_ERROR
    (-20001,'Sorry, aber dieses Terminal wird nur zum Spielen verwendet');
  END IF;
END;
/

Beispiel 4: Tracing beim Logon einschalten

CREATE OR REPLACE TRIGGER system.logon_check
  AFTER LOGON ON DATABASE
BEGIN
  EXECUTE IMMEDIATE 'ALTER SESSION SET sql_trace=true';
END;
/

Beispiel 5: Sort Area beim Logon einrichten

CREATE OR REPLACE TRIGGER system.logon_check
  AFTER LOGON ON DATABASE
BEGIN
  IF sys.login_user = 'scott' THEN
    EXECUTE IMMEDIATE 'ALTER SESSION SET sort_area_size=65636';
  END IF;
END;
/

 

Suche

Kontakt

Telefon:
  089 6228 6789-0

Telefon (noch gültig):
  089 679090-40

E-Mail Verteiler Monatstipps

Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.