当前位置:  数据库>oracle

Oracle 赋权和回收权限的生效时间

    来源: 互联网  发布时间:2017-06-26

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

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 linuxidc identified by linuxidc;
 
User created.
 
sys@ORCL>grant connect to linuxidc;
 
Grant succeeded.
 
sys@ORCL>select * from dba_role_privs where grantee='linuxidc';
 
GRANTEE              GRANTED_ROLE            ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
linuxidc                CONNECT                NO  YES
 
sys@ORCL>select * from dba_sys_privs where grantee='linuxidc';
 
no rows selected
 
sys@ORCL>select * from dba_tab_privs where grantee='linuxidc';
 
no rows selected
 
sys@ORCL>conn linuxidc/zhaoxu
Connected.
linuxidc@ORCL>select * from session_roles;
 
ROLE
------------------------------------------------------------
CONNECT
 
linuxidc@ORCL>select * from session_privs;
 
PRIVILEGE
------------------------------------------------------------
CREATE SESSION 
 
linuxidc@ORCL>create table t (id number) segment creation immediate;
create table t (id number)
*
ERROR at line 1:
ORA-01031: insufficient privileges

现在的linuxidc用户只有CONNECT角色,只能连接到数据库,其他基本什么都做不了。
二、测试系统权限和对象权限的grant和revoke
现在打开另一个会话赋予system privilege给linuxidc用户
1234567891011121314151617181920212223 --session 2
sys@ORCL>grant create table,unlimited tablespace to linuxidc;
 
Grant succeeded.
--session 1
linuxidc@ORCL>select * from session_privs;
 
PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
 
linuxidc@ORCL>select * from session_roles;
 
ROLE
------------------------------------------------------------------------------------------
CONNECT
 
linuxidc@ORCL>create table t (id number) segment creation immediate;
 
Table created.
--使用segment creation immediate是因为要避免11g的新特性段延迟创建造成影响

在赋予linuxidc用户create table和unlimited tablespace系统权限全会话1没有做任何操作,权限就会立即生效。
再测试revoke权限的情况
1234567891011121314151617 --session 2
sys@ORCL>revoke unlimited tablespace from linuxidc;
 
Revoke succeeded.
--session 1
linuxidc@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'
 
linuxidc@ORCL>select * from session_privs;
 
PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
CREATE TABLE

同样可以看到回收操作可以立即生效,现有session无需做任何操作。
测试对象权限的grant和revoke
--grant测试
--session 1
linuxidc@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 linuxidc;
 
Grant succeeded.
 
sys@ORCL>select * from dba_tab_privs where grantee='linuxidc';
 
GRANTEE              OWNER              TABLE_NAME GRANTOR    PRIVILEGE  GRANTABLE HIERARCHY
------------------------------ ------------------------------ ---------- ---------- ---------- --------- ---------
linuxidc                ZX                  T  ZX        SELECT    NO  NO
--session 1
linuxidc@ORCL>select count(*) from zx.t;
 
  COUNT(*)
----------
    99999 
 
linuxidc@ORCL>select * from session_privs;
 
PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
CREATE TABLE
--revoke测试
--session 2
sys@ORCL>revoke select on zx.t from linuxidc;
 
Revoke succeeded.
 
sys@ORCL>select * from dba_tab_privs where grantee='linuxidc';
 
no rows selected
--session 1
linuxidc@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
现在的linuxidc用户仍然只有connect角色,并且已经打开一个会话
123456789101112 --session 2
sys@ORCL>select * from dba_role_privs where grantee='linuxidc';
 
GRANTEE              GRANTED_ROLE            ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
linuxidc                CONNECT                NO  YES
--session 1
linuxidc@ORCL>select * from session_roles;
 
ROLE
------------------------------------------
CONNECT

测试grant DBA权限

--session 1查看会话中的角色
linuxidc@ORCL>select * from session_roles;
 
ROLE
------------------------------------------------------------------------------------------
CONNECT
--session 2赋予linuxidc用户dba角色
sys@ORCL>grant dba to linuxidc;
 
Grant succeeded.
 
sys@ORCL>select * from dba_role_privs where grantee='linuxidc';
 
GRANTEE              GRANTED_ROLE            ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
linuxidc                DBA                NO  YES
linuxidc                CONNECT                NO  YES
--session 1再次查看会话中的角色,没有dba角色,也没有查看v$session的权限
linuxidc@ORCL>select * from session_roles;
 
ROLE
------------------------------------------------------------------------------------------
CONNECT
 
linuxidc@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
linuxidc@ORCL>set role dba;
 
Role set. 
 
linuxidc@ORCL>select * from session_roles;
 
ROLE
------------------------------------------------------------------------------------------
DBA
SELECT_CATALOG_ROLE
HS_ADMIN_SELECT_ROLE
......
 
19 rows selected. 
 
linuxidc@ORCL>select count(*) from v$session;
 
  COUNT(*)
----------
    29
--使用linuxidc用户打开session 3,可以看到新会话中默认会加载DBA及相关角色
[oracle@rhel6 ~]$ sqlplus linuxidc/zhaoxu
 
SQL*Plus: Release 11.2.0.4.0 Production on Sat Jan 21 16:22:01 2017
 
Copyright (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 options 
 
linuxidc@ORCL>select * from session_roles;
 
ROLE
------------------------------------------------------------------------------------------
CONNECT
DBA
SELECT_CATALOG_ROLE
......
 
20 rows selected.

测试revoke DBA角色
--session 2回收DBA角色
sys@ORCL>revoke dba from linuxidc;
 
Revoke succeeded.
 
sys@ORCL>select * from dba_role_privs where grantee='linuxidc';
 
GRANTEE              GRANTED_ROLE            ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
linuxidc                CONNECT                NO  YES
--session 3查看会话的角色,仍然有DBA及相关角色
linuxidc@ORCL>select * from session_roles;
 
ROLE
------------------------------------------------------------------------------------------
CONNECT
DBA
SELECT_CATALOG_ROLE
......
 
20 rows selected.
--使用linuxidc用户打开session 4,查看只有CONNECT角色
[oracle@rhel6 ~]$ sqlplus linuxidc/zhaoxu
 
SQL*Plus: Release 11.2.0.4.0 Production on Sat Jan 21 16:30:19 2017
 
Copyright (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 options 
 
linuxidc@ORCL>select * from session_roles;
 
ROLE
------------------------------------------------------------------------------------------
CONNECT
--session 3执行set role命令
linuxidc@ORCL>set role dba;
set role dba
*
ERROR at line 1:
ORA-01924: role 'DBA' not granted or does not exist 
 
linuxidc@ORCL>set role all;
 
Role set. 
 
linuxidc@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


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 回收Oracle的监听器日志文件
  • Oracle回滚段空间回收步骤
  • ORACLE 回收站当前状态查询整理
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3