Oracle表SELECT权限问题

nob*_*ody 2 sql oracle ora-00942

我的应用程序在Oracle上有几个表,其中用户XYZ是架构所有者.使用XYZ创建表.我想让ABCUSER在这些表上拥有CRUD权限.我已经通过访问权限GRANT ALL ON TABLEABC to ABCUSER并且授予成功.

但是当这个用户(ABCUSER)尝试查询数据库(从TABLEABC中选择*)时,它似乎不起作用.我收到错误消息

ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:
Error at Line: 1 Column: 14
Run Code Online (Sandbox Code Playgroud)

你能告诉我我错过了什么吗?

APC*_*APC 6

用户ABCUSER拥有该表的权限,但不拥有它.因此,您需要在查询中包含架构:

select * from XYZ.TABLEABC
/
Run Code Online (Sandbox Code Playgroud)

如果您不想在程序中对模式名称进行硬编码,则用户可以构建同义词:

create synonym TABLEABC for XYZ.TABLEABC
/
Run Code Online (Sandbox Code Playgroud)

然后原始查询将适用于ABCUSER.

请注意,ABCUSER将需要CREATE SYNONYM权限.