Accessing another user's table within an Oracle Stored Procedure

放肆的年华 提交于 2019-11-26 23:14:29

问题


I'm writing a stored procedure to copy data from one user's table to another schema. Basically, it is a series of INSERT .. SELECT statements such as this:

INSERT INTO GESCHAEFTE
  SELECT *
    FROM TURAT03.GESCHAEFTE
   WHERE kong_nr = 1234;

This works fine when issueing from sqlplus (or TOAD for me ;-)) so I know that I have sufficient privileges, but when this is part of stored procedure like this:

CREATE OR REPLACE FUNCTION COPY_KONG
    (pKongNr IN NUMBER)
    RETURN NUMBER
    AUTHID CURRENT_USER
IS
BEGIN
   INSERT INTO GESCHAEFTE
      SELECT *
       FROM TURAT03.GESCHAEFTE
       WHERE kong_nr = pKongNr;
END;

I get an Oracle error:

[Error] ORA-00942 (11: 22): PL/SQL: ORA-00942: table or view does not exist

As you can see, I've already inserted an AUTHID, but to no avail.

What else can I do? I'm pretty much at the end of my ideas here.


回答1:


The owner of a procedure must be granted privilege to access the underlying objects directly, not through a role. To have the same level of access as your procedures, use the following commands:

SET ROLE NONE;

To access another table from a procedure, you need to be granted SELECT directly, not through a role:

GRANT SELECT ON TURAT03.GESCHAEFTE TO <your_user>;

This article by Tom Kyte contains additional info.



来源:https://stackoverflow.com/questions/4399528/accessing-another-users-table-within-an-oracle-stored-procedure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!