내용 3줄 요약.
1. C스키마가 B스키마의 뷰를 사용하려면, B는 뷰에 사용된 A스키마 테이블에 대한 SELECT WITH GRANT OPTION을 가지고 있어야 한다.
2. C스키마가 B스키마가 소유한 Stored PL/SQL를 사용하려면, 해당 Stored PL/SQL에 대한 EXECUTE 권한만 주면 된다.(AUTHID DEFINER로 생성된 경우)
3. 2와 같은 상황에서 AUTHID_CURRENT로 생성된 경우, 해당 Stored PL/SQL에서 사용되는 모든 오브젝트에 대한 권한이 필요하다.
- 3줄 요약에 대한 검증은 아래 내용 참고 -
VIEW에 대한 SELECT 권한
1. 테스트 환경 구성
[SCHEMA생성 및 권한부여]
A
B
C
1.1. 생성 오브젝트
[TABLE]
A.T1
[VIEW]
B.V1
1.2. 현재 상태 설명.
[조건1]
A.T1 테이블에 대한 SELECT 권한을 B에게 부여.
[조건2]
A.T1 테이블에 대한 B.V1 뷰를 생성하였음.
[조건3]
C에게 A.T1 테이블에 대한 SELECT 권한을 준 상태.
1.3. 의문사항
C는 B.V1에 대한 SELECT가 가능한가?
1.4. 결론.
불가능하다.
오라클 도큐에 의하면, 다른 스키마의 VIEW를 SELECT를 할 수 있는 조건은 아래와 같다.
1. VIEW에 기재된 테이블들이 모드 자신의 소유인 경우.
2. VIEW에 기재된 테이블들에 대한 SELECT 권한을 WITH GRANT OPTION을 통해 받은 경우.
따라서 아래와 같이 수행하면 정상적인 SELECT가 가능하다.
- GRANT SELECT ON A.T1 TO B WITH GRANT OPTION ;
Stored PL/SQL Object에 대한 EXECUTE 권한
2. 테스트 환경 구성
[SCHEMA생성 및 권한부여]
A
B
C
2.1. 생성 오브젝트
[TABLE]
A.T1
[PROCEDURE]
B.P1
2.2. 현재 상태 설명.
[조건1]
A.T1 테이블에 대한 SELECT 권한을 B에게 부여.
[조건2]
TEEST2 스키마로 A.T1 테이블에 대한 B.P1 Procedure를 생성.
[조건3]
C에게 B.P1의 EXECUTE 권한을 부여.
2.3. 의문사항
C는 B.P1의 실행이 정상적으로 되는가?
2.4. 결론.
가능하다.
Stored PL/SQL Object들은 생성 시, AUTHID 지정이 가능하며 해당 옵션은 {DEFINER} 또는 {CURRENT_USER}로 지정 할 수 있다.
Default는 DEFINER 이며, 이는 B.P1을 생성(컴파일)한 B 스키마로 수행된다는 의미이다.
따라서 A.T1 테이블에 대한 별도 SELECT 권한이 없어도 EXECUTE를 통해 A.T1테이블의 결과값이 출력되는 것을 확인 할 수 있다.
2.5 AUTHID CURRENT_USER로 생성된 경우.
[생성]
[수행]
2.6. AUTHID CURRENT_USER 결론.
AUTHID CURRENT_USER로 수행한 경우, SELECT 권한이 없으므로 수행 불가하다.
또한 B에게 TEST.T1 테이블에 대한 SELECT WITH GRANT OPTION을 부여해도 마찬가지이다.
따라서 GRANT SELECT ON A.T1 TO C; 권한을 부여해야 B.P1의 수행이 정상적으로 가능해진다.
반대로, PL/SQL을 컴파일 SCHEMA의 권한이 누락되어 수행이 불가능한 상황에서,
PL/SQL을 컴파일한 SCHEMA보다 더 많은 권한을 가지고 있는 SCHEMA로 접속 한 경우,
AUTHID CURRENT_USER로 컴파일 되었을 때 오히려 수행에 문제가 없을 수 있을 것이다.
내용 요약.
1. C스키마가 B스키마의 뷰를 사용하려면, B는 뷰에 사용된 A스키마 테이블에 대한 SELECT WITH GRANT OPTION을 가지고 있어야 한다.
2. C스키마가 B스키마가 소유한 Stored PL/SQL를 사용하려면, 해당 Stored PL/SQL에 대한 EXECUTE 권한만 주면 된다.(AUTHID DEFINER로 생성된 경우)
3. 2와 같은 상황에서 AUTHID_CURRENT로 생성된 경우, 해당 Stored PL/SQL에서 사용되는 모든 오브젝트에 대한 권한이 필요하다.