Oracle 数据库用户管理与权限配置

来源:站长平台作者:头衔:全栈工程师
导读:本期聚焦于创作的《Oracle 数据库用户管理与权限配置》,敬请观看详情。Oracle数据库的用户管理与权限配置是DBA日常工作的核心技能之一。本文从最基础的查询登录用户信息讲起,手把手教你如何创建新用户、分配系统权限和对象权限,以及如何通过WITH ADMIN OPTION和WITH GRANT OPTION实现权限的向下传递。文章还详细说明了USER、ALL、DBA_三类数据字典视图的区别和使用场景,并专门讲解了配置Enterprise Manager管理员账户的方法。全文配有清晰的SQL示例,帮助你快速掌握Oracle权限体系的核心要点。

Oracle 数据库用户管理与权限配置

Oracle数据库用户管理与权限配置完全指南:从创建到授权的详细教程

在Oracle数据库的日常运维中,用户管理和权限配置是每一位DBA必须熟练掌握的基础技能。合理的权限分配不仅关系到数据库的安全性,也直接影响业务的正常运行。本文将系统梳理Oracle数据库的用户管理流程、权限体系以及相关数据字典的使用方法,帮助你从零开始掌握这套权限管理机制。

一、查询当前登录用户信息

在实际工作中,我们经常需要确认当前数据库会话的身份。Oracle提供了多种方式来实现这一目的。

查看当前会话用户

最简单的方式是执行以下SQL语句:

SELECT USER FROM DUAL;

这条语句会返回当前会话的用户名。

使用系统上下文函数

另一种更灵活的方法是使用SYS_CONTEXT函数:

SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL;

这种方法可以获取更多关于会话环境的信息,而不仅仅是用户名。

快捷命令

在一些客户端工具中,还可以直接使用命令:

SHOW USER

需要注意的是,如果要查看数据库中所有正在登录的用户会话,必须拥有DBA权限。这时可以查询V$SESSION动态性能视图:

SELECT USERNAME FROM V$SESSION;

二、查看其他用户的对象

在Oracle数据库中,不同用户之间的对象访问受到严格限制。

DBA用户的权限

拥有DBA角色的用户(如SYS、SYSTEM)可以直接访问数据库中任何用户的表。例如,DBA用户想要查看test用户下的student表,可以直接执行:

SELECT * FROM test.student;

普通用户的限制

对于普通用户来说,默认情况下无法访问其他用户模式下的对象。如果需要跨用户访问,必须由对象的所有者进行显式授权,这一点将在后面的对象权限部分详细介绍。

三、创建与激活普通用户的完整流程

创建一个新用户并使其能够正常开展工作,通常需要经过以下几个步骤。

第一步:创建用户

使用CREATE USER语句创建用户。以下命令创建了一个名为test、密码也为test的用户:

CREATE USER test IDENTIFIED BY test;

此时,该用户虽然已经存在于数据库中,但尚未获得任何权限,甚至连登录数据库的能力都没有。

第二步:授予登录权限

为了让用户能够连接数据库,需要授予CREATE SESSION系统权限:

GRANT CREATE SESSION TO test;

完成这一步后,test用户就可以成功登录数据库了,但仍然无法创建任何数据库对象。

第三步:授予资源权限

如果希望用户能够创建表等对象,还需要进一步授权。

首先,授予建表权限:

GRANT CREATE TABLE TO test;

其次,用户需要在表空间上拥有存储数据的配额。有两种方式可以实现:

方式一:授予无限制使用表空间的权限

GRANT UNLIMITED TABLESPACE TO test;

方式二:分配具体的配额大小

ALTER USER test QUOTA 100M ON users;

完成以上授权后,test用户就可以创建自己的表了,并且自动拥有对自己所创建表的增、删、改、查完整权限。

第四步:查询用户拥有的权限

用户可以通过查询数据字典视图来查看自己拥有的系统权限:

SELECT * FROM USER_SYS_PRIVS;

这个视图会列出当前用户拥有的所有系统权限。

第五步:撤销权限

如果需要收回之前授予的权限,可以使用REVOKE命令:

REVOKE CREATE TABLE FROM test;

四、常用数据字典视图说明

Oracle提供了一系列数据字典视图,用于查询数据库中的对象和权限信息。这些视图的前缀决定了它们的可见范围,理解它们的区别非常重要。

