查询Oracle 数据库用户权限的方法

 更新时间:2026年07月15日 09:16:01   作者:大红袍  
在Oracle数据库中,查询用户权限通常涉及到几个不同的视图和命令,本文给大家介绍查询Oracle数据库用户权限的方法,感兴趣的朋友跟随小编一起看看吧

一、Oracle 权限体系说明

Oracle 权限分为三大类,且支持角色嵌套继承(用户→角色→子角色→权限),查询时要区分直接权限和间接权限(通过角色继承获得):

  • 系统权限:数据库级别的操作权限,如 CREATE TABLE(建表)、CREATE SESSION(登录)、UNLIMITED TABLESPACE(无限表空间)等。
  • 对象权限:针对具体数据库对象(表、视图、存储过程、序列等)的操作权限,如某张表的 SELECTUPDATEEXECUTE 等。
  • 角色权限:权限的集合,可以把多个权限 / 子角色打包成角色授予用户,支持多层嵌套(最常见的如 CONNECTRESOURCEDBA 角色)。

二、查询当前登录用户的权限(普通用户可执行)

无需 DBA 权限,登录后直接运行,可查自己拥有的全部权限。

1. 直接授予的系统权限

SELECT privilege, admin_option
FROM user_sys_privs
ORDER BY privilege;
  • privilege:权限名称
  • admin_option:是否可将该权限转授给其他用户

2. 直接授予的对象权限

SELECT owner, table_name, privilege, grantable
FROM user_tab_privs_recd
ORDER BY owner, table_name, privilege;
  • owner:对象所属的用户
  • table_name:对象名称(表 / 视图 / 存储过程等)
  • grantable:是否可将该对象权限转授给他人

3. 被授予的所有角色

SELECT granted_role, admin_option, default_role
FROM user_role_privs
ORDER BY granted_role;
  • default_role:是否为默认角色(登录后自动生效)

4. 所有系统权限(含角色继承的全部权限)

SELECT DISTINCT privilege
FROM (
    -- 直接授予的系统权限
    SELECT privilege FROM user_sys_privs
    UNION ALL
    -- 角色携带的系统权限
    SELECT rp.privilege
    FROM role_sys_privs rp
    WHERE rp.role IN (SELECT granted_role FROM user_role_privs)
)
ORDER BY privilege;

5. 汇总版(看全权限)

SELECT '系统权限' AS 权限类型, privilege AS 权限名称 FROM user_sys_privs
UNION ALL
SELECT '所属角色' AS 权限类型, granted_role AS 权限名称 FROM user_role_privs
UNION ALL
SELECT '对象权限' AS 权限类型, owner||'.'||table_name||'('||privilege||')' AS 权限名称 
FROM user_tab_privs_recd
ORDER BY 权限类型, 权限名称;

到此这篇关于查询Oracle 数据库用户权限的方法的文章就介绍到这了,更多相关Oracle 用户权限内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

最新评论