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

来源:站长平台作者:陈平安
导读:本期聚焦于小伙伴创作的《Oracle 数据库用户管理与权限配置》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Oracle 数据库用户管理与权限配置》有用,将其分享出去将是对创作者最好的鼓励。

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

本文旨在系统梳理Oracle数据库中的用户管理与权限配置,内容包括登录用户信息查询、用户创建与权限分配、系统与对象权限的管理,并特别说明如何配置Enterprise Manager(EM)管理员账户。文中将穿插必要的SQL示例,并修复原有表述中的错误。

一、 查询登录用户信息

要查询当前连接到数据库的用户身份,可以使用以下任意一种SQL语句:

查看当前会话用户:SELECT USER FROM DUAL;

使用系统上下文函数:SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL;

简单命令(在某些客户端中可用):SHOW USER

请注意:若要查看数据库中所有正在登录的用户会话,必须拥有DBA(数据库管理员)权限。可以查询V$SESSION动态性能视图:

SELECT USERNAME FROM V$SESSION;

二、 查看其他用户的对象

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用户即可创建表,并自动拥有对所创建表的增、删、改、查完整权限。

第四步:查询用户权限

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

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或ALL_TABLES:

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

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

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

授权访问:

test1用户执行:GRANT SELECT ON mytab TO test;

之后,test用户可以通过模式名前缀来访问:SELECT * FROM test1.mytab;

授予所有对象权限:

GRANT ALL ON mytab TO test;

撤销对象权限:

REVOKE SELECT ON mytab FROM test;

REVOKE ALL ON mytab FROM test;

查看对象权限:

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

SELECT * FROM USER_TAB_PRIVS;

列级权限控制:

对象权限可以精细控制到列级别(但SELECT和DELETE权限无法仅针对特定列授予)。

授权更新特定列:GRANT UPDATE(name) ON mytab TO test;

授权插入特定列:GRANT INSERT(id) ON mytab TO test;

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

六、 权限传递

1. 系统权限的传递

授权时使用WITH ADMIN OPTION,被授权者可将该权限再授予其他用户。

例如,DBA执行:GRANT ALTER TABLE TO A WITH ADMIN OPTION;

则用户A可以执行:GRANT ALTER TABLE TO B;

2. 对象权限的传递

授权时使用WITH GRANT OPTION,被授权者可将该对象权限再授予其他用户。

例如,test1执行:GRANT SELECT ON mytab TO A WITH GRANT OPTION;

则用户A可以执行:GRANT SELECT ON test1.mytab TO B;

七、 配置Enterprise Manager (EM) 管理员

要创建一个能够登录并管理Oracle Enterprise Manager的用户,需要授予特定权限。

1. 基础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管理员,不拥有全部管理功能。

2. 提升为EM管理员

需要通过EM界面或命令行工具,将拥有MGMT_USER角色的用户(如testem)添加为“超级管理员”。在EM的“管理”->“管理员”页面中,可以设置其具有“有权访问所有目标的超级管理员权限”。

总结

系统权限(如CREATE SESSION, CREATE TABLE)通常由DBA用户(如SYS)进行授予和回收。

对象权限(如表、视图的SELECT权限)由对象的拥有者进行授予和回收。

权限可以通过WITH ADMIN OPTION(系统权限)或WITH GRANT OPTION(对象权限)进行传递。

合理使用USER_、ALL_、DBA_系列视图来查询权限和对象信息。

Oracle用户管理权限控制GRANT数据字典

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