三种视图前缀的含义

  • DBA_*:包含数据库中所有对象的信息,只有DBA用户可以访问。
  • ALL_*:包含当前用户有权访问的所有对象的信息,包括自己拥有的和他人授权给自己的。
  • USER_*:仅包含当前用户自己所拥有的对象的信息。

实际应用示例

查询当前用户拥有的表(注意对象名默认是大写的):

SELECT TABLE_NAME, TABLESPACE_NAME FROM USER_TABLES WHERE TABLE_NAME = 'STUDENT';

DBA用户如果想要查看test用户下的表,可以查询DBA_TABLES视图:

SELECT OWNER, TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES WHERE OWNER = 'TEST';

五、对象权限与跨用户访问

默认情况下,每个用户只能访问自己模式下的对象。如果用户test想要访问用户test1创建的mytab表,就必须由test1进行授权。

授予对象访问权限

test1用户执行以下命令,将mytab表的查询权限授予test用户:

GRANT SELECT ON mytab TO test;

授权完成后,test用户可以通过模式名前缀来访问这张表:

SELECT * FROM test1.mytab;

授予所有对象权限

如果希望一次性授予所有可用的对象权限,可以使用:

GRANT ALL ON mytab TO test;

撤销对象权限

撤销对象权限同样使用REVOKE命令:

REVOKE SELECT ON mytab FROM test;

或者:

REVOKE ALL ON mytab FROM test;

查看对象权限

用户可以通过USER_TAB_PRIVS视图查看自己已经被授予的对象权限:

SELECT * FROM USER_TAB_PRIVS;

列级权限控制

Oracle的对象权限可以精细控制到列级别。需要注意的是,SELECT和DELETE权限无法仅针对特定列授予,但UPDATE和INSERT权限可以。

授权更新特定列:

GRANT UPDATE(name) ON mytab TO test;

授权插入特定列:

GRANT INSERT(id) ON mytab TO test;

列级授权的信息可以查询USER_COL_PRIVS视图。

六、权限的传递机制

Oracle允许权限的接收者将权限继续传递给其他用户,但系统权限和对象权限的传递方式有所不同。

系统权限的传递

系统权限的传递使用WITH ADMIN OPTION选项。例如,DBA执行以下命令:

GRANT ALTER TABLE TO A WITH ADMIN OPTION;

那么用户A就获得了将该权限继续授予其他用户的能力,A可以执行:

GRANT ALTER TABLE TO B;

对象权限的传递

对象权限的传递使用WITH GRANT OPTION选项。例如,test1执行:

GRANT SELECT ON mytab TO A WITH GRANT OPTION;

那么用户A就可以将test1.mytab表的查询权限继续授予其他用户:

GRANT SELECT ON test1.mytab TO B;

七、配置Enterprise Manager管理员

Oracle Enterprise Manager是企业级的数据库管理工具,创建一个能够登录EM的管理员用户需要特定的权限配置。

创建基础EM访问用户

以下命令创建用户testem,并授予其登录EM所需的最低必要权限:

CREATE USER testem IDENTIFIED BY testem;
GRANT CREATE SESSION, SELECT ANY DICTIONARY TO testem;
GRANT MGMT_USER TO testem;

完成上述操作后,testem用户可以登录EM,但此时它只是一个普通用户,并不具备管理员的全部功能。

提升为EM超级管理员

如果需要将testem用户提升为EM管理员,需要通过EM的图形界面进行操作。具体路径为:登录EM后,进入"管理"菜单,选择"管理员",在管理员列表中找到testem用户,将其角色设置为"有权访问所有目标的超级管理员权限"。

总结

Oracle数据库的权限管理体系可以分为两个层面:系统权限和对象权限。

  • 系统权限(如CREATE SESSION、CREATE TABLE)通常由DBA用户(如SYS)进行授予和回收。
  • 对象权限(如表、视图的SELECT权限)由对象的拥有者进行授予和回收。
  • 权限可以通过WITH ADMIN OPTION(系统权限)或WITH GRANT OPTION(对象权限)实现向下传递。
  • 合理使用USER_ALL_DBA_系列视图,可以帮助我们高效地查询权限和对象信息。

掌握这些基础知识,你就能够在Oracle数据库中游刃有余地进行用户管理和权限配置了。

Oracle用户管理权限控制GRANT数据字典修改时间:2026-07-31 23:55:48

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。