2013-11-01 45 views
0

在oracle 11g中,我有一個包含應用程序所需的相關表的所有者模式。選擇對所有表的訪問

對於我的外部應用程序,我正在嘗試創建另一個用戶,該用戶應該在某些表上選擇訪問上述架構的用戶。 讓失主模式A和新架構B

create user B identified by blah; 
    grant connect to B; 

登錄到原來的模式中的後,我跑以下(用於演示我對所有表給選擇)

begin 
    FOR x IN (select * from user_tables) 
    LOOP 
    EXECUTE IMMEDIATE 'GRANT SELECT ON ' || x.table_name || ' TO some_role'; 
    END LOOP; 
    end; 

    grant some_role to B; 

如果我以用戶B登錄並執行查詢,如

select count(*) from A.some_table ; 

它的工作原理。但是,如果沒有創建公共同義詞,我有可能以下列方式授予 以便以用戶B身份登錄時執行以下操作?

select count(*) from some_table; 

感謝

回答

0

可以爲用戶B使用創建私有同義詞。 作爲用戶B,運行以下塊:

begin 
FOR t IN (SELECT * FROM role_tab_privs WHERE grantee = 'SOME_ROLE' and owner = 'A') 
LOOP 
    EXECUTE IMMEDIATE 'CREAETE SYNONYM ' || table_name || ' FOR A.' || table_name'; 
END LOOP; 
end; 
+0

,我得到空行。即使SELECT * FROM USER_TAB_PRIVS用戶B給出的空行 – cableload

+0

對不起,我在做它通過角色......所以選擇*來自role_tab_privs的作品! – cableload

+0

@cableload謝謝,由於某種原因沒有注意到角色問題。我相應地修改了我的答案。 – Mureinik

0

,如果你只是由用戶B擁有的表讀數據,您可以設置以下命令,然後運行SELECT表上,如果他們在用戶A模式:

alter session set current_schema=userB 

(記錄爲用戶A

然後下面兩個命令將相當於(具有相同的結果):

select ... from userB.TABLE1 

select ... from TABLE1 
0
GRANT SELECT ANY TABLE TO YOUR_USER_OR_ROL; 
當我運行上面的選擇爲用戶B