
本文旨在系统梳理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_系列视图来查询权限和对象信息。