Oracle赋权的回收权限是使用grant和revoke语句,但是赋权和回收权限语句执行完成后就会立即生效么?另外Oracle的权限又分为系统权限、角色权限和对象权限,这三种权限的grant和revoke生效时间又是怎样的呢。我们来看官方文档是如何说的:

Depending on what is granted or revoked, a grant or revoke takes effect at different times:

  • All grants and revokes of system and object privileges to anything (users, roles, and PUBLIC) take immediate effect.

  • All grants and revokes of roles to anything (users, other roles, PUBLIC) take effect only when a current user session issues a SET ROLE statement to reenable the role after the grant and revoke, or when a new user session is created after the grant or revoke.

You can see which roles are currently enabled by examining the SESSION_ROLES data dictionary view.

从上面的描述中我们可以知道,grant和revoke系统权限和对象权限时会立即生效,而grant或revoke角色时对当前会话不会立即生效,除非使用set role语句启用角色或重新连接会话后设置才会生效。

下面以11.2.0.4为例做一个测试,是否与官方文档描述的一致。

一、首先创建一个测试用户,赋予connect角色

sys@ORCL>create user zhaoxu identified by zhaoxu;User created.sys@ORCL>grant connect to zhaoxu;Grant succeeded.sys@ORCL>select * from dba_role_privs where grantee='ZHAOXU';GRANTEE             GRANTED_ROLE           ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
ZHAOXU                 CONNECT                NO    YESsys@ORCL>select * from dba_sys_privs where grantee='ZHAOXU';no rows selectedsys@ORCL>select * from dba_tab_privs where grantee='ZHAOXU';no rows selectedsys@ORCL>conn zhaoxu/zhaoxu
Connected.
zhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------------------------
CONNECTzhaoxu@ORCL>select * from session_privs;PRIVILEGE
------------------------------------------------------------
CREATE SESSIONzhaoxu@ORCL>create table t (id number) segment creation immediate;
create table t (id number)
*
ERROR at line 1:
ORA-01031: insufficient privileges

现在的zhaoxu用户只有CONNECT角色,只能连接到数据库,其他基本什么都做不了。

二、测试系统权限和对象权限的grant和revoke

现在打开另一个会话赋予system privilege给zhaoxu用户

--session 2
sys@ORCL>grant create table,unlimited tablespace to zhaoxu;Grant succeeded.
--session 1
zhaoxu@ORCL>select * from session_privs;PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLEzhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------------------------------------------------------
CONNECTzhaoxu@ORCL>create table t (id number) segment creation immediate;Table created.
--使用segment creation immediate是因为要避免11g的新特性段延迟创建造成影响

在赋予zhaoxu用户create table和unlimited tablespace系统权限全会话1没有做任何操作,权限就会立即生效。

再测试revoke权限的情况

--session 2
sys@ORCL>revoke unlimited tablespace from zhaoxu;Revoke succeeded.
--session 1
zhaoxu@ORCL>create table t1 (id number) segment creation immediate;
create table t1 (id number) segment creation immediate
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'USERS'zhaoxu@ORCL>select * from session_privs;PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
CREATE TABLE

同样可以看到回收操作可以立即生效,现有session无需做任何操作。

测试对象权限的grant和revoke

--grant测试
--session 1
zhaoxu@ORCL>select count(*) from zx.t;
select count(*) from zx.t*
ERROR at line 1:
ORA-00942: table or view does not exist
--session 2
sys@ORCL>grant select on zx.t to zhaoxu;Grant succeeded.sys@ORCL>select * from dba_tab_privs where grantee='ZHAOXU';GRANTEE             OWNER                  TABLE_NAME GRANTOR    PRIVILEGE  GRANTABLE HIERARCHY
------------------------------ ------------------------------ ---------- ---------- ---------- --------- ---------
ZHAOXU                 ZX                 T      ZX     SELECT     NO    NO
--session 1
zhaoxu@ORCL>select count(*) from zx.t;COUNT(*)
----------99999zhaoxu@ORCL>select * from session_privs;PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
CREATE TABLE
--revoke测试
--session 2
sys@ORCL>revoke select on zx.t from zhaoxu;Revoke succeeded.sys@ORCL>select * from dba_tab_privs where grantee='ZHAOXU';no rows selected
--session 1
zhaoxu@ORCL>select count(*) from zx.t;
select count(*) from zx.t*
ERROR at line 1:
ORA-00942: table or view does not exist

对对象权限的grant和revoke操作与系统权限的一致,所有的命令都是立即生效,包括对已经连接的会话。

三、测试角色的grant和revoke

现在的zhaoxu用户仍然只有connect角色,并且已经打开一个会话

--session 2
sys@ORCL>select * from dba_role_privs where grantee='ZHAOXU';GRANTEE                GRANTED_ROLE           ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
ZHAOXU                 CONNECT                NO    YES
--session 1
zhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------
CONNECT

测试grant DBA权限

--session 1查看会话中的角色
zhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------------------------------------------------------
CONNECT
--session 2赋予zhaoxu用户dba角色
sys@ORCL>grant dba to zhaoxu;Grant succeeded.sys@ORCL>select * from dba_role_privs where grantee='ZHAOXU';GRANTEE               GRANTED_ROLE           ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
ZHAOXU                 DBA                NO    YES
ZHAOXU                 CONNECT                NO    YES
--session 1再次查看会话中的角色,没有dba角色,也没有查看v$session的权限
zhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------------------------------------------------------
CONNECTzhaoxu@ORCL>select count(*) from v$session;
select count(*) from v$session*
ERROR at line 1:
ORA-00942: table or view does not exist
--session 1执行set role命令,可以看到DBA及相关的角色已经加载到session1中了,也可以查询v$session
zhaoxu@ORCL>set role dba;Role set.zhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------------------------------------------------------
DBA
SELECT_CATALOG_ROLE
HS_ADMIN_SELECT_ROLE
......19 rows selected.zhaoxu@ORCL>select count(*) from v$session;COUNT(*)
----------29
--使用zhaoxu用户打开session 3,可以看到新会话中默认会加载DBA及相关角色
[oracle@rhel6 ~]$ sqlplus zhaoxu/zhaoxuSQL*Plus: Release 11.2.0.4.0 Production on Sat Jan 21 16:22:01 2017Copyright (c) 1982, 2013, Oracle.  All rights reserved.Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionszhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------------------------------------------------------
CONNECT
DBA
SELECT_CATALOG_ROLE
......20 rows selected.

测试revoke DBA角色

--session 2回收DBA角色
sys@ORCL>revoke dba from zhaoxu;Revoke succeeded.sys@ORCL>select * from dba_role_privs where grantee='ZHAOXU';GRANTEE               GRANTED_ROLE           ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
ZHAOXU                 CONNECT                NO    YES
--session 3查看会话的角色,仍然有DBA及相关角色
zhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------------------------------------------------------
CONNECT
DBA
SELECT_CATALOG_ROLE
......20 rows selected.
--使用zhaoxu用户打开session 4,查看只有CONNECT角色
[oracle@rhel6 ~]$ sqlplus zhaoxu/zhaoxuSQL*Plus: Release 11.2.0.4.0 Production on Sat Jan 21 16:30:19 2017Copyright (c) 1982, 2013, Oracle.  All rights reserved.Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionszhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------------------------------------------------------
CONNECT
--session 3执行set role命令
zhaoxu@ORCL>set role dba;
set role dba
*
ERROR at line 1:
ORA-01924: role 'DBA' not granted or does not existzhaoxu@ORCL>set role all;Role set.zhaoxu@ORCL>select * from session_roles;ROLE
------------------------------------------------------------------------------------------
CONNECT

从上面的测试中可以总结出,grant和revoke系统权限和对象权限时会立即生效,而grant或revoke角色时对当前会话不会立即生效,除非使用set role语句启用角色或重新连接会话后设置才会生效。与官方文档的描述一致。

但是有一个问题是如果查看已经连接的其他会话所拥有的role呢?

官方文档:http://docs.oracle.com/cd/E11882_01/network.112/e36292/authorization.htm#DBSEG99974

system privilege:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9013.htm#BABEFFEE

object privilege:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9013.htm#BGBCIIEG

set role:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_10004.htm#SQLRF01704

转载于:https://blog.51cto.com/hbxztc/1893674

