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

求Oracle SQL脚本:列出对数据库表拥有超只读权限的用户

Oracle SQL脚本:识别拥有表非只读权限的用户

以下脚本可直接查询数据库中对表拥有非只读权限(即除SELECT/READ外,包含INSERT、DELETE、UPDATE、ALTER等权限)的用户:

SELECT DISTINCT
    grantee AS 用户名,
    owner AS 表所有者,
    table_name AS 表名,
    privilege AS 拥有的非只读权限
FROM
    dba_tab_privs
WHERE
    privilege NOT IN ('SELECT', 'READ')
ORDER BY
    grantee, owner, table_name;

脚本说明

  • 依赖dba_tab_privs视图:这是Oracle存储所有用户表权限的数据字典视图,需要DBA权限才能查询。若没有DBA权限,可改用all_tab_privs,但仅能看到当前用户有权限访问的对象权限。
  • DISTINCT关键字:避免同一用户对同一表的同一种权限重复显示。
  • 过滤条件privilege NOT IN ('SELECT', 'READ'):直接排除只读类权限,筛选出所有具备修改类权限的记录。

补充:包含角色授权的情况

如果需要排查通过角色间接获得的非只读权限,可使用以下联合查询:

SELECT DISTINCT
    u.grantee AS 用户名,
    rtp.owner AS 表所有者,
    rtp.table_name AS 表名,
    rtp.privilege AS 拥有的非只读权限
FROM
    dba_role_privs u
JOIN
    role_tab_privs rtp ON u.granted_role = rtp.role
WHERE
    rtp.privilege NOT IN ('SELECT', 'READ')
UNION
SELECT DISTINCT
    grantee AS 用户名,
    owner AS 表所有者,
    table_name AS 表名,
    privilege AS 拥有的非只读权限
FROM
    dba_tab_privs
WHERE
    privilege NOT IN ('SELECT', 'READ')
ORDER BY
    用户名, 表所有者, 表名;

该查询会同时覆盖直接授权和通过角色间接授权的情况,确保不会遗漏任何具备非只读权限的用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:23:12