2012-05-23 100 views
0

在Oracle中,MYTABLE所有者爲USER1並將權限分配給USER2。但在C#代碼中,USER2仍然無法訪問該表。oracle表權限

如果我使用USER1,主人,查詢在C#代碼本表中,它說:

不能執行查詢

GRANTEE      OWNER    TABLE_NAME  GRANTOR    PRIVILEGE        GRANTABLE HIERARCHY 
------------------------------ ------------------------------ ------------------------------ ------------------------------ ---------------------------------------- --------- --------- 
USER2      USER1    MYTABLE   USER1    DELETE         NO  NO   
USER2      USER1    MYTABLE   USER1    SELECT         NO  NO   
USER2      USER1    MYTABLE   USER1    UPDATE         NO  NO   

回答

1

當用戶2嘗試什麼是錯誤查詢表格? User2發出的確切查詢是什麼?

最常見的問題是User2未使用模式名稱限定表名。用戶2將,默認情況下,需要像做

SELECT * 
    FROM User1.MyTable 

如果你不想限定表名,你既可以創建一個User 1的MyTable的在用戶2的模式的代名詞

CREATE SYNONYM myTable 
    FOR User1.MyTable 

或你可以創建一個公共同義詞(公共同義詞是對所有用戶可見,雖然他們有特權沒有影響)

CREATE PUBLIC SYNONYM myTable 
    FOR User1.MyTable 

,或者你可以設置current_schema會話的壓腳提升連接

ALTER SESSION SET current_schema = User1 

如果你做任何的這些東西,用戶2將能夠運行查詢

SELECT * 
    FROM MyTable 

,並有MyTable決心User2.MyTable。私用同義詞是最小的佔位符 - 它僅適用於User2,僅適用於MyTable。公共同義詞意味着任何已被授予User1.MyTable特權的人都可以查詢它,而無需使用模式名稱限定表名。更改current_schema意味着該會話將來所有未限定的對象引用將在User1架構中解析,而不是當前用戶的架構。

+0

非常好,非常完整的答案。 –