我有一个内部应用程序和我们网站共享的oracle数据库。
我对oracle知之甚少所以会解释我对它的理解......
当登录(使用Oracle SQL Developer)作为APPUSER时,数据库有两个用户APPUSER和WEBUSER,您可以看到数据库中的所有表。以WEBUSER身份登录时除了几个程序之外什么都看不到,APPUSER看不到这些程序。
一个程序以:
开头create or replace PROCEDURE "UPDATE_DETAIL"
(v_ref IN APPUSER.DETAILS.REFERENCE%TYPE
,v_desc IN APPUSER.DETAILS.DESCRIPTION%TYPE
...
第2行有一个红色波浪形“PLS-00201:标识符APPUSER未声明”
我认为它有“APPUSER.TABLE.COLUMN”,因为WEBUSER无法直接访问表格。
我已经执行了GRANT ALL ON UPDATE_DETAIL TO APPUSER
以WEBUSER身份登录,但是没有解决问题,WEBUSER是该程序的所有者,但没有在Grants列表中列出任何内容(我假设因为所有者只有权利是默认的吗?)
该过程的依赖项列表也是空的,但无法找到如何手动添加过程。
不确定还有什么可以尝试修复此错误。
感谢。
答案 0 :(得分:0)
如果您想要WEBUSER
所拥有的程序(并且我相信您的说明UPDATE_DETAIL
归WEBUSER
所有)来引用APPUSER
所拥有的对象,那么需要对这些对象授予WEBUSER
权限。例如,APPUSER
GRANT SELECT ON appuser.details
TO webuser;
这假定WEBUSER
只需SELECT
表中的APPUSER.DETAILS
。如果您的过程需要该表中的INSERT
,UPDATE
或DELETE
数据,则需要在WEBUSER
表上授予APPUSER.DETAILS
其他权限。您需要为APPUSER
用户需要引用的WEBUSER
中的每个表格进行类似的授权。