본문 바로가기

ORACLE/Admin

[오라클] 스키마 전체 테이블에 대한 읽기 권한 부여

728x90
반응형

AAA라는 계정에 여러 테이블들이 있다. AAA_RO 라는 계정을 생성하여 AAA의 테이블에 대한 읽기권한만 부여하고 싶다. AAA 계정에 대한 테이블 읽기 권한을 부여하는 명령어가 있을 것 같지만 없다. (보안상의 이유?)

 

그럼 어떻게 권한을 부여해야할까?

 

우선 AAA_RO에게 AAA의 특정 테이블에 대한 읽기 권한을 부여하는 명령어는 아래와 같다.

GRANT SELECT ON AAA.TABLE1 TO AAA_RO; -- AAA_RO 계정에 AAA 계정 TABLE1 테이블에 대한 읽기 권한 부여

AAA 계정의 모든 테이블 리스트를 검색한다.

SELECT * FROM ALL_TABLES WHERE OWNER = 'AAA'

AAA_RO에게 AAA 계정의 모든 테이블에 대한 읽기 권한을 부여하는 스크립트를 추출하는 명령어를 아래와 같이 작성할 수 있다.

SELECT 'GRANT SELECT ON ' || OWNER || '.' || TABLE_NAME || ' TO AAA_RO;'
FROM
(
    SELECT * FROM ALL_TABLES
    WHERE OWNER = 'AAA'
)
;

위 명령어 수행 결과 아래와 같은 스크립트를 얻을 수 있다.

GRANT SELECT ON AAA.TABLE1 TO AAA_RO;
GRANT SELECT ON AAA.TABLE2 TO AAA_RO;
GRANT SELECT ON AAA.TABLE3 TO AAA_RO;
GRANT SELECT ON AAA.TABLE4 TO AAA_RO;
GRANT SELECT ON AAA.TABLE5 TO AAA_RO;
GRANT SELECT ON AAA.TABLE6 TO AAA_RO;
GRANT SELECT ON AAA.TABLE7 TO AAA_RO;
...

 

이후 AAA 계정에 테이블이 추가될 경우 추가된 테이블에 대해 별도로 권한을 부여해주어야한다.

 

 

 

 

하지만 AAA에 대한 읽기 권한이 필요한 계정이 AAA_RO 뿐 아니라 AAA_RW, AAA_어쩌구, AAA_저쩌구 등 다양하다면 테이블 생성 시 마다 해당 계정들에 테이블 읽기 권한을 부여하는게 번거롭고 관리가 어려울 것이다.

이때 ROLE을 생성한 후 각 계정에 해당 ROLE을 부여하고, AAA 계정에 테이블 생성시마다 해당 ROLE에만 테이블 읽기 권한을 주면 되도록 하는 방식으로 관리하면 좋을 것이다.

 

 

 

 

AAA 뿐 아니라 DB 내 모든 테이블에 대한 SELECT 권한을 부여하는 명령어가 있긴 하다.

GRANT SELECT ANY TABLE TO AAA_RO;

하지만 시스템 권한이므로 아무 계정에 부여하는 것은 좋지 않을 것 같다. 보안 상 번거롭더라도 하나하나 부여하는것이 좋다.

728x90
반응형