在Linux操作系统下管理Oracle数据库时,查看和管理数据库用户是DBA(数据库管理员)的核心日常工作之一,要全面查看Oracle用户,最核心的方法是通过SQL*Plus工具连接数据库实例,查询系统数据字典视图,同时结合Linux系统命令验证操作系统层面的用户权限与环境配置,掌握这两类操作,不仅能获取用户的基本列表,还能深入分析用户的权限状态、默认表空间以及操作系统认证机制,从而确保数据库的安全性和可维护性。

通过SQL*Plus查询数据库内部用户信息
获取Oracle数据库用户列表最直接、最权威的方式是连接到数据库实例并查询数据字典,Oracle数据库将用户信息存储在系统视图中,其中dba_users视图包含了数据库中所有用户的详细信息,而all_users和user_users则分别包含当前用户有权限看到的用户信息及当前用户自身的信息。
需要通过Linux终端切换到oracle用户,并使用SQL*Plus以sysdba身份登录:
su oracle sqlplus / as sysdba
成功登录后,执行以下核心SQL语句可以查看所有用户及其状态:
SELECT username, account_status, created, default_tablespace, temporary_tablespace FROM dba_users ORDER BY username;
在上述查询结果中,username是数据库用户的名称;account_status非常关键,它显示了用户的状态,常见的状态包括“OPEN”(开放)、“EXPIRED”(密码过期)、“LOCKED”(锁定)或“EXPIRED & LOCKED”;default_tablespace指出了用户创建对象时默认使用的表空间,通过分析这些字段,DBA可以快速判断哪些用户处于不可用状态,哪些用户需要解锁或重置密码。
如果只需要查看当前处于“开放”状态的用户,可以使用WHERE子句进行过滤:
SELECT username FROM dba_users WHERE account_status = 'OPEN';
这种精确查询在日常巡检中非常高效,能够迅速排除干扰信息,聚焦于活跃用户。
深入分析用户权限与角色归属
仅仅知道用户存在是不够的,专业的DBA还需要了解用户的具体权限,Oracle的权限管理分为系统权限和对象权限,通常通过角色来进行封装和授权,要查看某个特定用户(SCOTT’)被授予了哪些角色,可以查询dba_role_privs视图:
SELECT granted_role, admin_option FROM dba_role_privs WHERE grantee = 'SCOTT';
这里的granted_role显示被授予的角色名,admin_option则指示该用户是否有权限将此角色再授予给其他用户。

若要查看用户直接被授予的系统权限(如CREATE SESSION, CREATE TABLE等),则需查询dba_sys_privs:
SELECT privilege, admin_option FROM dba_sys_privs WHERE grantee = 'SCOTT';
对于对象级别的权限(如对某张表的SELECT、UPDATE权限),则需要查询dba_tab_privs,通过分层查询这些视图,可以构建出完整的用户权限画像,这是进行权限审计和合规性检查的必要步骤。
结合Linux系统命令验证Oracle用户环境
Oracle数据库在Linux上运行时,依赖于操作系统层面的用户和组配置,安装Oracle软件时会创建一个特定的操作系统用户(通常命名为“oracle”),查看Linux层面的Oracle用户主要是为了确认软件安装所有者以及环境变量配置。
使用以下Linux命令可以查看系统中与Oracle相关的用户信息:
id oracle
该命令将返回oracle用户的UID(用户ID)、GID(组ID)以及所属的组列表,标准的Oracle安装通常包含oinstall(所有者组)和dba(操作系统认证组)等关键组,如果操作系统用户配置不当,可能会导致数据库无法启动或无法通过操作系统认证登录。
检查/etc/passwd文件也能确认oracle用户的家目录和默认Shell:
grep oracle /etc/passwd
环境变量是连接Linux与Oracle数据库的桥梁,查看oracle用户的.bash_profile文件,可以确认ORACLE_HOME(Oracle软件安装目录)和ORACLE_SID(数据库实例名)是否正确设置,这些环境变量决定了SQL*Plus能够找到哪个数据库实例。
高级应用:审计与安全检查
在遵循E-E-A-T原则的专业运维中,安全性是不可忽视的一环,Oracle提供了强大的审计功能,DBA可以通过查询dba_audit_session视图来查看用户的登录历史,包括成功登录和失败的尝试。

SELECT username, action_name, returncode, timestamp FROM dba_audit_session WHERE username = 'SCOTT' ORDER BY timestamp DESC;
returncode为0表示登录成功,非0值表示失败,通过分析这些日志,可以发现潜在的安全暴力破解行为或异常的账号使用模式。
查看用户的密码配置文件也是专业运维的一部分,通过dba_profiles视图,可以查看用户关联的Profile文件,从而了解密码的复杂度要求、有效期以及锁定策略:
SELECT profile, limit FROM dba_profiles WHERE profile = (SELECT profile FROM dba_users WHERE username = 'SCOTT') AND resource_name = 'PASSWORD_LIFE_TIME';
这有助于管理员制定符合安全策略的密码管理规范,防止因密码长期未更改而导致的安全风险。
相关问答
Q1:在Linux下如何解锁一个被锁定的Oracle用户?
A: 解锁用户需要使用ALTER USER命令,并且必须具有DBA权限,首先通过SQL*Plus以sysdba身份登录:sqlplus / as sysdba,然后执行命令:ALTER USER username ACCOUNT UNLOCK;,如果用户的密码同时也过期了,还需要使用IDENTIFIED BY子句重置密码,ALTER USER username IDENTIFIED BY new_password ACCOUNT UNLOCK;,执行后,建议查询dba_users视图确认account_status已变为OPEN。
Q2:如何查找当前Oracle数据库中正在连接的会话用户?
A: 要查看当前正在活跃连接的用户,可以查询v$session动态性能视图,执行SQL语句:SELECT username, osuser, machine, logon_time FROM v$session WHERE username IS NOT NULL ORDER BY logon_time DESC;,这条语句不仅显示了数据库用户名(username),还显示了对应的操作系统用户名(osuser)、客户端机器名(machine)以及登录时间,非常适合用于实时监控当前数据库的负载和用户活动情况。
能够帮助您在Linux环境下更专业、高效地查看和管理Oracle用户,如果您在实际操作中遇到特定的报错或复杂场景,欢迎在评论区留言,我们可以进一步探讨解决方案。















