Я хочу использовать процедуру lift_application_error, чтобы остановить процесс входа в систему.
Я написал триггер, который проверяет строку TERMINAL, если она верна (я знаю, что это не совсем безопасно, но сначала этого достаточно)
Таким образом, триггер работает нормально и делает то, что я хочу, но поднять lift_application_error вызывает откат и отправляет не исключение, которое я хочу. Когда я захожу в БД с моим Приложением, Raise_application_error не останавливает приложение.
Первый вопрос: это правильный путь, чтобы остановить вход в БД с неправильным приложением?
Второй вопрос: если да, то что не так?
create or replace
TRIGGER after_logon_on_database
AFTER LOGON ON DATABASE
BEGIN
IF sys_context('USERENV', 'TERMINAL')='IAS' THEN
INSERT INTO event_log
(event_date, event_time, username, event_case, event_comment)
VALUES
(SYSDATE, to_char(sysdate, 'hh24:mi:ss'), USER, 'LOGON-SUCCESS', sys_context('USERENV', 'TERMINAL'));
ELSE
INSERT INTO event_log
(event_date, event_time, username, event_case, event_comment)
VALUES
(SYSDATE, to_char(sysdate, 'hh24:mi:ss'), USER, 'LOGON-FAILURE', sys_context('USERENV', 'TERMINAL'));
RAISE_APPLICATION_ERROR(-20001, 'Access denied!');
END IF;
END after_logon_on_database;