Oracle 23ai 中的 DB

Oracle 数据库 23ai 引入了一个全新的预定义角色 —— DB_DEVELOPER_ROLE,这个角色的设计初衷是为了便捷地为数据库开发人员分配开发工作中常用的系统权限、对象权限和角色权限。Oracle 官方认为,开发人员在日常工作

Oracle 23ai 中的 DB

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

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

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

常规方式授予和撤销 DB_DEVELOPER_ROLE:

代码语言:javascript代码运行次数:0运行复制
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 角色相关联的系统权限、角色权限和对象权限:

代码语言:javascript代码运行次数:0运行复制
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 1, 2;
no rows selected
SQL>
  • RESOURCE 角色

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

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

代码语言:javascript代码运行次数:0运行复制
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 1, 2;
no rows selected
SQL>
  • DB_DEVELOPER_ROLE 角色

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

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

代码语言:javascript代码运行次数:0运行复制
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 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
SQL>

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent 删除oracledb开发权限数据库

发布者:admin,转转请注明出处:http://www.yc00.com/web/1748108256a4732725.html

相关推荐

  • Oracle 23ai 中的 DB

    Oracle 数据库 23ai 引入了一个全新的预定义角色 —— DB_DEVELOPER_ROLE,这个角色的设计初衷是为了便捷地为数据库开发人员分配开发工作中常用的系统权限、对象权限和角色权限。Oracle 官方认为,开发人员在日常工作

    3小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信