我的应用程序在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
你能说出我错过了什么吗?
答案 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