OS 환경 : Oracle Linux 8.4 (64bit)
DB 환경 : Oracle Database 23.4.0.24.05 ai Free
방법 : 오라클 23ai 신기능 개발자를 위한 DB_DEVELOPER_ROLE 신규 Role
오라클 23ai 부터 개발자를 위한 신규 롤인 db_developer_role 이 추가됨
롤 설명
DB_DEVELOPER_ROLE 역할은 애플리케이션 개발자가 필요로 하는 대부분의 시스템 권한, 객체 권한, 사전 정의된 역할, PL/SQL 패키지 권한, 및 추적 권한을 제공함
애플리케이션 개발자는 애플리케이션을 설계, 개발, 배포하기 위해 많은 권한이 필요함
Oracle은 이러한 권한을 개별적으로 부여하거나 DBA 역할을 부여하는 대신, 애플리케이션 개발자에게 DB_DEVELOPER_ROLE 역할을 부여할 것을 권장함
DB_DEVELOPER_ROLE 역할을 부여하면 최소 권한 원칙을 준수하여 개발 환경의 보안을 강화할 뿐만 아니라, 애플리케이션 개발자에게 역할을 부여하고 회수하는 관리를 더욱 간편하게 할 수 있음
DB_DEVELOPER_ROLE 역할은 CDB 루트 또는 PDB에서 모두 사용할 수 있으며, 이 역할을 수정해서는 안됨
원문
The DB_DEVELOPER_ROLE role provides most of the system privileges,
object privileges, predefined roles, PL/SQL package privileges, and tracing privileges that an application developer needs.
An application developer needs a large number of these privileges to design, develop, and deploy applications.
Oracle recommends that you grant the application developer the DB_DEVELOPER_ROLE role,
rather than individually granting these privileges or granting the user the DBA role.
Granting the application user the DB_DEVELOPER_ROLE role not only adheres to least-privilege principles
and ensures greater security for the development environment, it facilitates the management of role grants
and revokes for application developers. The DB_DEVELOPER_ROLE role can be used in either the CDB root or the PDB.
Do not modify the DB_DEVELOPER_ROLE.
이 롤을 유저에게 부여, 회수하는 방법은 기존처럼 grant, revoke 명령으로 가능함
1
2
3
4
5
|
#부여
SQL> grant db_developer_role to 유저명;
#회수
SQL> revoke db_developer_role from 유저명;
|
본문에서는 기존에 일반적으로 유저를 생성할때 부여하던 connect, resource 롤과는 어떤점이 다른지를 확인해봄
참고 : 오라클 유저에게 기본적으로 주는 롤 connect와 resource 에 포함된 권한 확인 ( https://positivemh.tistory.com/519 )
connect 롤에 부여된 권한 확인
1
2
3
4
5
6
7
8
9
10
11
12
|
SQL>
set lines 200 pages 1000
col role for a10
col privilege for a30
select * from role_sys_privs
where role='CONNECT'
order by 1, 2;
ROLE PRIVILEGE ADM COM INH
---------- ------------------------------ --- --- ---
CONNECT CREATE SESSION NO YES NO
CONNECT SET CONTAINER NO YES NO
|
create sesison, set container 등 2가지 권한이 포함되어 있음
connect 롤에 부여된 롤 확인
1
2
3
4
5
6
7
8
9
|
SQL>
set lines 200 pages 1000
col granted_role for a20
select granted_role
from dba_role_privs
where grantee = 'CONNECT'
order by 1;
no rows selected
|
없음
resource 롤에 부여된 권한 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
SQL>
set lines 200 pages 1000
col role for a10
col privilege for a30
select * from role_sys_privs
where role='RESOURCE'
order by 1, 2;
ROLE PRIVILEGE ADM COM INH
---------- ------------------------------ --- --- ---
RESOURCE CREATE ANALYTIC VIEW NO YES NO
RESOURCE CREATE ATTRIBUTE DIMENSION NO YES NO
RESOURCE CREATE CLUSTER NO YES NO
RESOURCE CREATE HIERARCHY NO YES NO
RESOURCE CREATE INDEXTYPE NO YES NO
RESOURCE CREATE MATERIALIZED VIEW NO YES NO
RESOURCE CREATE OPERATOR NO YES NO
RESOURCE CREATE PROCEDURE NO YES NO
RESOURCE CREATE PROPERTY GRAPH NO YES NO
RESOURCE CREATE SEQUENCE NO YES NO
RESOURCE CREATE SYNONYM NO YES NO
RESOURCE CREATE TABLE NO YES NO
RESOURCE CREATE TRIGGER NO YES NO
RESOURCE CREATE TYPE NO YES NO
RESOURCE CREATE VIEW NO YES NO
15 rows selected.
|
create table 등 15개의 권한이 포함되어 있음
resource 롤에 부여된 롤 확인
1
2
3
4
5
6
7
8
9
10
11
|
SQL>
set lines 200 pages 1000
col granted_role for a20
select granted_role
from dba_role_privs
where grantee = 'RESOURCE'
order by 1;
GRANTED_ROLE
--------------------
SODA_APP
|
soda_app 라는 롤이 있음
하지만 이 롤을 조회해보면 별다른 권한이 부여되어 있지 않음
1
2
3
4
5
6
7
8
9
|
SQL>
set lines 200 pages 1000
col role for a10
col privilege for a30
select * from role_sys_privs
where role='SODA_APP'
order by 1, 2;
no rows selected
|
23ai 버전에 추가된 새로운 롤인
db_developer_role 롤에 부여된 권한 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
SQL>
set lines 200 pages 1000
col role for a20
col privilege for a30
select * from role_sys_privs
where role='DB_DEVELOPER_ROLE'
order by 1, 2;
ROLE PRIVILEGE ADM COM INH
-------------------- ------------------------------ --- --- ---
DB_DEVELOPER_ROLE CREATE CUBE NO YES NO
DB_DEVELOPER_ROLE CREATE CUBE BUILD PROCESS NO YES NO
DB_DEVELOPER_ROLE CREATE CUBE DIMENSION NO YES NO
DB_DEVELOPER_ROLE CREATE DIMENSION NO YES NO
DB_DEVELOPER_ROLE CREATE DOMAIN NO YES NO
DB_DEVELOPER_ROLE CREATE JOB NO YES NO
DB_DEVELOPER_ROLE CREATE MINING MODEL NO YES NO
DB_DEVELOPER_ROLE CREATE MLE NO YES NO
DB_DEVELOPER_ROLE CREATE SESSION NO YES NO
DB_DEVELOPER_ROLE DEBUG CONNECT SESSION NO YES NO
DB_DEVELOPER_ROLE EXECUTE DYNAMIC MLE NO YES NO
DB_DEVELOPER_ROLE FORCE TRANSACTION NO YES NO
DB_DEVELOPER_ROLE ON COMMIT REFRESH NO YES NO
13 rows selected.
|
resource 롤에 부여된 롤 확인
1
2
3
4
5
6
7
8
9
10
11
|
SQL>
set lines 200 pages 1000
col granted_role for a20
select granted_role
from dba_role_privs
where grantee = 'DB_DEVELOPER_ROLE'
order by 1;
GRANTED_ROLE
--------------------
RESOURCE
|
db_developer_role 롤 안에 resource 롤도 포함되어 있음
오브젝트 권한 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
SQL>
set lines 200 pages 1000
col privilege for a30
col table_name for a30
select privilege, table_name
from dba_tab_privs
where grantee = 'DB_DEVELOPER_ROLE'
order by 1, 2;
PRIVILEGE TABLE_NAME
------------------------------ ------------------------------
EXECUTE DBMS_REDACT
EXECUTE DBMS_RLS
EXECUTE DBMS_TSDP_MANAGE
EXECUTE DBMS_TSDP_PROTECT
EXECUTE JAVASCRIPT
READ V_$PARAMETER
READ V_$STATNAME
SELECT DBA_PENDING_TRANSACTIONS
8 rows selected.
|
샘플 유저 생성하여 확인
test1 유저는 resource, connect 롤을 부여하고, test2 유저는 db_developer_role 를 부여함
1
2
3
4
5
|
SQL>
create user test1 identified by test1;
grant resource, connect to test1;
create user test2 identified by test2;
grant db_developer_role to test2;
|
test1 유저 접속 후 확인
1
2
3
4
5
6
7
|
SQL> conn test1/test1@localhost:1521/oracle23pdb1
SQL> select name, value from v$parameter where name = 'spfile';
select name, value from v$parameter where name = 'spfile'
*
ERROR at line 1:
ORA-00942: table or view "SYS"."V_$PARAMETER" does not exist
Help: https://docs.oracle.com/error-help/db/ora-00942/
|
connect 와 resource 만 준 유저에서는 v$parameter 를 조회할 수 없음
test2 유저 접속 후 확인
1
2
3
4
5
6
7
|
SQL> conn test2/test2@localhost:1521/oracle23pdb1
SQL>
select name, value from v$parameter where name = 'spfile';
NAME VALUE
---------- ----------------------------------------------------------------------
spfile /app/oracle/product/23ai/dbs/spfileoracle23.ora
|
정상적으로 표시됨
결론 :
23ai 버전에 추가된 db_developer_role 롤에는 기존에 사용하던 connect, resource 롤의 권한들도 포함되어 있고,(정확하게는 SET CONTAINER 권한은 포함되어 있지 않음)
추가로 13개의 권한들과 오브젝트 권한 8개가 더 포함됨
대표적으로 v$parameter 와 v$statname 을 볼수 있음, 이 권한들은 유용하게 사용할수 있을듯 하지만
그 외의 권한들은 잘 모르는 권한들이라 보안상의 문제가 없는지는 실제 적용전에 확인을 해보고 사용하는편이 좋아보임
참조 :
https://positivemh.tistory.com/1163
https://apex.oracle.com/pls/apex/features/r/dbfeatures/features?feature_id=1699
https://www.oracle.com/pls/topic/lookup?ctx=db23&id=DBSEG-GUID-DCEEC563-4F6C-4B0A-9EB2-9F88CDF351D7
https://blogs.oracle.com/database/post/oracle-database-23c-new-feature-db-developer-role
https://oracle-base.com/articles/23/db_developer_role-23#google_vignette
https://docs.oracle.com/en/database/oracle/oracle-database/23/refrn/DBA_SYS_PRIVS.html
https://docs.oracle.com/en/database/oracle/oracle-database/23/refrn/ROLE_SYS_PRIVS.html
https://positivemh.tistory.com/519
'ORACLE > Admin' 카테고리의 다른 글
오라클 23ai 신기능 테이블 주석 기능(Annonation) (0) | 2024.10.18 |
---|---|
오라클 23ai 신기능 bigfile 테이블스페이스 기본값 (0) | 2024.10.18 |
오라클 23ai 신기능 세미나 Part 2 발표자료(202410) (0) | 2024.10.12 |
오라클 19c 프로파일 password_life_time password_grace_time 테스트 (0) | 2024.10.08 |
오라클 19c tar 명령을 이용해 db 엔진 복제(runInstaller 미실행) (0) | 2024.09.03 |