Oracle查询用户权限

Oracle查询用户权限

数据字典
1、动态数据字典是以v$xxx开始的数据字典,在数据库中约有150个左右,这些数据字典反映数据库动态运行状况,在不同时间查询会得到不同的结果。
2、DBA数据字典是以DBA_xxx表示,该数据字典存储数据库结构,查询DBA数据字典可以反映数据库结构设置,管理磁盘空间和表空间、事务与回退段、用户与表空间等信息。
3、用户数据字典是以USER_xxx表示,这些数据字典反应用户所创建的实体信息。如,USER_TABLES、USER_VIEWS,数据库管 理员具有操作全体用户所有实体的权限,可以查询这类数据字典,了解用户所创建实体状况,必要时可以将用户创建的不正确的实体删除。
4、ALL_xxx类数据字典,表示用户所创建的实体及用户有权可以存取的实体。

select privilege from dba_SYS_privs where grantee='USERNAME'   ---查询用户被赋予的系统权限

DBA_SYS_PRIVS:

DBA_SYS_PRIVS describes system privileges granted to users and roles.

DBA_TAB_PRIVS:

DBA_TAB_PRIVS describes all object grants in the database.



Oracle查询用户权限

-- 确定角色的权限
select * from role_tab_privs ;     ---包含了授予角色的对象权限
select * from role_role_privs;     ---包含了授予另一角色的角色
select * from role_sys_privs;      ---包含了授予角色的系统权限
                                   
-- 确定用户帐户所授予的权限
select * from DBA_tab_privs ;      ----直接授予用户帐户的对象权限
select * from DBA_role_privs;      ----授予用户帐户的角色
select * from DBA_sys_privs;       ----授予用户帐户的系统权限

查看当前用户权限:
select * from session_privs;         --------SESSION_PRIVS describes the privileges that are currently available to the user.

PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE TABLE
CREATE CLUSTER
CREATE SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER

8 rows selected. 
        

SESSION_ROLES :

v$SESSION_ROLES describes the roles that are currently enabled to the user.


一. 概述

与权限,角色相关的视图大概有下面这些:
DBA_SYS_PRIVS:     查询某个用户所拥有的系统权限
USER_SYS_PRIVS:    当前用户所拥有的系统权限
SESSION_PRIVS:     当前用户所拥有的全部权限
ROLE_SYS_PRIVS:    某个角色所拥有的系统权限
 
 注意: 要以SYS用户登陆查询这个视图,否则返回空.

ROLE_ROLE_PRIVS:    当前角色被赋予的角色
SESSION_ROLES:      当前用户被激活的角色
USER_ROLE_PRIVS:    当前用户被授予的角色

另外还有针对表的访问权限的视图:

 DBA_TAB_PRIVS describes all object grants in the database.

  DBA_TAB_PRIVS:
  ALL_TAB_PRIVS   
  ROLE_TAB_PRIVS:     某个角色被赋予的相关表的权限

ROLE_TAB_PRIVS describes table privileges granted to roles. Information is provided only about roles to which the user has access.


 
      
二. Examples
1. 查询当前用户所拥有的权限
Select * from session_privs;  
                
2.查询某个用户被赋予的系统权限.
可以有多种方式:
Select * from user_sys_privs;
或者:
select * from DBA_SYS_PRIVS where grantee='XXX'
 
3. 查询当前用户被授予的角色:
3.1. Select * from SESSION_ROLES order by ROLE  
说明: 这个查询会返回当前用户所被授予的全部角色, 其中包括嵌套授权的角色. 例如将DBA角色授予了一个用户,DBA角色已经被授予的角色(例如 exp_full_database 和 imp_full_database) 也会被查询出来              

3.2. Select * from USER_ROLE_PRIVS
v$user_role_privs:USER_ROLE_PRIVS describes the roles granted to the current user.   
    
4. 查询某一角色被赋予的系统权限
Select Privilege from ROLE_SYS_PRIVS where ROLE=&Role;

输入 role='CONNECT'

输出:
PRIVILEGE
--------------------
ALTER SESSION
CREATE CLUSTER
CREATE DATABASE LINK
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE TABLE
CREATE VIEW
         
