暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 23ai 中的 DB_DEVELOPER_ROLE 角色

9

Oracle 数据库 23ai 引入了一个全新的预定义角色 —— DB_DEVELOPER_ROLE
,这个角色的设计初衷是为了便捷地为数据库开发人员分配开发工作中常用的系统权限、对象权限和角色权限。Oracle 官方认为,开发人员在日常工作中,尤其是在构建 PL/SQL 程序、管理对象、处理作业任务以及使用新特性如 Machine Learning、Property Graph 等功能时,需要具备一定的系统能力。因此,他们整合了一系列常见权限并打包进这个专用角色中。

在 Oracle 23ai 版本发布之前,通常的做法是为开发人员授予 CONNECT
 和 RESOURCE
 两个角色来赋予最基本的开发权限。然而这两个角色的设计比较陈旧,尤其是 RESOURCE
 的权限组合在不同版本中变化较大,且并不包含一些新特性的支持权限。

DB_DEVELOPER_ROLE
 在 23ai 中的出现,相当于官方对“开发人员应该拥有哪些权限”的一次标准化定义。它不仅整合了 CONNECT
 和 RESOURCE
 的主要功能,而且增加了许多专为现代数据库开发设计的权限,其覆盖面和粒度都更贴近实际开发需求。

常规方式授予和撤销 DB_DEVELOPER_ROLE:

    conn sys/SysPassword1@//localhost:1521/testpdb as sysdba
    grant db_developer_role to testuser1;
    revoke db_developer_role from testuser1;
    复制

    CONNECT、RESOURCE 和 DB_DEVELOPER_ROLE 权限对比分析:

    为了方便理解,下面将对这三个角色分别进行权限分析,包括它们所拥有的系统权限、角色权限和对象权限。这样可以帮助我们更好地理解 DB_DEVELOPER_ROLE
     所提供的能力,以及它与传统角色之间的区别。

    • CONNECT 角色

    CONNECT
     是 Oracle 数据库中最基础的预定义角色之一,主要用于允许用户建立数据库连接。在早期版本中,它还曾包含一些额外权限,但在最新版本中被简化为仅包含最小权限,主要用于连接数据库和容器切换。

    以下是与 CONNECT
     角色相关联的系统权限、角色权限和对象权限:

      variable v_role VARCHAR2(30)
      exec :v_role := 'CONNECT';
      -- System Privileges
      select sp.privilege
      from   dba_sys_privs sp
      where  sp.grantee = :v_role
      order by 1;
      PRIVILEGE
      ----------------------------------------
      CREATE SESSION
      SET CONTAINER
      SQL>
      -- Role Privileges
      select rp.granted_role
      from   dba_role_privs rp
      where  rp.grantee = :v_role
      order by 1;
      no rows selected
      SQL>
      -- Object Privileges
      column privilege format a30
      column table_name format a30
      select tp.privilege, tp.table_name 
      from   dba_tab_privs tp
      where  tp.grantee = :v_role
      order by 12;
      no rows selected
      SQL>
      复制
      • RESOURCE 角色

      RESOURCE
       是 Oracle 早期用于支持开发工作的经典角色,它允许用户创建各种数据库对象,如表、视图、序列、过程等。Oracle 23ai 对这个角色进行了扩展,相比 19c 增加了七项系统权限,使其更贴近现代开发需求。但它仍然不具备对一些现代功能(如 MLE、Graph、Cube 等)的访问能力。

      以下是与 RESOURCE
       角色相关联的权限:

        variable v_role VARCHAR2(30)
        exec :v_role := 'RESOURCE';
        -- System Privileges
        select sp.privilege
        from   dba_sys_privs sp
        where  sp.grantee = :v_role
        order by 1;
        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
        CREATE TABLE
        CREATE TRIGGER
        CREATE TYPE
        CREATE VIEW
        15 rows selected.
        SQL>
        -- Role Privileges
        select rp.granted_role
        from   dba_role_privs rp
        where  rp.grantee = :v_role
        order by 1;
        GRANTED_ROLE
        --------------------------------------------------------------------------------
        SODA_APP
        SQL>
        -- Object Privileges
        column table_name format a30
        select tp.privilege, tp.table_name 
        from   dba_tab_privs tp
        where  tp.grantee = :v_role
        order by 12;
        no rows selected
        SQL>
        复制
        • DB_DEVELOPER_ROLE 角色

        DB_DEVELOPER_ROLE
         是 Oracle 专门为数据库开发者定义的新角色,它不仅包括连接、创建对象的基本权限,还囊括了如创建多维数据集(CUBE)、机器学习模型、调度作业、动态执行 JavaScript(MLE)等高级功能的权限。此外,该角色还自动包含了 RESOURCE
         角色以及其他扩展角色,例如 CTXAPP

        以下是与 DB_DEVELOPER_ROLE
         相关的权限列表:

          variable v_role VARCHAR2(30)
          exec :v_role := 'DB_DEVELOPER_ROLE';
          -- System Privileges
          select sp.privilege
          from   dba_sys_privs sp
          where  sp.grantee = :v_role
          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
          FORCE TRANSACTION
          ON COMMIT REFRESH
          13 rows selected.
          SQL>
          -- Role Privileges
          select rp.granted_role
          from   dba_role_privs rp
          where  rp.grantee = :v_role
          order by 1;
          GRANTED_ROLE
          --------------------------------------------------------------------------------
          CTXAPP
          RESOURCE
          SQL>
          -- Object Privileges
          column privilege format a30
          column table_name format a30
          select tp.privilege, tp.table_name 
          from   dba_tab_privs tp
          where  tp.grantee = :v_role
          order by 12;
          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
          SQL>
          复制

          在长期的数据库使用实践中,Oracle 官方一直强调“最小权限原则(Least Privilege Principle)”,即建议用户仅被授予完成任务所必需的最少权限,以降低安全风险和误操作的可能性。


          通过上述对比可以看出,DB_DEVELOPER_ROLE
           所授予的权限远多于 CONNECT
           和 RESOURCE
           两个角色的总和。这意味着它功能更强,但也需要更高的权限管控意识。

          对于一些对权限敏感的行业或单位(例如金融、电信、政务系统等),建议在启用该角色前进行评估:是否需要如此多的权限?是否所有开发人员都适合直接使用这个角色?是否应基于它自定义更细粒度的角色?

          另外,RESOURCE
           角色新增了更多权限,这意味着习惯性授予 CONNECT + RESOURCE
           角色的用户,实际上已经接近于 DB_DEVELOPER_ROLE
           所授予的权限级别。建议根据实际需求重新评估这两个角色的组合使用。

          文章转载自山东Oracle用户组,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论