在Oracle中有很多用于查权限的视图,但很多人在需要查权限时会很困惑,不知道该用哪个视图去查,这里我列出几个常见的用于查权限的视图及其用法:

1DBA_ROLE_PRIVS

该视图主要有以下2个作用:

1) 查某个user或role拥有哪些role:

select * from DBA_ROLE_PRIVS where GRANTEE='FIRGTRS';

GRANTEE                        GRANTED_ROLE                   ADM DEF

------------------------------ ------------------------------ --- ---

FIRGTRS                        GTRS_DMM_UPDATE_ROLE           NO  YES

2) 查看某个role赋给了哪些user或role:select * from DBA_ROLE_PRIVS where GRANTED_ROLE='GTRS_DMM_UPDATE_ROLE';

GRANTEE                        GRANTED_ROLE                   ADM DEF

------------------------------ ------------------------------ --- ---

GTRSOSA                        GTRS_DMM_UPDATE_ROLE           NO  YES

FIRGTRS                        GTRS_DMM_UPDATE_ROLE           NO  YES

GTRSSUP                        GTRS_DMM_UPDATE_ROLE           NO  YES

SYSTEM                         GTRS_DMM_UPDATE_ROLE           YES YES

2DBA_TAB_PRIVS

该视图的名字包含‘TAB’,且其中有一个column叫TABLE_NAME容易造成误解,其实该视图是用于查询在object上的权限,不仅仅table的权限。

select GRANTOR,GRANTEE,TABLE_NAME,PRIVILEGE from DBA_TAB_PRIVS where TABLE_NAME='PAYAGENT' order by GRANTEE;

GRANTOR         GRANTEE                                      TABLE_NAME                     PRIVILEGE

--------------- ------------------------------                            ------------------------------ ---------------

GTRS            DMM_ROLE                                        PAYAGENT                       INSERT

GTRS            DMM_ROLE                                        PAYAGENT                       UPDATE

GTRS            DMM_ROLE                                         PAYAGENT                       DELETE

GTRS            DMM_ROLE                                            PAYAGENT                       SELECT

GTRS            GTRS_DMM_READONLY_ROLE       PAYAGENT                       SELECT

GTRS            GTRS_DMM_UPDATE_ROLE           PAYAGENT                       INSERT

GTRS            GTRS_DMM_UPDATE_ROLE           PAYAGENT                       DELETE

GTRS            GTRS_DMM_UPDATE_ROLE           PAYAGENT                       UPDATE

GTRS            GTRS_DMM_UPDATE_ROLE           PAYAGENT                       SELECT

GTRS            GTRS_SUPPORT_READONLY_ROLE     PAYAGENT                       SELECT

GTRS            GTRS_SUPPORT_UPDATE_ROLE       PAYAGENT                       UPDATE

GTRS            GTRS_SUPPORT_UPDATE_ROLE       PAYAGENT                       INSERT

GTRS            GTRS_SUPPORT_UPDATE_ROLE       PAYAGENT                       DELETE

GTRS            GTRS_SUPPORT_UPDATE_ROLE       PAYAGENT                       SELECT

GTRS            SUPPORT_ROLE                                    PAYAGENT                       SELECT

3DBA_SYS_PRIVS

该视图用于查询某个user拥有哪些系统权限:

select * from DBA_SYS_PRIVS where GRANTEE='FIRGTRS';

GRANTEE                        PRIVILEGE       ADM

------------------------------ --------------- ---

FIRGTRS                        CREATE SESSION  NO

4ROLE_SYS_PRIVS

该视图用于查询某个role拥有哪些系统权限:

select * from ROLE_SYS_PRIVS where ROLE='DBA_SUPPORT';

ROLE                           PRIVILEGE                      ADM

------------------------------ ------------------------------ ---

DBA_SUPPORT                    SELECT ANY SEQUENCE            NO