5. 查询当前角色授予的角色
Select GRANTED_ROLE from ROLE_ROLE_PRIVS where ROLE=&ROLE;

输入 role= 'DBA'

输出:

  GRANTED_ROLE
  ----------------------
  DELETE_CATALOG_ROLE
  EXECUTE_CATALOG_ROLE
  EXP_FULL_DATABASE
  IMP_FULL_DATABASE
  PLUSTRACE
  SELECT_CATALOG_ROLE

说明: PLUSTRACE这个角色是用于执行SQL AUTO TRACE的, 通过执行$ORACLE_HOME/sqlplus/admin/plustrce.sql可以生成这个角色.

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

如何查看oracle用户权限

ORACLE数据字典视图的种类分别为:USER,ALL 和 DBA。
USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息
ALL_*:有关用户可以访问的对象的信息,即用户自己创建的对象的信息加上其他用户创建的对象但该用户有权访问的信息
DBA_*:有关整个数据库中对象的信息

1、查看所有用户
select * from dba_user;
select * from all_users;
select * from user_users;

2、查看用户系统权限
select * from dba_sys_privs;
select * from all_sys_privs;
select * from user_sys_privs;

3、查看用户对象权限
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;

4、查看所有角色
select * from dba_roles;

5、查看用户所拥有的角色
select * from dba_role_privs;
select * from user_role_privs;

6、查看当前用户的缺省表空间
select username,default_tablespace from user_users;

7、查看某个角色的具体权限
select * from role_sys_privs;
select * from role_tab_privs;

8、查看RESOURCE具有那些权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';

=====补充====================================================================
如何查看某个角色被授予的权限Oracle
select * from dba_role_privs; 授予用户和其他角色的角色
select * from dba_sys_privs;  授予用户和其他角色的系统权限
select * from dba_tab_privs;  数据库中对象的所有授权

oracle 角色和权限的关系查看
例如:要查看 scott 具有的角色,可查询 dba_role_privs;  
select * from dba_role_privs where grantee='SCOTT';  
 
查询 orale 中所有的系统权限,一般是dba  
select * from system_privilege_map order by name;  

查询 oracle 中所有对象权限,一般是dba  
select distinct privilege from dba_tab_privs;  

查询 oracle 中所有的角色,一般是dba  
select * from dba_roles;  

查询数据库的表空间  
select tablespace_name from dba_tablespaces;  
 
问题 1:如何查询一个角色包括的权限  
 a.一个角色包含的系统权限  
   select * from dba_sys_privs where grantee='角色名';

   select * from dba_sya_privs where grantee='COONNECT'; connect要大写
   另外也可以这样查看:  
   select * from role_sys_privs where role='角色名';
   
 b.一个角色包含的对象权限  
    select * from dba_tab_privs where grantee='角色名';
      
问题 2:oracle 究竟多少种角色  
elect * from dba_roles;  

问题 3:如何查看某个用户具什么样的角色  
select * from dba_role_privs where grantee='用户名'  

问题4:显示当前用户可以访问的所有数据字典视图。
select * from dict where comments like '%grant%';  

问题5:显示当前数据库的全称
select * from global_name;  
 

问题6:查看Oracle用户权限的七种方法

查看Oracle用户权限一般要通过一些实际操作,首先需要遍历所有用户,然后才是查看Oracle用户的权限等等操作。希望本文能给大家有所帮助。
6.1.查看所有用户:
    select * from dba_users;  
    select * from all_users;  
    select * from user_users;

6.2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
    select * from dba_sys_privs;  
    select * from user_sys_privs;

6.3.查看角色(只能查看登陆用户拥有的角色)所包含的权限
   select * from role_sys_privs;

6.4.查看用户对象权限:
    select * from dba_tab_privs;  
    select * from all_tab_privs;  
    select * from user_tab_privs;

6.5.查看所有角色:
    select * from dba_roles;

6.6.查看用户或角色所拥有的角色:
    select * from dba_role_privs;  
    select * from user_role_privs;

6.7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
    select * from V$PWFILE_USERS  


请使用浏览器的分享功能分享到微信等