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

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角色

[email protected]>create user zhaoxu identified by zhaoxu;

User created.

[email protected]>grant connect to zhaoxu;

Grant succeeded.

[email protected]>select * from dba_role_privs where grantee=‘ZHAOXU‘;

GRANTEE 		       GRANTED_ROLE		      ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
ZHAOXU			       CONNECT			      NO	YES

[email protected]>select * from dba_sys_privs where grantee=‘ZHAOXU‘;

no rows selected

[email protected]>select * from dba_tab_privs where grantee=‘ZHAOXU‘;

no rows selected

[email protected]>conn zhaoxu/zhaoxu
Connected.
[email protected]>select * from session_roles;

ROLE
------------------------------------------------------------
CONNECT

[email protected]>select * from session_privs;

PRIVILEGE
------------------------------------------------------------
CREATE SESSION

[email protected]>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
[email protected]>grant create table,unlimited tablespace to zhaoxu;

Grant succeeded.
--session 1
[email protected]>select * from session_privs;

PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

[email protected]>select * from session_roles;

ROLE
------------------------------------------------------------------------------------------
CONNECT

[email protected]>create table t (id number) segment creation immediate;

Table created.
--使用segment creation immediate是因为要避免11g的新特性段延迟创建造成影响

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

再测试revoke权限的情况

--session 2
[email protected]>revoke unlimited tablespace from zhaoxu;

Revoke succeeded.
--session 1
[email protected]>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‘

[email protected]>select * from session_privs;

PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
CREATE TABLE

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

测试对象权限的grant和revoke

--grant测试
--session 1
[email protected]>select count(*) from zx.t;
select count(*) from zx.t
                        *
ERROR at line 1:
ORA-00942: table or view does not exist
--session 2
[email protected]>grant select on zx.t to zhaoxu;

Grant succeeded.

[email protected]>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
[email protected]>select count(*) from zx.t;

  COUNT(*)
----------
     99999

[email protected]>select * from session_privs;

PRIVILEGE
------------------------------------------------------------------------------------------------------------------------
CREATE SESSION
CREATE TABLE
--revoke测试
--session 2
[email protected]>revoke select on zx.t from zhaoxu;

Revoke succeeded.

[email protected]>select * from dba_tab_privs where grantee=‘ZHAOXU‘;

no rows selected
--session 1
[email protected]>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
[email protected]>select * from dba_role_privs where grantee=‘ZHAOXU‘;

GRANTEE 		       GRANTED_ROLE		      ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
ZHAOXU			       CONNECT			      NO	YES
--session 1
[email protected]>select * from session_roles;

ROLE
------------------------------------------
CONNECT

测试grant DBA权限

--session 1查看会话中的角色
[email protected]>select * from session_roles;

ROLE
------------------------------------------------------------------------------------------
CONNECT
--session 2赋予zhaoxu用户dba角色
[email protected]>grant dba to zhaoxu;

Grant succeeded.

[email protected]>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的权限
[email protected]>select * from session_roles;

ROLE
------------------------------------------------------------------------------------------
CONNECT

[email protected]>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
[email protected]>set role dba;

Role set.

[email protected]>select * from session_roles;

ROLE
------------------------------------------------------------------------------------------
DBA
SELECT_CATALOG_ROLE
HS_ADMIN_SELECT_ROLE
......

19 rows selected.

[email protected]>select count(*) from v$session;

  COUNT(*)
----------
	29
--使用zhaoxu用户打开session 3,可以看到新会话中默认会加载DBA及相关角色
[[email protected] ~]$ sqlplus zhaoxu/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

[email protected]>select * from session_roles;

ROLE
------------------------------------------------------------------------------------------
CONNECT
DBA
SELECT_CATALOG_ROLE
......

20 rows selected.

测试revoke DBA角色

--session 2回收DBA角色
[email protected]>revoke dba from zhaoxu;

Revoke succeeded.

[email protected]>select * from dba_role_privs where grantee=‘ZHAOXU‘;

GRANTEE 		       GRANTED_ROLE		      ADMIN_OPT DEFAULT_R
------------------------------ ------------------------------ --------- ---------
ZHAOXU			       CONNECT			      NO	YES
--session 3查看会话的角色,仍然有DBA及相关角色
[email protected]>select * from session_roles;

ROLE
------------------------------------------------------------------------------------------
CONNECT
DBA
SELECT_CATALOG_ROLE
......

