有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;
答案 0 :(得分:3)
是 - 抛弃WHEN部分并动态构建触发器内的SQL字符串:
CREATE OR REPLACE TRIGGER db_logon
AFTER logon ON DATABASE
使用SELECT
上的USER_ROLE_PRIVS
,并将您想要的内容从ROLE
映射到SCHEMA
。
然后为EXECUTE IMMEDIATE
构建一个SQL字符串,包括映射的SCHEMA
。