🌻 3.2 Oracle检查拥有 SYSDBA 权限的用户
检查拥有 SYSDBA 权限的用户,通常有两种情况:一是通过密码文件认证的用户(远程或本地使用密码),二是通过操作系统认证的用户(如 oracle 用户或属于 dba 组的用户)。以下提供具体的检查方法。
一、检查密码文件中的 SYSDBA 用户
Oracle 使用密码文件(orapw<SID>)管理以 SYSDBA 身份远程连接的用户。通过视图 V$PWFILE_USERS 可查看:
SELECT username, sysdba, sysoper
FROM v$pwfile_users
WHERE sysdba = 'TRUE'
ORDER BY username;
username:用户名sysdba:TRUE表示该用户拥有 SYSDBA 权限sysoper:TRUE表示拥有 SYSOPER 权限
注意:如果密码文件未配置或不存在,此视图可能为空。但 SYSDBA 仍可能通过操作系统认证。
二、检查操作系统认证的 SYSDBA 用户
在 Unix/Linux 系统中,属于 dba 组(或 osdba 组,具体取决于 $ORACLE_HOME/bin/oracle 文件的权限组)的操作系统用户可以直接通过 sqlplus / as sysdba 以 SYSDBA 身份登录,无需密码文件。这类用户没有记录在数据库中。
1. 查看操作系统组
id oracle
# 或查看组信息
grep dba /etc/group
通常 oracle 用户属于 dba 组,其他需要 SYSDBA 权限的操作系统用户也应被加入该组。
2. 检查 sqlnet.ora 中的认证设置
查看 $ORACLE_HOME/network/admin/sqlnet.ora 中是否有:
SQLNET.AUTHENTICATION_SERVICES = (NTS) # Windows
SQLNET.AUTHENTICATION_SERVICES = (ALL) # Unix/Linux 允许操作系统认证
如果设置为 NONE,则操作系统认证被禁用,仅密码文件认证有效。
三、综合检查:当前拥有 SYSDBA 权限的用户列表
结合密码文件和操作系统组,可得到当前实际能使用 SYSDBA 权限的用户:
-- 密码文件中拥有 SYSDBA 的用户
SELECT username, 'PASSWORD FILE' AS auth_type
FROM v$pwfile_users
WHERE sysdba = 'TRUE'
UNION ALL
-- 操作系统认证的用户(需在操作系统层面手动查看)
SELECT 'OS users in dba group', 'OPERATING SYSTEM' AS auth_type
FROM dual;
后一种需要手工通过 cat /etc/group | grep dba 获取具体用户名。
四、检查历史拥有过 SYSDBA 权限的用户(审计)
如果需要追踪谁曾经以 SYSDBA 身份登录过,需启用审计:
1. 开启审计
-- 检查审计是否开启
SHOW PARAMETER audit_trail;
-- 开启审计(需重启)
ALTER SYSTEM SET audit_trail=DB,EXTENDED SCOPE=SPFILE;
2. 审计 SYSDBA 登录
AUDIT SYSDBA;
3. 查看审计记录
SELECT username, timestamp, action_name, returncode
FROM dba_audit_trail
WHERE priv_used = 'SYSDBA'
ORDER BY timestamp;
注意:SYSDBA 审计记录可能存储在操作系统的
audit文件中,具体取决于配置。
五、总结
- 当前拥有 SYSDBA 权限的用户:密码文件中的用户(
V$PWFILE_USERS)+ 操作系统dba组中的用户。 - 曾使用 SYSDBA 登录的用户:需依靠审计日志。
- 安全建议:严格限制
dba组用户,定期审查密码文件中的用户列表,仅保留必要的管理员账户。
阅读:132
发布时间: