오라클 전체 테이블 권한부여
질문

기존에 A 유저가 테이블이 100개가 있다면,

신규로 B유저를 만들었을때,

A유저의 100개 테이블의 select 권한만 B에개 주려면 어떻게 해야하는지요??



답변 1

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 에서 테이블과 뷰를 잘 활용하시면 도움이 많이 됩니다.




답변 2

SELECT 'GRANT SELECT ON '||TNAME||' TO USER_B;'
FROM TAB

이렇게 해서 나오는 결과로 한번에 여러문장 만드실 수 있습니다.

단 USER_B 라고 되어 있는 부분은 실제 USER 이름으로 바꾸세요.

--------

이것도 귀찮으시다면..

GRANT SELECT ANY TABLE TO USER_B;

이렇게 하시는게 편하실듯..

by S2nNAMU | 2013/04/23 11:16 | OS install&admin | 트랙백 | 덧글(0)
트랙백 주소 : http://littletrue.egloos.com/tb/4796259
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >