select view error (ora-00990) 7

by 정용석 [Oracle Admin] [2015.01.20 10:51:52]


Oracle 권한 때문에 애먹고 있는 시즌인가 봅니다. 

Oracle 11gR2 로 진행중입니다. 

 

아래는 현재 발생되고 있는 에러 케이스 입니다. 

Case1 에서 에러가 발생하고 있으며, Case2 에서는 정상적으로 조회가 되고 있습니다. 

결론적으로 service1 계정에 "SELECT ANY TABLE" 권한을 주면 조회가 되긴 합니다. 

그러나 보안상 저 권한을 주기가 애매한 상황입니다. 

도대체 왜 이런 상황이 벌어지는건지, 다른 방법은 없는건지 궁금합니다. (이게... View에만 국한되는건지도 의문스럽네요)

고수님들 한수 부탁드립니다. 

 

1. 계정 : dba1(DBA 계정) / service1(service 계정)  / Application 별 계정 존재

2. Case 1

  - App1 이라는 스키마에 App1.A, App1.B 테이블 존재

  - App2 라는    스키마는 App1.A, App1.B 테이블을 조회하는 App2.view1 View 생성

  - service1 계정은 App1.A, App1.B, App2.view1 에 select, insert, update, delete 권한 부여 받음

  - service1 계정으로 App2.view1 조회시 ora 00990 발생

3. Case 2

  - App1 이라는 스키마에 App1.A, App1.B 테이블 존재

  - App1 라는    스키마는 App1.A, App1.B 테이블을 조회하는 App1.view1 View 생성

  - service1 계정은 App1.A, App1.B, App1.view1 에 select, insert, update, delete 권한 부여 받음

  - service1 계정으로 App1.view1 조회시 조회 성공

  

by 비주류 [2015.01.20 13:44:01]

혹시 case1의 세번째 grant 부분이 모두 정상적으로 처리됐는지요?
* app2가 view1(app1.a, app1.b) 접근권한을 service1에게 주기위해 필요한 권한 포함등 (with grant option)


by 정용석 [2015.01.20 13:47:46]

with grant option 은 어느곳에도 적용되어 있지 않습니다. 

좀더 자세히 부탁드립니다. 


by 마농 [2015.01.20 13:51:33]

서술형으로 모모 했다 표현해 봐야 알아내기 힘듭니다.

실제 처리구문(누가 실행했는지)과 메시지를 그대로 보여주세요.


by 비주류 [2015.01.20 13:57:23]

마농님께서 말씀해주신것처럼 전체 script 가 있으면 좋겠구요.
제가 말씀드린 부분은 아래 내용입니다. (ORA-00990 과 관련있을지는 잘모르겠네요.)
GRANT SELECT,INSERT,UPDATE,DELETE ON app1.a TO app2 WITH GRANT OPTION;
GRANT SELECT,INSERT,UPDATE,DELETE ON app1.b TO app2 WITH GRANT OPTION;


by 정용석 [2015.01.20 14:04:39]

1. APP1 User

  - Table : A, B

  - Grant delete, insert, select, update on APP1.A to SVC1;

  - Grant delete, insert, select, update on APP1.B to SVC1;

  - Grant select on APP1.A to APP2;

  - Grant select on APP1.B to APP2;

2. APP2 User

  - View : V1

  - create view APP2.V1 ( chk) as select '0' from APP1.A T1, APP1.B T2 where T1.no = T2.no;

  - Grant delete, insert, select, update on APP2.V1 to SVC1;

  - Grant select on APP2.V1 to APP1;

3. SVC1 user

   - select * from APP2.V1;    -- ora 0103


by 정용석 [2015.01.20 14:28:26]

감사합니다. 아래의 옵션으로 일단 조회되는 것을 확인했습니다. 

GRANT SELECT APP1.A TO APP2 WITH GRANT OPTION;

GRANT SELECT APP1.B TO APP2 WITH GRANT OPTION;

 

WITH GRANT OPTION 을 줌으로써 권한을 SVC1 USER에게 까지 줄수 있도록 하는것인가요?

그렇다면... 일괄적으로 모든 TABLE 에 대해서 "WITH GRANT OPTION" 을 주면 될까요?

안전하게 VIEW, 함수, 프로시져 등 다른 OBJECT에 대해서도 "WITH GRANT OPTION" 을 줘야 하나요....?


by 비주류 [2015.01.20 14:44:27]

네, 말그대로 해당 object에 대해 grant 할수 있는 권한까지 주는 것이구요,
(revoke시 추가 grant 된것도 함께 제거됨 - cascade)
정책까지는 뭐라 말씀드리긴 어렵지만, 아무래도 보안상 권한은 꼭 필요한 선에서만 부여하시는 게 좋을 것 같습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입