Oracle:基于角色更改架构

时间:2011-09-30 21:39:21

标签: oracle triggers schema

this post描述了设置触发器以在登录时更改架构。有没有办法检查用户的角色,看它是否与特定角色匹配,而不是用户名本身?

我试图在when子句中对user_role_privs做一个子查询,但它不允许这样做。想法?

更新

根据Yahia建议的解决方案,这就是我所使用的。它似乎没有工作。当我向具有该角色的用户登录时,它仍然无法识别没有该模式名称的表。

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 个答案:

答案 0 :(得分:3)

是 - 抛弃WHEN部分并动态构建触发器内的SQL字符串:

CREATE OR REPLACE TRIGGER db_logon
AFTER logon ON DATABASE 

使用SELECT上的USER_ROLE_PRIVS,并将您想要的内容从ROLE映射到SCHEMA

然后为EXECUTE IMMEDIATE构建一个SQL字符串,包括映射的SCHEMA