Oracle 赋权和回收权限的生效时间相关推荐

  1. oracle revoke 列_Oracle常见授权与回收权限——grant和revoke

    1.GRANT 赋于权限 常用的系统权限集合有以下三个: CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理) 常用的数据对象权限有以下五个: ALL ON 数据对象名 ...

  2. MySQL—赋权(grant)和回收权限(revoke)

    查看权限 mysql> SHOW GRANGTS FOR userA; 查看具体的用户权限 mysql> SHOW GRANGTS FOR userA@10.1.1.2; 赋权 grant ...

  3. oracle常见受权与回收权限 grant和revoke

    1.GRANT 赋于权限 常用的系统权限集合有以下三个: CONNECT(基本的连接),   RESOURCE(程序开发),   DBA(数据库管理) 常用的数据对象权限有以下五个: ALL   ON ...

  4. Oracle常见授权与回收权限——grant和revoke

    转载:http://blog.itpub.net/27106350/viewspace-758652/ 1.GRANT 赋于权限 常用的系统权限集合有以下三个: CONNECT(基本的连接), RES ...

  5. mysql 授权与回收权限_MySQL 操作命令梳理(4)-- grant授权和revoke回收权限

    在mysql维护工作中,做好权限管理是一个很重要的环节.下面对mysql权限操作进行梳理: mysql的权限命令是grant,权限撤销的命令时revoke: grant授权格式:grant 权限列表 ...

  6. mysql操作命令梳理(4)-grant授权和revoke回收权限

    在mysql维护工作中,做好权限管理是一个很重要的环节.下面对mysql权限操作进行梳理: mysql的权限命令是grant,权限撤销的命令时revoke: grant授权格式:grant 权限列表  ...

  7. Oracle中的系统权限管理

    在实际的IT项目管理中,对数据库的管理显得尤为重要,一般情况下,数据库的管理工作会有公司中的DBA人员来负责.但是,不是任何有关数据库的操作都要去联系DBA啦,万一人家不在或有其它事情不能立即处理时该 ...

  8. 循序渐进学Oracle之索引、权限、角色

    一.索引简介: 索引是用于加速数据存取的数据对象,合理的使用索引可以大大降低I/O次数,从而提高数据访问性能.索引有很多种主要介绍常用的几种: 1-单列索引: 单列索引是基于单个列所建立的索引,语法: ...

  9. Oracle中用户角色权限管理

    一,Oracle 用户,角色,权限 权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种, ...

最新文章

  1. JS学习笔记(一)DOM事件和监听
  2. 每日一皮:程序员职业服装!
  3. [二分查找] 一:子区间界限应当如何确定
  4. 《集体智慧编程》第8章
  5. 实践 | 不同行业WMS选型策略及需要注意的一些问题
  6. Super Jumping! Jumping! Jumping!(HDU-1087)
  7. xcode 常用快捷键
  8. 有了代码怎么用python爬虫_python实现简单爬虫功能
  9. VS 2005 VS2008 VS2010 设置断点,在调试时产生断点错位如何解决
  10. SpringMVC之“HelloWorld”起步
  11. ORACLE修改表空间
  12. MySQL常见的几种数据类型盘点
  13. 小学计算机学什么,小学信息技术课学什么
  14. 手机+PC电脑如何使用油猴插件和油猴脚本?
  15. python与分形0011 - 【教程】带辐条的多边形
  16. 一筐鸡蛋 1个1个拿……弱智题
  17. 牛客每日一题 飞扬的小鸟
  18. 18年下半年读书清单一览
  19. 谈谈自己的可转债策略(包含策略代码)
  20. 入门 Android Lint

热门文章

  1. 2019年上半年收集到的人工智能大神与大咖观点文章
  2. 人性经不起金钱的考验,何况是黄金 --- 我看电影《黄金兄弟》
  3. Python 越被黑越红?2 万程序员这么说......
  4. 深入浅出LSTM神经网络
  5. csdn自带的在线编辑器如何让图片并排显示
  6. 南洋理工大学研发植物“通信”设备,未来可成为环境探测器
  7. 美国计划让“人工智能”去搜寻外星人!
  8. 谷歌新智能体Dreamer将亮相NeurIPS 2019,数据效率比前身PlaNet快8个小时
  9. 尘埃落定!苹果 10 亿美元入局 5G,Intel 挥别 9 年基带业务
  10. 细胞内钾多钠少——原初生物的第三大遗迹?