Oracle Synonym에 사용에 대해서 0 4 1,315

by 기린기린 [Oracle Admin] [2019.04.18 09:21:02]


안녕하세요.

http://www.gurubee.net/lecture/1038 이 글을 참조하여 질문을 드립니다.

보안상 타 사용자에게 원테이블을 가리고 임시테이블만을 제공하려고 합니다.

구성은
A1 DB어드민
U1 사용자

A1은 T1(원테이블), T2(임시테이블)을 소유하고 있고
U1 사용자에게는
T2라는 임시테이블의 접근을 제공해주고 임시테이블에 트리거를 생성해

원테이블 데이터를 조작하도록 구성하고 있습니다.

 

 

1. 유저 U1에게는 유저 A1, 테이블 T1, T2의 이름을 보여주지 않아야 합니다.(T2의 이름은 보여줘도 큰 상관은 없습니다)

2. T2에게 부여된 T1을 다루는 트리거 내용과 접근을 보여주지 않아야 합니다. 

3. 최상의 결과는 유저 U1은 Synonym S1의 이름만 알아야 하고

S1이 바라보는 T2의 DML조작이 가능해야합니다.

 

 

 

트리거의 접근을 막기위함과 내용(T1에 대한 DML 권한)때문에
T2를 생성할 때 Owner를 A1 에게 주었고

U1에게는 T2에 대한 DML권한을 부여하였고 
T2에 대한 Private Synonym S1을 U1에게 제공한 상태입니다.

하지만 U1로 로그인해서 S1을 View 해보면

Object Owner A1의 이름이 나오더라구요.

Object name T2의 이름도 나오구요.

트리거에 대한 접근권한 막기는 성공해서

원테이블 T1 명칭, 컬럼 등은 가릴 수 있었지만

DB어드민명과 임시테이블 T2의 이름은 가릴 수가 없었습니다.

시노님을 생성해서 시노님에게 권한을 부여하여도
똑같이 시노님의 대상 테이블 T2에 대한 권한이 부여가 되더라구요.

 

 

궁금한 점은

테이블과 트리거의 각 소유자를 달리할 수 있나요?

임시테이블 T2는 U1이 소유하고 T2에 대한 트리거는 A1이 소유하여

U1에게 A1의 이름을 알 수 있는 방법을 없애고

트리거내용에 T1에 대한 DML 작성과 접근제한을 하도록 가능한가요?

그리고 제가 사용방법을 잘 모르고 있는건지 
시노님을 사용해도 오브젝트오너나 오브젝트네임을 볼 수 있는데
뷰 권한을 막는 방법이 있을까요? 시노님을 이러한 보안을 개선하기 위해서 어떻게 사용할 수 있나요?

by 마농 [2019.04.18 11:30:12]

임시테이블 시노님 보다는 뷰가 이상황에서는 더 맞믄 것 같은데요.
원본테이블을 조회하는 뷰를 만들어 제공하면
트리거도 필요 없고요.


by 기린기린 [2019.04.18 12:02:44]

답변 정말 감사합니다.
실테이블에 INSERT를 해야하는 상황이고
NOT NULL VALUE 에 대해 들어온 데이터를 실테이블 구분에 맞게 데이터 DECODE 가공 처리가 필요한 상황이라서
따로 임시테이블 사용자에게 INSERT DECODE 쿼리를 제공하지는 않았고
원테이블과 오너 정보를 가리기 위해서 임시테이블을 제공하기로 하였고
INSERT 와 데이터 가공처리를 위해 트리거 작성을 하였습니다.

다른 목적으로 뷰를 제공하기는 했는데
뷰도 마찬가지로 소유자는 어드민이지만 유저에게 Private 시노님으로 제공하고 SELECT 권한만 부여했는데
뷰의 내용도 알 수 있고, 덕분에 원테이블 이름과 오너명칭까지 알 수 있더라구요.
뷰의 원래 명칭, 뷰의 소유자도 알 수 있구요.
알아도 상관없기는 하지만 노출되면 안될 수 있는 상황이 존재하여
시노님만으로 최대한 오브젝트, 오너 이름을 가릴 수 있으면 좋은데 방법이 없을까요?
시노님으로 보안을 개선할 수 있다는데 이 부분에 대해 제가 사용방법을 잘못하고 있는건지
아니면 시노님으로 제공해도 오브젝트이름과 오브젝트 오너명을 노출하는 건 방도가 없는건지 궁금합니다. 
감사드립니다.


by 마농 [2019.04.18 13:35:50]

뷰의 뷰를 만들어 제공하면 될 것 같아요.
T1 > V1 > V2 로 해서 V2 제공
트리거는 T1 에 직접 걸어도 되고, V1 에 instead of triigger 형태로 만들어도 될 듯 하구요.
이러면 V2 를 봤을 때 트리거도 안보이고,
뷰 스크립트를 봐도 V1 만 보이겠죠.


by 기린기린 [2019.04.19 16:46:01]

뷰의 뷰를 만들 방법은 상상조차 못했네요.
원테이블 다루는 뷰1를 조회하는 뷰2를 만들어보니
뷰2만 제공하면 원테이블 명칭은 알 수 없게되네요!
그렇지만 여전히 뷰2의 소유자 어드민명은 알 수 있었습니다.
큰 도움이 되어주셔서 감사드립니다.

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