DBA_SUPPORT                    SELECT ANY DICTIONARY          NO

5SESSION_PRIVS

该视图用于查询当前user拥有哪些系统权限:

select * from SESSION_PRIVS;

PRIVILEGE

------------------------------

CREATE SESSION

SELECT ANY SEQUENCE

SELECT ANY DICTIONARY

6SESSION_ROLES

该视图用于查询当前user拥有哪些role:select * from SESSION_ROLES;

ROLE

------------------------------

DBA_SUPPORT

CONNECT

SELECT_CATALOG_ROLE

HS_ADMIN_ROLE

7附注: WITH ADMIN OPTIONWITH ADMIN OPTION 是针对系统权限的,它的作用可以用下面这句话说明:

Only users who have been granted a specific system privilege with the ADMIN OPTION or users with the system privileges GRANT ANY PRIVILEGE or GRANT ANY OBJECT PRIVILEGE can grant or revoke system privileges to other users.

也就是说,对于某些权限大的user来说(比如DBA,一般拥有GRANT ANY PRIVILEGE和GRANT ANY OBJECT PRIVILEGE),WITH ADMIN OPTION对它们没有影响,因为它们本身就具有给其它user或role赋系统权限的权力;而对于一般的user来说,它们的权限都是DBA赋给它们的,如果在DBA赋给它们权限时加了WITH ADMIN OPTION, 则它们还可以把这些权限再赋给其它的user,否则不能,请看以下实验:

1) 首先用DBA账号(a105024)登陆数据库,并创建两个测试账号(testuser1, testuser2):A105024@O02DMS1>create user testuser1 identified by test1;

User created.

A105024@O02DMS1>create user testuser2 identified by test2;

User created.

2) 用DBA账号把 create session权限赋给测试账号1:A105024@O02DMS1>grant CREATE SESSION to testuser1;

Grant succeeded.

3) 用测试账号1登陆数据库,并查看测试账号1的系统权限:TESTUSER1@O02DMS1>select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM

------------------------------ ---------------------------------------- ---

TESTUSER1                       CREATE SESSION                           NO

4) 用测试账号1尝试把create session赋给其它user:TESTUSER@O02DMS1>grant CREATE SESSION to testuser2;

grant CREATE SESSION to testuser2

*

ERROR at line 1:

ORA-01031: insufficient privileges出现权限不足的错误,是因为ADM那列的值为NO.

5) 用DBA账号把create session权限赋给测试账号1,并加上with admin option:A105024@O02DMS1>grant CREATE SESSION to testuser1 with admin option;

Grant succeeded.

6) 查看测试账号1的系统权限:

TESTUSER1@O02DMS1>select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM

------------------------------ ---------------------------------------- ---

TESTUSER1                       CREATE SESSION                           YES

7) 用测试账号1把create session赋给其它user:TESTUSER@O02DMS1>grant CREATE SESSION to testuser2;

Grant succeeded.

WITH GRANT OPTION类似,只是它是针对对象权限的。

