[인터돌™] 공부 해보자!! 열심히~~~

반응형
출처 블로그>Naver Blog of Justin | 저스틴

원문 http://blog.naver.com/basketyj/30018483225

USER_A 사용자의 테이블에 대하여 USER_B 사용자에게 권한을 줄 경우


임의의 한 테이블에 대한 쿼리를 보면 다음과 같습니다.

즉, USER_A 사용자의 sample_table 에 대하여 USER_B에게 SELECT 권한을 부여한다는  의미입니다.


GRANT SELECT ON USER_A.sample_table TO USER_B;


하지만 USER_A 사용자의 테이블은 100개라고 하셨는데 100개의 쿼리를 만들어 하나씩 처리하셔야 합니다.  각 테이블별 GRANT 쿼리가 하나씩 존재해야하만 한다는 것입니다. 한번에 처리할 수는 없습니다.


모든 테이블의 권한을 부여하는 하나로 된 쿼리는 없지만 모든 테이블의 권한을 부여하는 쿼리를 만들어내는 쿼리를 만들수 있습니다.

즉, 테이블 개수 만큼의 쿼리를 만들어내는 쿼리를 만들어서 그 결과를 복사하여  복사된 쿼리를 일괄 실행 시키면 모든 테이블에 권한을 줄 수 있습니다.


그래서 우선 다음 쿼리를 이해하셔야 합니다.

아래 쿼리는 SCOTT 계정의 테이블들에 대해 RABBI계정에게 SELECT권한을 주는 쿼리들을 만들어내는 쿼리입니다. 아래 쿼리로 GRANT할 쿼리리스트를 얻을 수 있습니다.

ALL_TABLE 을 모든 계정에 대한 테이블들의 정보가 담겨 있습니다.

따라서 ALL_TABLES 테이블에서 지정된 계정에 대한 테이블명을 얻어서 GRANT 쿼리를 완성하는 것입니다. 그러면 지정된 계정에 대한 테이블에 대하여 여러가지로 응용하실 수 있습니다.


SELECT \'GRANT SELECT ON SCOTT.\'||TABLE_NAME || \' TO RABBI;\'
FROM ALL_TABLES
WHERE OWNER = \'SCOTT\'


위 쿼리를 실행한 결과는 다음과 같습니다.


GRANT SELECT ON SCOTT.DEPT TO RABBI;
GRANT SELECT ON SCOTT.EMP TO RABBI;
GRANT SELECT ON SCOTT.BONUS TO RABBI;
GRANT SELECT ON SCOTT.SALGRADE TO RABBI;


이 결과를 복사해서 다시 실행 시키시면 원하시는 계정의 테이블들에 대해 처리할 쿼리를 처리할 수 있게 됩니다. 즉, 100개든 1000개든 N개의 테이블에 대해 동일한 쿼리를 처리해야할 경우 유용하게 사용하실 수 있습니다.


Oracle 의 dictionary 에서 테이블과 뷰를 잘 활용하시면 도움이 많이 됩니다.

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band