programing

오라클 저장 프로시저 내에서 다른 사용자의 테이블 액세스

procenter 2023. 7. 9. 22:30
반응형

오라클 저장 프로시저 내에서 다른 사용자의 테이블 액세스

한 사용자의 테이블에서 다른 스키마로 데이터를 복사하기 위해 저장 프로시저를 작성하고 있습니다.기본적으로 INSERT 시리즈입니다.다음과 같은 문을 선택합니다.

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

sqlplus(또는 나의 경우 TOD;-))에서 발급할 때는 이 작업이 잘 작동하므로 충분한 권한이 있지만 다음과 같은 저장 프로시저의 일부일 경우에는 다음과 같습니다.

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;

Oracle 오류가 표시됩니다.

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

보다시피, 저는 이미 삽입했습니다.AUTHID하지만 소용이 없습니다.

제가 뭘 더 할 수 있을까요?저는 제 아이디어가 여기서 거의 끝이 났습니다.

프로시저 소유자에게는 역할통해가 아니라 기본 개체에 직접 액세스할 수 있는 권한이 부여되어야 합니다.절차와 동일한 수준의 액세스 권한을 가지려면 다음 명령을 사용합니다.

SET ROLE NONE;

프로시저에서 다른 테이블에 액세스하려면 역할이 아닌 직접 SELECT를 부여받아야 합니다.

GRANT SELECT ON TURAT03.GESCHAEFTE TO <your_user>;

Tom Kyte의 이 기사에는 추가 정보가 포함되어 있습니다.

언급URL : https://stackoverflow.com/questions/4399528/accessing-another-users-table-within-an-oracle-stored-procedure

반응형