20 rows selected.
--使用zhaoxu用户打开session 4,查看只有CONNECT角色
[[email protected] ~]$ sqlplus zhaoxu/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

[email protected]>select * from session_roles;

ROLE
------------------------------------------------------------------------------------------
CONNECT
--session 3执行set role命令
[email protected]>set role dba;
set role dba
*
ERROR at line 1:
ORA-01924: role ‘DBA‘ not granted or does not exist

[email protected]>set role all;

Role set.

[email protected]>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

时间: 2024-12-15 00:50:50

Oracle 赋权和回收权限的生效时间的相关文章

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

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

Oracle中的系统权限管理

在实际的IT项目管理中,对数据库的管理显得尤为重要,一般情况下,数据库的管理工作会有公司中的DBA人员来负责.但是,不是任何有关数据库的操作都要去联系DBA啦,万一人家不在或有其它事情不能立即处理时该怎么办呢?所以,掌握一些常用的数据库管理知识就很有必要的.求人不如求自己靠谱些. 鉴于此,我们先简单的介绍一下数据库中的权限管理吧!其它方面的知识点后面再记录!     在数据库中,我们一般讲权限划分为系统权限和对象权限.我们稍稍介绍一下它们的概念:    1.系统权限:能够正常的访问或使用数据库:

oracle管理角色和权限

介绍 这一部分主要看看oracle中如何管理权限和角色,权限和角色的区别在哪里. 当刚刚建立用户时,用户没有任何权限,也不能执行任何操作.如果要执行某种特定的数据库操作,则必需为其授予系统的权限:如果用户要访问其它方案的对象,则必需为其授予对象的权限,为了简化权限的管理,可以使用角色. 权限: 权限是指执行特定类型sql命令或是访问其它方案对象的权利,包括系统权限和对角权限两种. 系统权限介绍 系统权限是指执行特定类型sql命令的权利,它用于控制用户可以执行的一个或是一组数据库操作.比如当用户具

Oracle 用户、对象权限、系统权限

--================================ --Oracle 用户.对象权限.系统权限 --================================  一.用户与模式 用户:对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作 SYS用户,缺省始终创建,且未被锁定,拥有数据字典及其关联的所有对象 SYSTEM用户,缺省始终创建,且未被锁定,可以访问数据库内的所有对象 模式(schema):是某个用户拥有所有对象的集合.具有创建对象权限并创建

Oracle命令:授权-收回权限-角色

Oracle命令:授权-收回权限-角色 oracle grant 不论授予何种权限,每条授权(grant)语句总是由三部分组成: 1) 接受者部分是准备获得权限的一个或多个用户的列表. 2)关键字权限部分由grant后跟一种或多种权限组成.如果在同一条grant语句中有多个权限,权限之间用逗号分隔. 3)  表名部分由关键字o n起头并列出准备在其上授权的表. 看下面的详细介绍,主要是介绍如何把添加.删除.修改.查询四种权限授予用户,如下: 一.insert insert权限允许在其他用户的表中

Oracle 用户管理与权限分配

用户管理是系统管理员最基本的任务之一,用户想要连接数据库并且使用相应的系统资源就必须是系统的合法用户且具有对应的权限. 1 创建用户 create user latiny identified by 123456default tablespace default_tablespacetemporary tablespace temp; 创建用户时限制用户对空间的使用量 create user test2 identified by 123456default tablespace defaul

Oracle创建用户及权限设置

oracle用户创建及权限设置 权限: create session create table unlimited tablespace connect resource dba 例: #sqlplus /nolog SQL> conn / as sysdba; SQL>create user username identified by password  //创建用户并赋予密码 SQL> grant dba to username; SQL> conn username/pas

Oracle笔记之对象权限与系统权限总结

对象权限与系统权限 创建表和创建session是系统权限: 系统管理员是有权限去訪问其它表的 以sys登录 sqlplus sys/on_change_install as sysdba; 创建用户wangwu create user wangwu identified by wangwu; 系统权限 grant create session to wangwu; grant create table to wangwu; grant unlimited tablespace to wangwu

oracle创建用户赋予权限

oracle用户创建及权限设置[转载] 权限: create session create table unlimited tablespace connect resource dba 例: #sqlplus /nolog SQL> conn / as sysdba; SQL>create user username identified by password SQL> grant dba to username; SQL> conn username/password SQL