Oracle 查询权限视图的更多相关文章

  1. Oracle查询dba_extents视图很慢

    Oracle查询dba_extents视图很慢 问题描述 下边这条SQL查询每次大概要花1分钟左右,实在是比较异常. select owner,tablespace_name from dba_ext ...

  2. oracle 建立视图,创建用户并授予查询权限

    一.需求 数据库有个表car,需要为这个表建立一个视图view_car,并新建一个用户user01,赋予查询这个视图的权限 二.实施步骤 1.以管理员clgl登陆数据库,新建视图view_car: c ...

  3. Oracle总结【视图、索引、事务、用户权限、批量操作】

    前言 在Oracle总结的第一篇中,我们已经总结了一些常用的SQL相关的知识点了...那么本篇主要总结关于Oralce视图.序列.事务的一些内容... 在数据库中,我们可以把各种的SQL语句分为四大类 ...

  4. Oracle查询用户权限

    Oracle查询用户权限 -- 确定角色的权限select * from role_tab_privs ;              包含了授予角色的对象权限select * from role_ro ...

  5. Oracle创建设置查询权限用户

    用户创建的可以参考博客: https://blog.csdn.net/u014427391/article/details/84889023 Oracle授权表权限给用户: 语法:grant [权限名 ...

  6. Oracle高危安全漏洞:具有查询权限用户可绕开安全限制进行数据修改

    数据库版本 11.2.0.* 检查数据库是否存在此bug的脚本: Oracle用户执行此脚本 #!/bin/bash # Usage: 检查ORACLE数据库是否存在高危安全漏洞(具有查询权限用户可绕 ...

  7. Oracle中创建视图

    Oracle的数据库对象分为五种:表,视图,序列,索引和同义词. 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改.视图基于的表称为基表. 视图是存储在数 ...

  8. Oracle数据库学习 视图、序列及存储过程

    视图(View) 视图也被称作虚表,也就是虚拟的表,是一组数据的逻辑表示. 视图对应一个select语句,结果集被赋予一个名字,也就是视图的名字. 视图本身不包含任何数据,它只是包含映射到基表的一个查 ...

  9. Oracle数据库之视图与索引

    Oracle数据库之视图与索引 1. 视图简介 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改. 视图基于的表称为基表,视图是存储在数据字典里的一条SE ...

随机推荐

  1. 一个简单IP防刷工具类, x秒内最多允许y次单ip操作

    IP防刷,也就是在短时间内有大量相同ip的请求,可能是恶意的,也可能是超出业务范围的.总之,我们需要杜绝短时间内大量请求的问题,怎么处理? 其实这个问题,真的是太常见和太简单了,但是真正来做的时候,可 ...

  2. 【Spark篇】---Spark中transformations算子二

    一.前述 今天继续整理几个Transformation算子如下: mapPartitionWithIndex repartition coalesce groupByKey zip zipWithIn ...

  3. 快速搭建WebAPI(Odata+Code-First)附Odata条件查询表~

    Odata是什么? 开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准.该标准由微软发起,前三个版本1.0.2.0.3.0都 ...

  4. SignalR学习笔记(一) 简单聊天室

    什么是ASP.NET SignalR? ASP.NET SignalR是一个方便程序员添加实时网络通信功能的类库.所谓的实时网络通信功能(Real-time Web Functionality)就是需 ...

  5. Chapter 5 Blood Type——11

    "I just wondered… if you could warn me beforehand the next time you decide to ignore me for my ...

  6. Spring Boot (八)MyBatis + Docker + MongoDB 4.x

    一.MongoDB简介 1.1 MongoDB介绍 MongoDB是一个强大.灵活,且易于扩展的通用型数据库.MongoDB是C++编写的文档型数据库,有着丰富的关系型数据库的功能,并在4.0之后添加 ...

  7. Perl系列文章

    0.Perl书籍推荐 Perl书籍下载 密码:kkqx 下面是一些我学习Perl过程中读过完整的或部分章节的觉得好的书. 入门级别1:<Perl语言入门>即小骆驼 入门级别2:<In ...

  8. Django 系列博客(十四)

    Django 系列博客(十四) 前言 本篇博客介绍在 html 中使用 ajax 与后台进行数据交互. 什么是 ajax ajax(Asynchronous Javascript And XML)翻译 ...

  9. [日常] nginx记录post数据

    1.使用log_format指令来更改日志格式,该指令只能放在http{}段 log_format  日志名  '日志内容'; server { access_log /var/log/nginx/d ...

  10. PHP中利用pcntl实现多进程(模拟多线程)实例(转)

    windows不支持pcntl的多线程(非Unix类系统不支持此模块),pcntl在很久很久之前就听过了,但是一直没有尝试着真正要用它. 这不,遇到socket问题了,看socket,遇到pcntl了 ...