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;
하지만 시스템 권한이므로 아무 계정에 부여하는 것은 좋지 않을 것 같다. 보안 상 번거롭더라도 하나하나 부여하는것이 좋다.
'ORACLE > Admin' 카테고리의 다른 글
[ORACLE] OR-expansion과 USE_CONCAT, NO_EXPAND 힌트 (0) | 2023.11.30 |
---|---|
[ORALCE] 특정 사용자만 파라미터 적용하기(LOGON TRIGGER) (0) | 2023.11.20 |
오라클 Hash Join 원리와 use_hash 힌트 사용법 (0) | 2023.10.18 |
ORACLE JOB 등록 및 관리(DBMS_JOB) (0) | 2023.10.13 |
[기술공유] 오라클 계정과 스키마의 차이가 무엇일까? (0) | 2023.09.21 |