返回顶部
首页 > 资讯 > 数据库 >Oracle 赋权和回收权限的生效时间
  • 202
分享到

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

2024-04-02 19:04:59 202人浏览 安东尼
摘要

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 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	YES

sys@ORCL>select * from dba_sys_privs where grantee='ZHAOXU';

no rows selected

sys@ORCL>select * from dba_tab_privs where grantee='ZHAOXU';

no rows selected

sys@ORCL>conn zhaoxu/zhaoxu
Connected.
zhaoxu@ORCL>select * from session_roles;

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

zhaoxu@ORCL>select * from session_privs;

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

zhaoxu@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 TABLE

zhaoxu@ORCL>select * from session_roles;

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

zhaoxu@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(*)
----------
     99999

zhaoxu@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
------------------------------------------------------------------------------------------
CONNECT

zhaoxu@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/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

zhaoxu@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/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

zhaoxu@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 exist

zhaoxu@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



您可能感兴趣的文档:

--结束END--

本文标题: Oracle 赋权和回收权限的生效时间

本文链接: https://lsjlt.com/news/51762.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle 赋权和回收权限的生效时间
    Oracle赋权的回收权限是使用grant和revoke语句,但是赋权和回收权限语句执行完成后就会立即生效么?另外Oracle的权限又分为系统权限、角色权限和对象权限,这三种权限的grant和revoke生...
    99+
    2024-04-02
  • oracle权限的分配与回收
    权限的分配:1、grant用于将角色、系统权限、对象权限赋予用户、角色。2、赋权的前提条件:系统权限:有"grant any privilege"的系统权限、被授予该系统权限时使用了 "admin opti...
    99+
    2024-04-02
  • oracle将某表的权限赋予某一用户
    命令:grant  xxx(权限) on Tablename to USERname; ...
    99+
    2024-04-02
  • Oracle的基本操作-解除用户,赋予权限
    一、表的基本操作1. 用户管理 1.1 初始状态下系统的用户在系统用户下,执行下面的查询语句可以查看到当前系统的所有用户  select * from dba_users;1....
    99+
    2024-04-02
  • Oracle如何创建表空间、创建数据库用户、赋权限
    这篇文章将为大家详细讲解有关Oracle如何创建表空间、创建数据库用户、赋权限,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 创建表空间:c...
    99+
    2024-04-02
  • oracle如何创建表空间,创建用户,给用户赋权限
    小编给大家分享一下oracle如何创建表空间,创建用户,给用户赋权限,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!--创建临时表空间create temporary tablespace ...
    99+
    2024-04-02
  • Oracle中定义者权限和调用者权限的示例分析
    这篇文章给大家分享的是有关Oracle中定义者权限和调用者权限的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。定义者权限:定义者权限指使用它所有者的权限,而不是当前用户来...
    99+
    2024-04-02
  • 解决SpringSecurity的权限配置不生效问题
    目录SpringSecurity权限配置不生效1、不生效的例子 2、解决办法SpringSecurity动态配置权限导入依赖相关配置创建UserMapper类&&a...
    99+
    2024-04-02
  • 如何实现MySQL中收回用户权限的语句?
    如何实现MySQL中收回用户权限的语句?在MySQL数据库中,我们经常需要管理用户权限。然而,有时候我们可能需要收回某些用户的权限,以保障数据库的安全性。本文将介绍如何使用具体的代码示例来实现在MySQL中收回用户权限的方法。首先,我们需要...
    99+
    2023-11-08
    权限 语句
  • 在sql中回收用户操作权限的命令是
    在 sql 中,回收用户操作权限的命令是 revoke,其语法如下:revoke [grant option for] on from 。权限可以是 select、inse...
    99+
    2024-05-02
  • Oracle表空间与权限的深入讲解
    目录表空间表空间的典型应用默认表空间表空间查询命令创建表空间创建临时表空间删除表空间用户与表空间的关系权限分类系统权限给用户授权撤销用户权限角色查看权限总结表空间 表空间是数据库的...
    99+
    2024-04-02
  • Oracle创建用户,并赋于只读某几张表的权限
    #进入数据库 su - oracle sqlplus / as sysdba #创建只读用户 create user kms identified by "123@456"; grant connect t...
    99+
    2024-04-02
  • ODBC连接Oracle时遇到权限问题的处理
    在ODBC连接Oracle时遇到权限问题,主要可能是由于以下几种原因导致的: 用户没有足够的权限访问所需的数据库对象。 ODBC连接字符串中的用户名或密码不正确。 数据库端的权限设置不正确。 要解决权限问题,可以按照以下步骤进行操作: ...
    99+
    2024-07-15
    oracle
  • 如何解决Spring Security的权限配置不生效问题
    这篇文章主要介绍如何解决Spring Security的权限配置不生效问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Spring Security权限配置不生效在集成Spring Security做接口...
    99+
    2023-06-29
  • 云服务器配置端口,并没有生效文件权限怎么回事
    如果您没有提供任何有效的云服务器配置文件的权限,那么您可能无法访问云服务器的配置和数据文件。这是因为云服务器通常需要用户具有与该文件相关的完整权限才能访问配置文件和数据文件。 解决方案如下: 确保您已经登录到您的云服务器管理界面,并且该...
    99+
    2023-10-27
    怎么回事 端口 服务器配置
  • linux系统下创建oracle表空间和用户权限查询
      create temporary tablespace user_temp(临时表空间名称) tempfile "homeoracleapporadata/GSMRuser_temp.dbf" size 50m aut...
    99+
    2021-12-22
    linux系统下创建oracle表空间和用户权限查询
  • Oracle中的角色和权限有什么用途
    在Oracle中,角色和权限是用来控制对数据库对象(如表、视图、存储过程、函数等)的访问权限的。角色是一组权限的集合,可以将权限赋予...
    99+
    2024-04-19
    Oracle
  • win7更改日期和时间没有管理员权限如何解决
    这篇文章主要介绍“win7更改日期和时间没有管理员权限如何解决”,在日常操作中,相信很多人在win7更改日期和时间没有管理员权限如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win7更改日期和时间没有...
    99+
    2023-07-01
  • Android进程运行中权限被收回导致关闭的问题解决
    流程如图: MainActivity 跳转至 MainActivity2 再跳转至 MainActivity3MainActivity3 跳转至 设置,收回权限 ...
    99+
    2024-04-02
  • oracle中执行execute的时候权限不足的解决办法
    create or replace procedure p_create_table    Authid Current_User is   &n...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作