搜索结果

×

搜索结果将在这里显示。

🍦 3.1 Oracle检查拥有DBA权限的用户

检查 Oracle 数据库中拥有 DBA 权限的用户,通常包括以下三种情况:

  1. 被授予 DBA 角色 的用户
  2. 被直接授予 ​DBA 相关系统权限​(如 ALTER DATABASE​, CREATE USER 等)的用户(较少见)
  3. 拥有 SYSDBASYSOPER 系统权限的用户(通常通过密码文件认证)

以下提供相应的检查 SQL:

一、检查被授予 DBA 角色的用户

SELECT grantee, granted_role, admin_option, default_role
 FROM dba_role_privs
 WHERE granted_role = 'DBA'
 ORDER BY grantee;
  • grantee:被授予角色的用户或角色。
  • admin_option:是否具有将 DBA 角色授予其他用户的权限。
  • default_role​:该角色是否为默认启用(YES 表示登录时自动生效)。

注意​:如果 grantee 是角色,说明该角色被授予了 DBA 角色,再通过该角色间接授予用户,需进一步追踪。

二、检查所有被直接授予 DBA 相关系统权限的用户(含角色)

SELECT grantee, privilege, admin_option
FROM dba_sys_privs
WHERE privilege IN ('DBA', 'ALTER DATABASE', 'CREATE TABLESPACE', 'MANAGE TABLESPACE',
                    'UNLIMITED TABLESPACE', 'BECOME USER', 'CREATE USER')
   OR privilege LIKE '%ANY%'  -- 如 DROP ANY TABLE 等高级权限
ORDER BY grantee, privilege;

通常情况下,真正的 DBA 权限通过 DBA 角色授予,直接授予系统权限较少见。

三、检查拥有 SYSDBA / SYSOPER 权限的用户

这些用户可通过密码文件或操作系统认证以 SYSDBA 身份登录。

SELECT username, sysdba, sysoper
FROM v$pwfile_users
ORDER BY username;
  • sysdba​:TRUE 表示拥有 SYSDBA 权限。
  • sysoper​:TRUE 表示拥有 SYSOPER 权限。

如果密码文件不存在或未配置,v$pwfile_users​ 可能为空,但 SYSDBA​ 仍可通过操作系统认证(如 sqlplus / as sysdba)。

四、组合查询(显示所有拥有 DBA 角色或 SYSDBA 的用户)

-- 拥有 DBA 角色的用户
SELECT grantee AS username, 'DBA ROLE' AS priv_type
FROM dba_role_privs
WHERE granted_role = 'DBA'
UNION
-- 拥有 SYSDBA 的用户(来自密码文件)
SELECT username, 'SYSDBA' AS priv_type
FROM v$pwfile_users
WHERE sysdba = 'TRUE'
ORDER BY username;

五、进一步检查:通过角色链间接获得 DBA 权限

如果 DBA 角色被授予了其他角色,需递归查询。可用以下 SQL 找出所有最终继承 DBA 角色的用户:

WITH role_hierarchy (grantee, granted_role, lvl) AS (
  SELECT grantee, granted_role, 1
  FROM dba_role_privs
  WHERE granted_role = 'DBA'
  UNION ALL
  SELECT rp.grantee, rp.granted_role, rh.lvl + 1
  FROM role_hierarchy rh, dba_role_privs rp
  WHERE rh.grantee = rp.granted_role
)
SELECT grantee, 'DBA (via role chain)' AS priv_type
FROM role_hierarchy
UNION
SELECT grantee, 'DBA (direct role)'
FROM dba_role_privs
WHERE granted_role = 'DBA'
ORDER BY grantee;

六、注意事项

  • 权限过大:拥有 DBA 角色或 SYSDBA 的用户几乎可以执行任何操作,应严格控制用户列表。
阅读:142
发布时间: