Запуск базы данных Oracle connect - PullRequest
0 голосов
/ 21 мая 2018

Как я могу сделать триггер, когда пользователь подключается к базе данных, чтобы проверить, подключена ли пользовательская Система в данный момент.Верно?Затем сообщение об ошибке и пользователь не подключается к базе данных.

Спасибо, ребята.

1 Ответ

0 голосов
/ 21 мая 2018

Во-первых, я хочу отметить, что похоже, что вы пытаетесь воссоздать функциональность команды ALTER SYSTEM ENABLE RESTRICTED SESSION.Вы можете использовать это вместо этого.

На тему вашего вопроса есть простой ответ, но он не очень хорош.

CREATE OR REPLACE TRIGGER logon_system_maintenance
AFTER LOGON on DATABASE
IS
    system_is_connected varchar2(1) := 'N';
BEGIN
    select 'Y' into system_is_connected
    from v$session 
    where username = 'SYSTEM' and status = 'ACTIVE';

    -- this will not prevent users with ADMINISTER DATABASE TRIGGER privilege from connecting
    RAISE_APPLICATION_ERROR (-20001, 'SYSTEM user is performing maintenance, please try again later');

EXCEPTION
    WHEN NO_DATA_FOUND THEN
        null; -- system not connected, OK
    WHEN OTHERS THEN
        null; -- probably the user doesn't have permission to view V$SESSION! 
        -- should they be able to connect, or not?
END;
/ 

Проблема здесь в том, чточтобы проверить, подключен ли SYSTEM, пользователь, подключающийся, должен иметь возможность просматривать представление V $ SESSION, что означает, что ему нужна роль SELECT_CATALOG_ROLE.Вероятно, большинство ваших пользователей не имеют этой роли, что означает, что у них нет разрешения даже проверять, подключена СИСТЕМА или нет!

По моему опыту, большинство приложений создают таблицу для хранения различных системных параметров (например, MY_PARAM_TABLE) и добавляют параметр, который контролирует, могут ли пользователи входить в систему или нет (например, SYSTEM_MAINTENANCE = 'N').Затем, когда вы входите в систему как SYSTEM, вы устанавливаете этот флаг на Y, и триггер проверяет эту таблицу (к которой должны иметь доступ все пользователи) и запрещает доступ, пока вы не установите ее обратно на N.

Также сохраняйтеИмейте в виду, что вы не можете помешать пользователям DBA регистрироваться таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...