预言机表权限

本文关键字:权限 预言机 | 更新日期: 2023-09-27 18:35:04

在 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        

预言机表权限

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

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

SELECT *
  FROM User1.MyTable

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

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架构中解析,而不是在当前用户的架构中解析。