You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle授予SELECT ANY TABLE权限后无法在dba_tab_privs查到记录的问题

问题核心原因

SELECT ANY TABLE 是Oracle的系统权限,而非对象权限,你查询的DBA_TAB_PRIVS视图仅存储对象级权限的授予记录,因此无法匹配到该权限的相关数据。

视图权限存储范围说明

  • DBA_TAB_PRIVS:仅记录针对特定对象(例如具体表、视图、存储过程等)的对象权限授予记录,只有类似GRANT SELECT ON scott.emp TO BARTSIMPSON这类指定了具体对象的授权,才会写入该视图。
  • DBA_SYS_PRIVS:存储所有系统级权限的授予记录,你执行的GRANT SELECT ANY TABLE TO BARTSIMPSON属于系统权限,相关记录会保存在该视图中。

验证授权结果的方法

执行以下SQL即可查询到对应的授权记录:

SELECT grantee, privilege, admin_option
FROM dba_sys_privs
WHERE grantee = 'BARTSIMPSON'
  AND privilege = 'SELECT ANY TABLE';

额外排查场景

如果执行上述语句依然无返回结果,可检查是否是将SELECT ANY TABLE权限授予给了BARTSIMPSON所属的角色,而非直接授予用户本人:

  1. 先查询用户所属的所有角色
SELECT granted_role FROM dba_role_privs WHERE grantee = 'BARTSIMPSON';
  1. 再查询对应角色是否被授予了目标系统权限
SELECT grantee, privilege, admin_option
FROM dba_sys_privs
WHERE privilege = 'SELECT ANY TABLE'
  AND grantee IN (上一步查询到的角色列表);

内容的提问来源于stack exchange,提问作者CrazyCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:27:02