создать триггер для «Запретить любое другое соединение с базой данных, кроме пользователя, имеющего привилегию администратора БД» - PullRequest
0 голосов
/ 13 декабря 2018

Я хочу создать один триггер, но мне нужно создать триггер для этого

Не разрешать любое другое соединение с базой данных, кроме пользователя с DBA привилегией

1 Ответ

0 голосов
/ 13 декабря 2018

Правильный способ реализации такого ограничения - запустить

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, которая позволяет вам входить независимо отошибки, выдаваемые триггером входа в систему как отказоустойчивый.

...