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如何获取数据库系统的当前时间问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Oracle文本函数简介

    Oracle文本函数简介

    Oracle数据库提供了很多函数供我们使用,下面为您介绍的Oracle函数是文本函数,如果您对此方面感兴趣的话,不妨一看。
    2015-08-08
  • 关于Oracle数据库dbLink的创建和使用详解

    关于Oracle数据库dbLink的创建和使用详解

    这篇文章主要介绍了关于Oracle数据库dbLink的创建和使用详解,Oracle的数据库链路dbLink是一种允许在两个不同的数据库实例之间进行通信和数据交换的功能,它可以让你在一个数据库中访问另一个数据库的对象和数据,需要的朋友可以参考下
    2023-08-08
  • Oracle 10g的DBA无法登录解决方案

    Oracle 10g的DBA无法登录解决方案

    很多时候当装好Oracle10g后,登录http://kcsqlbi:5560/isqlplus/dba弹出的Windows认证窗口,尽管输入什么帐号,都无法登录。
    2009-05-05
  • oracle使用to_date查询一周的第一天日期

    oracle使用to_date查询一周的第一天日期

    项目的开发中需要用到一个查询一周的第一天日期的函数搜索N久很难找到解决的方法 只要自己写一个先用着 代码如下 a_week格式为 'YYYYIW' 如 '200801'表示2008年的第一周
    2014-01-01
  • oracle初始化参数设置

    oracle初始化参数设置

    oracle初始化参数设置...
    2007-03-03
  • Oracle中实现删除重复数据只保留一条

    Oracle中实现删除重复数据只保留一条

    这篇文章主要介绍了Oracle中实现删除重复数据只保留一条,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Oracle安装过程中物理内存检查及临时temp空间不足问题解决

    Oracle安装过程中物理内存检查及临时temp空间不足问题解决

    Oracle安装过程物理内存检查及临时temp空间不足的情况,想必有很多的朋友都有遇到过吧,下面与大家分享下具体的解决方法,感兴趣的朋友可以参考下哈
    2013-07-07
  • Oracle Session每日统计功能实现

    Oracle Session每日统计功能实现

    客户最近有这样的需求,想通过统计Oracle数据库活跃会话数,并记录在案,利用比对历史的活跃会话的方式,实现对系统整体用户并发量有大概的预估,本文给大家分享具体实现方法,感兴趣的朋友一起看看吧
    2022-02-02
  • Oracle表分区详解

    Oracle表分区详解

    本文详细讲解了Oracle表分区的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05

最新评论