Правильный способ реализации такого ограничения - запустить
ALTER SYSTEM ENABLE RESTRICTED SESSION;
, который не позволяет подключаться к базе данных не-администраторам баз данных.
Но в качестве упражнения необходимо реализовать триггеррешение может быть таким:
CREATE OR REPLACE TRIGGER T_LOGON
AFTER LOGON ON DATABASE
BEGIN
IF not DBMS_SESSION.IS_ROLE_ENABLED('DBA') THEN
raise_application_error(-20001, 'You are not permitted to logon');
end if;
END;
/
На самом деле вы можете сделать его еще короче:
CREATE OR REPLACE TRIGGER T_LOGON
AFTER LOGON ON DATABASE
BEGIN
raise_application_error(-20001, 'You are not permitted to logon');
END;
/
Потому что как DBA
у вас есть привилегия ADMINISTER DATABASE TRIGGER
, которая позволяет вам входить независимо отошибки, выдаваемые триггером входа в систему как отказоустойчивый.