您的位置:首页 > 手游攻略 > 查询Oracle 数据库用户权限的做法实用指南

查询Oracle 数据库用户权限的做法实用指南

作者:互联网  时间: 2026-10-24 16:50:01  

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“查询Oracle 数据库用户权限的做法”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

一、Oracle 权限体系说明

实际处理时,Oracle 权限分为三大类,且兼容角色嵌套继承(用户→角色→子角色→权限),查询时要区分直接权限和间接权限(借助角色继承获得):

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

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

无需 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 用户权限适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。

相关资讯

最新游戏

更多

Copyright©2010-2019. All rights reserved | 波波三国游戏官网|[email protected]

备案编号:湘ICP备2022015115号-4