作者:Digital Observer(施嘉伟)
Oracle ACE Associate: Database
PostgreSQL ACE Partner
11年数据库行业经验,现主要从事数据库服务工作
拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证
ITPUB认证专家、PolarDB开源社区技术顾问
国内某高校企业实践指导教师
公众号:Digital Observer;CSDN:施嘉伟;ITPUB:sjw1933;PGFans:施嘉伟。
Oracle Database 23c 中的 DB_DEVELOPER_ROLE 是一个新角色,为数据库开发者提供了必要的基本角色和权限。这个角色比传统的 CONNECT 和 RESOURCE 角色更全面,提供了与最小权限原则相符的权限集,以增强应用程序开发过程中的安全性。
包括构建数据模型所需的系统权限和监控及调试应用程序所需的对象权限。
可以在CDB或PDB中使用。
启用了如 SODA_APP(用于处理 JSON 集合)和 CTXAPP(用于创建和删除 Oracle Text 首选项)等角色。
要将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 shijw;以下三个部分显示与每个角色相关联的系统、角色和对象权限。
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 selectedRESOURCE 角色:
以下是与 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角色的一个重要补充,它提供了一个更加全面和细致的权限集,以支持现代数据库开发的需求。大家如果有什么见解,欢迎评论区交流!
欲知更多精彩内容,请关注下一期公众号!



原文作者:Digital Observer;如有侵权,请联系管理员删除。