Oracle 23c에 스키마 권한이 추가되어 스키마 단위로 권한을 관리할 수 있게 되었습니다.
Oracle Database supports schema privileges in addition to the existing object, system, and administrative privileges. This feature improves security by simplifying authorization for database objects to better implement the least privileges principle.
테스트를 위해 아래와 같이 u1, u2 유저를 생성하겠습니다.
-- 1
DROP USER u1 CASCADE;
DROP USER u2 CASCADE;
CREATE USER u1 IDENTIFIED BY "u1";
CREATE USER u2 IDENTIFIED BY "u2";
GRANT CREATE SESSION, UNLIMITED TABLESPACE, CREATE TABLE TO u1;
GRANT CREATE SESSION, UNLIMITED TABLESPACE, CREATE TABLE TO u2;
u1 유저에서 t1 테이블을 생성하고, u2 유저에서 u1.t1 테이블을 조회하면 에러가 발생합니다.
-- 2-1: U1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1) AS SELECT 1 FROM DUAL;
-- 2-2: U2
SELECT * FROM u1.t1;
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
아래와 같이 u1 스키마에 대한 SELECT ANY TABLE 권한을 u2 유저에 부여할 수 있습니다. DBA_SCHEMA_PRIVS 뷰에서 스키마 권한 정보를 조회할 수 있습니다.
-- 3-1
GRANT SELECT ANY TABLE ON SCHEMA u1 TO u2;
권한이 부여되었습니다.
-- 3-2
SELECT * FROM dba_schema_privs;
GRANTEE PRIVILEGE SCHEMA ADMIN_OPTION COMMON INHERITED
------- ---------------- ------ ------------ ------ ---------
U2 SELECT ANY TABLE U1 NO NO NO
1개의 행이 선택되었습니다.
u2 유저에서 u1.t1 테이블을 다시 조회하면 에러가 발생하지 않습니다.
-- 4: U2
SELECT * FROM u1.t1;
C1
--
1
1개의 행이 선택되었습니다.