LOGON-Trigger braucht mehr Rechte

Jahrelang konnte man LOGON-Trigger für einzelne Oracle-User anlegen und "plötzlich" geht das nicht mehr, sondern die Datenbank lehnt die Anlage des Triggers mit der folgenden Meldung ab:

>> CREATE OR REPLACE TRIGGER ... AFTER LOGON ON DATABASE...
Error at line 1
ORA-01031: insufficient privileges

Plötzlich ist nun auch schon etwas in die Jahre gekommen und lässt sich ziemlich genau auf die Einführung der Oracle Releases 12cR2 (12.2.0.1) zurückführen. Seitdem kann man auch als SYS-User für andere User keinen Datenbank-Trigger anlegen, wenn der entsprechende User nicht ebenfalls eine direkte Berechtigung für das Anlagen der Datenbank-Trigger erhalten hat.

Die Lösung liegt damit auf der Hand: Berechtigung vergeben. Nachdem man das Gewünschte Ergebnis erreicht hat, kann man die Berechtigung auch wieder entziehen, damit der User damit keine Dummheiten anstellt. Ausgeführt werden die eingerichteten Trigger trotzdem.

-- Berechtigung für das managen von Datenbank-Triggern dem 
-- Benutzer TARGET_USER zuweisen
GRANT ADMINISTER DATABASE TRIGGER TO TARGET_USER;

-- Logon Trigger für den Benutzer TARGET_USER anlegen
-- Hier: NLS_LENGHT_SEMANTIC auf CHAR umstellen.
CREATE OR REPLACE TRIGGER TARGET_USER.LOGON AFTER LOGON ON DATABASE
DECLARE
   username VARCHAR2(30);
BEGIN
   username := SYS_CONTEXT('USERENV','SESSION_USER');
   IF username = 'TARGET_USER' then
      EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_LENGTH_SEMANTICS=CHAR';
   END IF;
EXCEPTION
   WHEN OTHERS THEN NULL;
END;
/

-- Berechtigung für das managen von Datenbank-Triggern dem 
-- Benutzer TARGET_USER wieder entziehen
REVOKE ADMINISTER DATABASE TRIGGER FROM TARGET_USER;