Oracle Database 23c 中的 DB_DEVELOPER_ROLE 是一个新角色,为数据库开发者提供了必要的基本角色和权限。这个角色比传统的 CONNECT 和 RESOURCE 角色更全面,提供了与最小权限原则相符的权限集,以增强应用程序开发过程中的安全性。
关于 DB_DEVELOPER_ROLE 的一些关键点包括:
- 它包括构建数据模型所需的系统权限和监控及调试应用程序所需的对象权限。
- 它可以在容器数据库(CDB)根或可插拔数据库(PDB)中使用。
- 它启用了如
SODA_APP(用于处理 JSON 集合)和CTXAPP(用于创建和删除 Oracle Text 首选项)等角色。
对于数据库开发者来说,这个角色简化了分配必要权限的过程,并通过避免使用 DBA 角色时可能出现的权限过度配置,坚持了安全最佳实践。
执行DB_DEVELOPER_ROLE角色的授予和撤销
要将DB_DEVELOPER_ROLE授予其他用户或角色,请使用GRANT语句,就像授予任何角色一样。例如:
GRANT DB_DEVELOPER_ROLE TO shjw;
检查授权状态:
SELECT GRANTED_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE='shijw';
撤销DB_DEVELOPER_ROLE角色:
REVOKE DB_DEVELOPER_ROLE FROM pfitch;
对比CONNECT、RESOURCE和DEVELOPER
以下三个部分显示与每个角色相关联的系统、角色和对象权限。
CONNECT角色:
SQL> variable v_role VARCHAR2(30)
SQL> exec :v_role := 'CONNECT';
PL/SQL procedure successfully completed.
SQL>
SQL>
-- System Privileges
SQL> SQL> select sp.privilege
2 from dba_sys_privs sp
3 where sp.grantee = :v_role
4 order by 1;
PRIVILEGE
----------------------------------------
CREATE SESSION
SET CONTAINER
SQL> -- Role Privileges
SQL> select rp.granted_role
2 from dba_role_privs rp
3 where rp.grantee = :v_role
4 order by 1;
no rows selected
SQL> -- Object Privileges
SQL> column privilege format a30
column table_name format a30
SQL> SQL>
SQL> select tp.privilege, tp.table_name
from dba_tab_privs tp
2 3 where tp.grantee = :v_role
4 order by 1, 2;
no rows selected
RESOURCE 角色:
以下是与 RESOURCE 角色关联的系统、角色和对象权限。与 19c 相比,23ai 中向 RESOURCE 角色授予的系统权限多了 7 个。
SQL> variable v_role VARCHAR2(30)
SQL> exec :v_role := 'RESOURCE';
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL> -- System Privileges
SQL> select sp.privilege
2 from dba_sys_privs sp
3 where sp.grantee = :v_role
order by 1; 4
PRIVILEGE
------------------------------
CREATE ANALYTIC VIEW
CREATE ATTRIBUTE DIMENSION
CREATE CLUSTER
CREATE HIERARCHY
CREATE INDEXTYPE
CREATE MATERIALIZED VIEW
CREATE OPERATOR
CREATE PROCEDURE
CREATE PROPERTY GRAPH
CREATE SEQUENCE
CREATE SYNONYM
PRIVILEGE
------------------------------
CREATE TABLE
CREATE TRIGGER
CREATE TYPE
CREATE VIEW
15 rows selected.
SQL> -- Role Privileges
SQL> select rp.granted_role
2 from dba_role_privs rp
3 where rp.grantee = :v_role
4 order by 1;
GRANTED_ROLE
--------------------------------------------------------------------------------
SODA_APP
SQL> -- Object Privileges
SQL> column table_name format a30
SQL>
SQL> select tp.privilege, tp.table_name
2 from dba_tab_privs tp
3 where tp.grantee = :v_role
4 order by 1, 2;
no rows selected
SQL>
以下为19c的信息:
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> variable v_role VARCHAR2(30)
SQL> exec :v_role := 'RESOURCE';
PL/SQL procedure successfully completed.
SQL> SQL>
SQL> -- System Privileges
SQL> select sp.privilege
2 from dba_sys_privs sp
3 where sp.grantee = :v_role
4 order by 1;
PRIVILEGE
----------------------------------------
CREATE CLUSTER
CREATE INDEXTYPE
CREATE OPERATOR
CREATE PROCEDURE
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE TYPE
8 rows selected.
SQL> -- Role Privileges
SQL> select rp.granted_role
2 from dba_role_privs rp
3 where rp.grantee = :v_role
4 order by 1;
GRANTED_ROLE
--------------------------------------------------------------------------------
SODA_APP
SQL> -- Object Privileges
SQL> column table_name format a30
SQL>
SQL> select tp.privilege, tp.table_name
2 from dba_tab_privs tp
3 where tp.grantee = :v_role
4 order by 1, 2;
no rows selected
SQL>
DB_DEVELOPER_ROLE 角色:
以下是与 DB_DEVELOPER_ROLE 角色关联的系统、角色和对象权限。
SQL> variable v_role VARCHAR2(30)
SQL> exec :v_role := 'DB_DEVELOPER_ROLE';
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL> -- System Privileges
SQL> select sp.privilege
2 from dba_sys_privs sp
3 where sp.grantee = :v_role
4 order by 1;
PRIVILEGE
------------------------------
CREATE CUBE
CREATE CUBE BUILD PROCESS
CREATE CUBE DIMENSION
CREATE DIMENSION
CREATE DOMAIN
CREATE JOB
CREATE MINING MODEL
CREATE MLE
CREATE SESSION
DEBUG CONNECT SESSION
EXECUTE DYNAMIC MLE
PRIVILEGE
------------------------------
FORCE TRANSACTION
ON COMMIT REFRESH
13 rows selected.
SQL> -- Role Privileges
SQL> select rp.granted_role
from dba_role_privs rp
2 3 where rp.grantee = :v_role
4 order by 1;
GRANTED_ROLE
--------------------------------------------------------------------------------
CTXAPP
RESOURCE
SQL> -- Object Privileges
SQL> column privilege format a30
SQL> column table_name format a30
SQL>
SQL> select tp.privilege, tp.table_name
2 from dba_tab_privs tp
3 where tp.grantee = :v_role
4 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.
SQL>
总的来说,DB_DEVELOPER_ROLE角色是为了提高数据库开发的安全性和效率而设计的,它确保了开发者能够在一个更安全、更高效的环境中工作。这个角色是对传统 CONNECT和RESOURCE角色的一个重要补充,它提供了一个更加全面和细致的权限集,以支持现代数据库开发的需求。大家如果有什么见解,欢迎评论区交流!
欲知更多精彩内容,请关注下一期公众号!

最后修改时间:2024-09-09 21:20:36
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




