0

여기 내 시나리오 :오라클 프로 시저 동의어 부모 스키마 테이블에서 작동이

스키마 : USER_1 패키지 : PKG_1 절차 : PROC_1 테이블 : MY_TABLE

스키마 : USER_2

그래서 나는 또한 MY_TABLE를 업데이트 PKG_1.PROC_1, 동의어를 가지고, 두 스키마, USER_2USER_1 거의 모든 테이블에 대한 동의어를 가지고 있습니다. 그러나 USER_1 대신 USER_2...에서 PKG_1.PROC_1 절차 업데이트 테이블 USER_2 동의어를 사용하는 경우

어떻게이의 동의어를 실행하는 것과 동일한 스키마의 테이블에서 동작 할 수 다른 스키마의 프로 시저?

기본적으로, 내가 무엇을 기대 실제로 USER_2.MY_TABLE에 변화를 볼 수 있지만 변화는 ...이

내가 USER_2으로 이런 짓을

수행되지 않습니다 :

CREATE OR REPLACE SYNONYM MY_TABLE FOR USER_1.MY_TABLE; 

CREATE OR REPLACE SYNONYM PKG_1 FOR USER_1.PKG_1; 
EXECUTE PKG_1; 

I을 오류가없고 USER_2에 연결하면 DBMS_OUTPUT.PUT_LINE 개의 로그까지 표시되고 올바르게 표시됩니다. 그러나 PKG_1.PROC_1 내가 할 경우, MY_TABLE에서 레코드를 삭제 말 :

SELECT RECORD FROM USER_1.MY_TABLE; 

이 삭제되었습니다, 나는 레코드가 삭제하지만,되지 않았습니다 볼 수 있습니다 USER_2를 사용

SELECT RECORD FROM MY_TABLE; 

.

감사합니다.

답변

0

호출자의 스키마에있는 객체에 대해 패키지를 작동 시키려면 패키지에서 AUTHID CURRENT_USER (일명 invokers 권한 패키지)를 선언해야합니다.

기본값은 AUTHID DEFINER이며 패키지는 패키지 자체와 동일한 스키마에서 사용 가능한 개체에서 작동 할 수 있습니다.