Oracle查询用户拥有所有系统权限的方法

 更新时间:2024年12月27日 09:21:36   作者:数据派  
这篇文章主要介绍了Oracle查询用户拥有所有系统权限,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

Oracle查询用户拥有所有系统权限

SQL> desc dba_sys_privs;   查询对象拥有的系统权限
 Name                                     Null?    Type
 ---------------------------------------- -------- ---------------------------
 GRANTEE                                  NOT NULL VARCHAR2(30)
 PRIVILEGE                                NOT NULL VARCHAR2(40)
 ADMIN_OPTION                                      VARCHAR2(3)
SQL> select * from dba_sys_privs where grantee='HR';
GRANTEE                        PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
HR                             UNLIMITED TABLESPACE                     NO
HR                             CREATE SESSION                           NO
HR                             CREATE TABLE                             NO
SQL> desc dba_role_privs;
 Name                                     Null?    Type
 ---------------------------------------- -------- ---------------------------
 USERNAME                                          VARCHAR2(30)
 GRANTED_ROLE                                      VARCHAR2(30)
 ADMIN_OPTION                                      VARCHAR2(3)
 DEFAULT_ROLE                                      VARCHAR2(3)
 OS_GRANTED                                        VARCHAR2(3)
SQL> select * from dba_role_privs where grantee='HR';对象拥有的角色
GRANTEE                        GRANTED_ROLE                   ADM DEF
------------------------------ ------------------------------ --- ---
HR                             RESOURCE                       NO  YES
SQL> select * from role_sys_privs where ROLE='RESOURCE';  通过角色查找权限
ROLE                           PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
RESOURCE                       CREATE TRIGGER                           NO
RESOURCE                       CREATE SEQUENCE                          NO
RESOURCE                       CREATE TYPE                              NO
RESOURCE                       CREATE PROCEDURE                         NO
RESOURCE                       CREATE CLUSTER                           NO
RESOURCE                       CREATE OPERATOR                          NO
RESOURCE                       CREATE INDEXTYPE                         NO
RESOURCE                       CREATE TABLE                             NO
SQL>  select a.granted_role,b.privilege,c.privilege
     From dba_role_privs a,role_sys_privs b ,dba_sys_privs c
   Where a.granted_role=b.role and a.grantee=c.grantee and a.grantee='HR
RESOURCE        CREATE SEQUENCE      UNLIMITED TABLESPACE
RESOURCE        CREATE INDEXTYPE     CREATE SESSION
--看起来很美好,但是这是等值才返回结果,1=1=1   3*8=24t条记录
select a.granted_role,b.privilege,c.privilege from dba_role_privs
a join role_sys_privs b on a.granted_role=b.role join dba_sys_privs
c on a.grantee=c.grantee and a.grantee='HR';  --一样无法达到效果;
--a  通过用户查找拥有的角色
select * from dba_role_privs  grantee granted_role
-b  通过角色查找拥有的权限
select * from role_sys_privs    1-2 role  granted_role
-c 通过用户查找拥有的系统权限
select * from dba_sys_privs  1-3 grantee 
--思路1+2=2 => 2+3=总
select * from (select a.grantee,b.privilege from
 dba_role_privs a join role_sys_privs b on a.granted_role=b.role
  union
   select c.grantee,c.privilege from dba_sys_privs c)
    where grantee='HR';
--于上一样--where条件执行速度更快
select a.grantee,b.privilege from
 dba_role_privs a join role_sys_privs b 
    on a.granted_role=b.role where grantee='HR'
  union 
   select c.grantee,c.privilege from dba_sys_privs c where grantee='HR';
意义:有些权限不是通过角色单独授予、或者单独授予权限:通过集合更好查找用户有啥权限
 ****补充:
--什么是对象权限,设计到具体的针对某一个对象的权限;
grant select on scott.dept to hr;
查询会有具体对象的权限;
select * from dba_tab_privs where grantee='HR';
HR         SYS        YANG       SYS        WRITE      NO  NO
HR         SYS        YANG       SYS        READ       NO  NO
HR         SYS        DBMS_STATS SYS        EXECUTE    NO  NO
HR         SCOTT      DEPT       SCOTT      SELECT     NO  NO
回收: revoke execute on sys.DBMS_STATS from hr;

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

相关文章

  • 详解oracle中通过触发器记录每个语句影响总行数

    详解oracle中通过触发器记录每个语句影响总行数

    这篇文章主要介绍了详解oracle中通过触发器记录每个语句影响总行数的相关资料,需要的朋友可以参考下
    2017-06-06
  • Oracle SCN与检查点详解

    Oracle SCN与检查点详解

    这篇文章主要介绍了Oracle SCN与检查点的相关内容,涉及SCN的定义,获取方式,以及检查点的相关介绍,需要的朋友可以了解下。
    2017-09-09
  • ORACLE如何批量插入(Insert)

    ORACLE如何批量插入(Insert)

    这篇文章主要介绍了ORACLE如何批量插入(Insert),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • oracle group by语句实例测试

    oracle group by语句实例测试

    本文将详细介绍oracle group by语句,以实例进行测试,需要的朋友可以参考下
    2012-11-11
  • Oracle Users表空间重命名问题解决

    Oracle Users表空间重命名问题解决

    这篇文章主要介绍了Oracle Users表空间重命名问题,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Oracle配置dblink访问PostgreSQL的操作方法

    Oracle配置dblink访问PostgreSQL的操作方法

    本文给大家介绍下Oracle配置dblink访问PostgreSQL的操作方法,通过dblink访问PostgreSQL的详细过程,对Oracle dblink访问PostgreSQL相关知识感兴趣的朋友一起看看吧
    2022-03-03
  • Oracle数据库创建dblink的过程及其用法实例详解

    Oracle数据库创建dblink的过程及其用法实例详解

    这篇文章主要给大家介绍了Oracle数据库创建dblink的过程及其用法的相关资料,dblink是Oracle数据库中用于连接不同数据库实例的机制,允许用户在一个数据库实例中直接查询或操作另一个数据库实例中的数据,需要的朋友可以参考下
    2024-12-12
  • oracle学习笔记(三)

    oracle学习笔记(三)

    最近需要用的oracle,所以大家好好的学习下基础并整理下资料,希望能帮助到需要的朋友。
    2011-12-12
  • Oracle用户密码含有特殊字符导致无法登陆解决方法

    Oracle用户密码含有特殊字符导致无法登陆解决方法

    在客户端上使用sqlplus用普通用户可以登录,但是system以及sys用户均无法登录,提示ORA-12154: TNS: 无法解析指定的连接标识符,本文将提供详细的解决方法,需要了解的朋友可以参考下
    2012-11-11
  • Oracle使用in语句不能超过1000问题的解决办法

    Oracle使用in语句不能超过1000问题的解决办法

    最近项目中使用到了Oracle中where语句中的in条件查询语句,在使用中发现了问题,所以下面这篇文章主要给大家介绍了关于Oracle使用in语句不能超过1000问题的解决办法,需要的朋友可以参考下
    2022-05-05

最新评论