반응형
오라클 저장 프로시저 내에서 다른 사용자의 테이블 액세스
한 사용자의 테이블에서 다른 스키마로 데이터를 복사하기 위해 저장 프로시저를 작성하고 있습니다.기본적으로 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
반응형
'programing' 카테고리의 다른 글
프로그램 파일 x86 env 변수를 가져오는 방법은 무엇입니까? (0) | 2023.07.09 |
---|---|
각 2 typescript 주변 상황에서 구현을 선언할 수 없습니다. (0) | 2023.07.09 |
'헤드 분리' 커밋을 마스터로 되돌리는 방법 (0) | 2023.07.09 |
Maven spring boot run 디버깅과 인수 (0) | 2023.03.16 |
각도에서의 $broadcast(), $emit() 및 $on() 사용법JS (0) | 2023.03.16 |