预言机表权限
本文关键字:权限 预言机 | 更新日期: 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
架构中解析,而不是在当前用户的架构中解析。