2

我的应用程序在 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

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

4

2 回答 2

6

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

select * from XYZ.TABLEABC
/

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

create synonym TABLEABC for XYZ.TABLEABC
/

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

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

于 2011-09-28T08:03:48.847 回答
1

正如 APC 所说,您缺少同义词。

您可能需要 PRIVATE 或 PUBLIC 同义词,具体取决于您希望谁能够查看表。

各种类型及其用途的一个很好的描述在这里: http ://www.orafaq.com/wiki/Synonym

于 2011-09-28T08:51:42.493 回答