2011-09-30 48 views
3

this post,它描述了在登錄時設置觸發器以更改架構。有沒有辦法檢查用戶的角色,看它是否與特定角色而不是用戶名本身相匹配?Oracle:根據角色更改架構

我試圖對when子句中的user_role_privs做一個子查詢,但它不允許這樣做。想法?

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; 

回答

3

是 - 溝WHEN部分,並建立動態的觸發器內SQL字符串:

CREATE OR REPLACE TRIGGER db_logon 
AFTER logon ON DATABASE 

使用SELECT上無論你從ROLESCHEMAUSER_ROLE_PRIVS和地圖。

然後爲EXECUTE IMMEDIATE構建一個SQL字符串,包括映射的SCHEMA

+0

一旦你說出來,這似乎很愚蠢明顯。我有一個問題讓它工作。使用我正在使用的內容更新帖子。 – MacAnthony

+0

它在我刪除if語句並且只是始終將其強制到模式時起作用。不過,看不清if語句有什麼問題。當我作爲用戶運行時,select count返回1。 – MacAnthony

+0

出於某種原因,即使整個查詢在以用戶身份登錄時工作,但我從where子句中刪除了AND用戶名<>'DEFAULT_SCHEMA'後,便得到了工作。考慮到它是固定的。謝謝 – MacAnthony