oracle表的权限

时间:2012-05-23 21:11:15

标签: c# oracle

在Oracle中,MYTABLE所有者为USER1并为USER2分配权限。但是在C#代码中,USER2仍然无法访问该表。

如果我使用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 个答案:

答案 0 :(得分:1)

User2尝试查询表时出现的错误是什么? User2发出的确切查询是什么?

最常见的问题是User2没有使用架构名称限定表名。默认情况下,User2需要执行类似

的操作
SELECT *
  FROM User1.MyTable

如果您不想限定表名,可以在User2的MyTable的User2架构中创建同义词

CREATE SYNONYM myTable
   FOR User1.MyTable

或者您可以创建公共同义词(所有用户都可以看到公共同义词,但它们对权限没有影响)

CREATE PUBLIC SYNONYM myTable
   FOR User1.MyTable

或者您可以在连接

后为会话设置current_schema
ALTER SESSION SET current_schema = User1

如果您执行上述任何操作,User2将能够运行查询

SELECT *
  FROM MyTable

MyTable解析为User2.MyTable。私有同义词是最小的足迹 - 它仅适用于User2,仅适用于MyTable。公共同义词意味着任何已被授予User1.MyTable权限的人都可以查询它,而无需使用模式名称限定表名。更改current_schema意味着该会话的所有非限定对象引用将在User1架构而不是当前用户的架构中解析。

相关问题