프린트 하기

내맘대로긍정이 알려주는

Oracle 23ai 신기능
무료 세미나 발표자료

다운로드 trending_flat
2024
10.12
14:00

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://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