Oracle: изменение схемы в зависимости от роли - PullRequest
3 голосов
/ 01 октября 2011

Это сообщение описывает настройку триггера для изменения схемы при входе в систему. Есть ли способ проверить роль пользователя, чтобы увидеть, соответствует ли она определенной роли, а не самому имени пользователя?

Я пытался выполнить подзапрос user_role_privs в предложении when, но это не позволяет. Идеи?

UPDATE

Это то, что я использую согласно предложенному Яхией решению. Кажется, он не работает. Когда я вхожу в систему с пользователем с ролью, он все равно не распознает таблицу без имени схемы перед ней.

CREATE OR REPLACE TRIGGER db_logon
AFTER logon ON DATABASE
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count FROM user_role_privs WHERE granted_role = 'USER_ROLE' and username <> 'DEFAULT_SCHEMA';
    IF v_count > 0 THEN
        execute immediate 'ALTER SESSION SET CURRENT_SCHEMA = DEFAULT_SCHEMA';
    END IF;
END;

1 Ответ

3 голосов
/ 01 октября 2011

Да - отключить часть WHEN и динамически построить строку SQL внутри триггера:

CREATE OR REPLACE TRIGGER db_logon
AFTER logon ON DATABASE 

Используйте SELECT на USER_ROLE_PRIVS и сопоставьте все, что вы хотите от ROLE до SCHEMA.

Затем создайте строку SQL для EXECUTE IMMEDIATE, включая сопоставленный SCHEMA.

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