搜索结果

×

搜索结果将在这里显示。

🌻 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
发布时间: