Oracle表SELECT权限问题

时间:2011-09-28 08:00:28

标签: 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

你能说出我错过了什么吗?

2 个答案:

答案 0 :(得分:6)

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

select * from XYZ.TABLEABC
/

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

create synonym TABLEABC for XYZ.TABLEABC
/

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

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

答案 1 :(得分:1)

正如APC所说,你错过了一个SYNONYM。

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

各种类型及其用途的详细描述如下: http://www.orafaq.com/wiki/Synonym