OS 환경 : Oracle Linux 8.4 (64bit)
DB 환경 : Oracle Database 23.4.0.24.05 ai Free
방법 : 오라클 23ai 신기능 스키마 레벨 권한 부여
오라클 23ai 부터 스키마 레벨로 권한 부여가 가능함
이 기능은 오브젝트 별로 개별 권한을 부여할 필요 없이 스키마 단위로 관리 가능하게하는 기능임
이로 인해 권한 관리가 조금 더 수월해짐
참고로 이 권한을 부여하기 위해선 GRANT ANY SCHEMA, GRANT ANY PRIVILEGE 권한이 필요함
예를들어 A 유저에 emp1, emp2, emp3 등 여러 개의 테이블이 존재하는 경우 B 유저에게 권한 부여 필요 시 아래와 같이 전체 테이블에 대한 읽기 권한을 B 유저에게 부여하거나,
각각의 테이블들을 모두 명시해서 B 유저에게 부여해줬어야 했음
1
2
|
SQL> grant select any table to b;
SQL> grant select on a.emp1, a.emp2, a.emp3, ... to b;
|
하지만 23ai 부터는 아래 명령으로 쉽게 A 유저의 모든 테이블을 B 유저가 읽을수 있게끔 할수 있음
1
|
SQL> grant select any table on schema a to b;
|
테스트
샘플 유저 A, B 생성 및 권한 부여
1
2
3
4
|
SQL>
create user A identified by A quota unlimited on users;
create user B identified by B quota unlimited on users;
grant db_developer_role to A, B;
|
A 유저 접속 후 테이블 및 오브젝트 생성
1
2
3
4
5
6
7
|
SQL> conn A/A@localhost:1521/oracle23pdb1
Connected.
SQL>
create table t1 (col1 number, col2 number);
insert into t1 values (1,1),(2,2),(3,3),(4,4),(5,5);
commit;
create or replace view v_t1 as select col1 from t1;
|
B 유저에서 A 유저 오브젝트 확인
1
2
3
4
5
6
7
8
9
10
|
SQL>
conn B/B@localhost:1521/oracle23pdb1
set lines 200 pages 1000
col owner for a10
col object_name for a10
col object_type for a10
select owner, object_name, object_type from all_objects
where owner = 'A';
no rows selected
|
현재는 확인이 불가능함
sysdba 유저로 A 스키마 권한을 B 유저에 부여
1
2
3
|
SQL> grant select any table on schema a to b;
Grant succeeded.
|
B 유저에서 A 유저 오브젝트 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SQL>
conn B/B@localhost:1521/oracle23pdb1
set lines 200 pages 1000
col owner for a10
col object_name for a10
col object_type for a10
select owner, object_name, object_type from all_objects
where owner = 'A';
OWNER OBJECT_NAM OBJECT_TYP
---------- ---------- ----------
A T1 TABLE
A V_T1 VIEW
|
스키마 레벨 권한 부여후 정상적으로 테이블과 뷰가 확인됨
A 테이블, 뷰 데이터 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
SQL> conn B/B@localhost:1521/oracle23pdb1
Connected.
SQL> select * from A.t1;
COL1 COL2
---------- ----------
1 1
2 2
3 3
4 4
5 5
SQL> select * from A.v_t1;
COL1
----------
1
2
3
4
5
|
정상적으로 읽을 수 있음
B 유저에서 현재 읽을수 있는 스키마 권한 확인
1
2
3
4
5
6
7
8
9
|
SQL>
set lines 200 pages 1000
col schema for a10
col privilege for a30
select * from session_schema_privs;
PRIVILEGE SCHEMA
------------------------------ ----------
SELECT ANY TABLE A
|
sysdba 접속후 부여된 스키마 권한들 확인
1
2
3
4
5
6
7
8
9
10
11
12
|
SQL>
set lines 200 pages 1000
col grantee for a10
col privilege for a30
col schema for a10
select * from dba_schema_privs;
GRANTEE PRIVILEGE SCHEMA ADM COM INH
---------- ------------------------------ ---------- --- --- ---
B SELECT ANY TABLE A NO NO NO
IMSI SELECT ANY TABLE B NO NO NO
IMSI SELECT ANY TABLE A NO NO NO
|
모든 스키마 권한들을 확인할 수 있음
스키마 레벨 권한 부여시 제외되는 권한은 아래와 같음
Table 4-5 System Privileges Excluded from Schema Privileges 파트 참조
https://docs.oracle.com/en/database/oracle/oracle-database/23/dbseg/configuring-privilege-and-role-authorization.html#GUID-58D04BBE-A40D-4699-A2D7-1AB40F532A6D
참조 :
https://positivemh.tistory.com/1163
2991177.1
https://apex.oracle.com/pls/apex/features/r/dbfeatures/features?feature_id=1863
https://docs.oracle.com/en/database/oracle/oracle-database/23/dbseg/configuring-privilege-and-role-authorization.html#GUID-1C2A996E-8D01-4B94-BE9F-E5042AA15B15
https://docs.oracle.com/en/database/oracle/oracle-database/23/dbseg/configuring-privilege-and-role-authorization.html#GUID-58D04BBE-A40D-4699-A2D7-1AB40F532A6D
https://blogs.oracle.com/cloudsecurity/post/schemalevel-privilege-grants-with-database-23c
https://oracle-base.com/articles/23/schema-privileges-23
https://github.com/perpetualv/SchemaPrivileges
https://tuna.tistory.com/105
http://www.koreaoug.org/ai23/13329
'ORACLE > Admin' 카테고리의 다른 글
오라클 19c sql 취소 기능(alter system cancel sql) (0) | 2024.11.14 |
---|---|
오라클 23ai 신기능 스테이징 테이블(Staging) (0) | 2024.11.08 |
오라클 23ai 신기능 sql 이력 확인뷰 v$sql_history (0) | 2024.10.31 |
오라클 23ai 신기능 bigfile 테이블스페이스 shrink (0) | 2024.10.28 |
오라클 23ai 신기능 SQL 도메인(Domain) (0) | 2024.10.22 |