티스토리 뷰

 내가 제일 약한 DB부분이다. 기본지식도 부족한것 같고 쿼리 튜닝 실력도 부족한것 같다. 계속 공부하다보면 언젠간 늘겠지만 왜 이렇게 실력이 늘지 않을까 어휴..


 프로젝트 진행 중 로그인한 계정에서 다른 계정의 테이블이나 뷰를 Select 하는일은 매우 흔한일이다. Grant 설정이 정상적으로 되어있다면 타 계정의 테이블이나 뷰에 접근하는 일은 매우 쉽다. 단지 Select 하고자 하는 계정명만 붙여주면 해결된다. 하지만 계정명으로만 해결되지 않을 때가 존재한다. 가령 A계정과 B계정이 존재한다하고, A계정에서 B계정의 TEST라는 테이블에 접근하기 위해선 다음과 같은 SQL을 작성하면 된다.



 하지만 여기에서 에러가 발생할때가 있다. 분명 B 계정에 TEST라는 테이블이 존재함에도 불구하고 찾을수 없다는 에러. 이때에는 B계정의 TEST라는 테이블에대해 A계정에서 Select 할 수있는 권한이 없기때문이다. 이때에는 B계정의 TEST라는 테이블에 A계정이 Select 할 수 있도록 다음의 SQL로 권한을 부여하면 해결된다.



테이블이라면 보통 이러한 선에서 원하는 작업을 수행할 수 있도록 모든 조건이 갖추어진다. 하지만 뷰라면 또다른 문제가 발생 될 수 있다.

예를 들어 A, B, C 계정이 존재하고, B계정에서 C계정의 TEST2라는 테이블 또는 뷰를 참조하여 TEST3라는 뷰를 생성했다고 가정하자, 이때 A계정에서  B계정의 TEST3 뷰에 접근한다면?


위의 흐름대로 Grant도 부여하였고 계정명도 앞에 붙여주었는데도 접근할 수 없을때가 발생한다. 단순히 B계정에서 참조한 TEST2라는 테이블 또는 뷰에 A계정이 Select 할 수 있도록 권한을 부여하면 해결될 일이지만, 만약 A와 B계정이 통일된 데이터를 사용해야한다면?


 A계정에서 B계정이 생성한 코드 그대로 또다시 생성하면 같은 데이터를 볼수는 있겠지만 둘중 어느쪽에서 수정을 하게된다면 서로 다른 데이터가 보여지는 문제가 발생된다. 그렇기에 통일된 데이터를 위해서라면 A계정과 B계정이 같은 테이블을 사용하는 것이 현명한 방법이된다.


그럼 이 문제는 왜 발생하는것일까?


그것은 C계정에서 TEST2라는 테이블 또는 뷰에 B계정이 접근할 수 있도록 권한을 부여할때 grant option을 부여하지 않았기 때문이다. 



  1   grant option, admin option



  C계정에서 TEST2라는 테이블에 대해 B계정에 Select grant를 부여했다고 하자. 그렇다면 B계정에서 TEST2라는 테이블에 Select도 할 수 있고, 이를 이용하여 뷰를 생성할 수도 있다. 하지만 C계정의 TEST2 테이블은 B계정에 대해서만 권한을 부여했을 뿐이지 A계정에는 어떠한 권한도 부여하지 않은 상태이다. 그렇기 때문에 B계정에서 C계정의 TEST2라는 테이블을 사용하여 만든 뷰를 A계정으로 접근하면 에러가 발생하는 것이다.


이때 사용하는 옵션이 grant optionadmin option 있다. 이 옵션은 권한을 부여받은 B계정이 다른 계정에게도 권한을 부여하는 옵션이다. admin option도 같은 역할을 하지만 약간의 차이가 존재한다.


 만약 C계정에서 B계정으로 grant option을 부여했을 경우 B계정에서 A계정으로 역시 권한을 부여하게 된다. admin option도 여기까진 같은 역할을 하며 차이점은 권한을 revoke 시킬때 발생한다. grant option의 경우 C계정에서 B계정에 대한 grant를 revoke 시킬때 cascade방식으로 B가 부여했던 A에 대한 권한역시 revoke 된다.


하지만 admin option의 경우 C계정에서 B계정에대한 grant를 revoke 하더라도 B가 부여한 A에 대한권한은 revoke 되지 않는다.


 대충 이렇게 알고있었지만.. 역시 구글링해본 결과 내 지식이 좀 부족하단걸 알게 되었다. admin option과 grant option은 좀더 명확한 차이가 존재한다. 구글에서 검색한 결과 다음의 설명을 찾을 수 있었다.


With Grant option:

  • Only for object privileges, not system privileges.

  • Only the person who granted the privilege can revoke the privilege.

  • Revoked privileges can "cascade", allowing the first grantor to revoke many subsequent grants.

 

With Admin option:

  • Only for system privileges, not object privileges.


 grant option의 경우 시스템이 아닌 객체에 사용, admin option은 객체가 아닌 시스템에 사용하는 옵션이다. 테이블에 admin option을 부여해본적이 없었기때문에 경험부족에서 온 무지가 포스팅에도 반영이 된것 같다.


음.. 약간 틀린 정보를 포스팅 했어도.. 그냥 남겨놓으려 한다. 틀린 정보가 남에게 공유가 될 수도있지만. 우선적인 목적은 내 공부를 위한 블로그이니. 차후 이 포스팅을 다시 보게되면 아.. 이땐 이런 틀린 지식을 가지고 있었구나 하고 반성할 날이 오겠지?

댓글