当前位置:  数据库>oracle

回收DBA角色的注意事项

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

    本文导语: Oracle对于权限的划分粒度非常精细,为了方便管理条目众多权限,Oracle引入了角色(role)这个逻辑概念,也在系统中预先设置了很多角色。在实际的应用中,应用用户对于权限的需要可能较为复杂,因此为了方便授权,很多应...

Oracle对于权限的划分粒度非常精细,为了方便管理条目众多权限,Oracle引入了角色(role)这个逻辑概念,也在系统中预先设置了很多角色。在实际的应用中,应用用户对于权限的需要可能较为复杂,因此为了方便授权,很多应用用户被授予DBA角色,DBA角色拥有较多的系统权限,这对于数据库的管理是非常不利的,违反了权限最小化的安全原则。出于安全的考虑,系统可能需要回收DBA角色,在回收权限的过程中,为了保证应用正常运行,需要注意一些细节,下文将对几个需要注意的点进行讨论。

  实验环境说明(本文中的结论适用于10g~11.2.0.4):
  • SQL> select * from v$version;
  • BANNER
  • --------------------------------------------------------------------------------
  • Oracle Database 11g Enterprise Edition 11.2.0.3.0 - 64bit Production
  • PL/SQL 11.2.0.3.0 - Production
  • CORE    11.2.0.3.0    Production
  • TNS for Linux: Version 11.2.0.3.0 - Production
  • NLSRTL Version 11.2.0.3.0 - Production
  •  一、grant/revoke role操作的生效时间

  • --创建一个新用户,并授予connect角色
  • session 1:
  • SQL> create user darren identified by darren;
  • User created.
  • SQL> grant connect to darren;
  • Grant succeeded.
  • --使用新用户登录数据库
  • session 2:
  • SQL> conn darren/darren
  • Connected.
  • SQL> select * from session_privs;
  • PRIVILEGE
  • ----------------------------------------
  • CREATE SESSION
  • SQL> select * from session_roles;
  • ROLE
  • ------------------------------
  • CONNECT
  •   保持session 2不退出,在session 1中授予resource角色

  • session 1:
  • SQL> grant resource to darren;
  • Grant succeeded.
  • --session 2中查询用户拥有的系统权限和角色
  • SQL> select * from session_privs;
  • PRIVILEGE
  • ----------------------------------------
  • CREATE SESSION
  • UNLIMITED TABLESPACE --新增加的系统权限
  • SQL> select * from session_roles;
  • ROLE
  • ------------------------------
  • CONNECT
  •   退出session,重新登录用户

  • SQL> conn darren/darren
  • Connected.
  • SQL> select * from session_privs;
  • PRIVILEGE
  • ----------------------------------------
  • CREATE SESSION
  • UNLIMITED TABLESPACE
  • CREATE TABLE
  • CREATE CLUSTER
  • CREATE SEQUENCE
  • CREATE PROCEDURE
  • CREATE TRIGGER
  • CREATE TYPE
  • CREATE OPERATOR
  • CREATE INDEXTYPE
  • 10 rows selected.
  • SQL> select * from session_roles;
  • ROLE
  • ------------------------------
  • CONNECT
  • RESOURCE
  •  

       结论:1、UNLIMITED TABLESPACE系统权限会随resource角色授予用户,由于是作为单独的系统权限,因此会立即生效;
           2、grant/revoke角色不会立即生效,需要使用set role或者重新登录才生效(直接授予系统权限、对象权限是立即生效)。

      二、回收DBA角色时的影响
            继续上面的实验,在session 1中授予和回收用户DBA角色,session 2重新登录用户
  • session 1:
  • SQL> grant dba to darren;
  • Grant succeeded.
  • SQL> revoke dba from darren;
  • Revoke succeeded.
  • session 2:
  • SQL> conn darren/darren
  • Connected.
  • SQL> select (*) from session_privs;
  •   (*)
  • ----------
  •     9
  • SQL> select * from session_roles;
  • ROLE
  • ------------------------------
  • CONNECT
  • RESOURCE
  • SQL> select * from session_privs; --注意,这里没有了UNLIMITED TABLESPACE权限
  • PRIVILEGE
  • ----------------------------------------
  • CREATE SESSION
  • CREATE TABLE
  • CREATE CLUSTER
  • CREATE SEQUENCE
  • CREATE PROCEDURE
  • CREATE TRIGGER
  • CREATE TYPE
  • CREATE OPERATOR
  • CREATE INDEXTYPE
  •   在session 2中创建表并插入数据

  • SQL> create table test1(a varchar2(20),b varchar2(10)); --这里能创建成功是由于11g的延迟段创建特性,在这里并没有在表空间中实际生成segment
  • Table created.
  • SQL> insert into test1 values('a','b');
  • insert into test1 values('a','b')
  •             *
  • ERROR at line 1:
  • ORA-01950: no privileges on tablespace 'USERS'
  •  
        结论:1、在回收DBA角色时,UNLIMITED TABLESPACE权限会被回收;
             2、回收UNLIMITED TABLESPACE权限后用户的表空间quota立即耗尽,即无法使用tablespace的存储空间。

     三、回收DBA权限后的处理
           1、由于回收DBA权限后用户的UNLIMITED TABLESPACE系统权限被回收,可以按下列方式之一给用户授权,以便用户能正常使用表空间:
  • SQL> grant RESOURCE to DARREN;
  • SQL> alter user DARREN quota unlimited on USERS;
  • SQL> grant UNLIMITED TABLESPACE to DARREN;
  •         2、如果应用用户有特殊的权限需求,需要在回收DBA角色后单独为用户授予部分系统权限、对象权限。


        
     
     

    您可能感兴趣的文章:

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












  • 相关文章推荐
  • Python类的构造函数,析构函数以及垃圾回收机制详细介绍及代码举例
  • “当某个实例不再被任何对象引用时就会被垃圾回收机制回收”,那么怎样才算是不被任何对象引用呢?
  • php会话(session)生命周期概念介绍及设置更改和回收
  • Fedora 10回收站无法清空
  • android 4.0 托管进程介绍及优先级和回收机制
  • 求助,线程的回收
  • JAVA有没有强制回收机制?
  • 急!垃圾回收的问题!
  • 程序回收(大家可以试试)
  • 100分!free后内存回收问题
  • 堆栈回收问题
  • 线程资源回收问题
  • 垃圾回收器 bdw-gc
  • 问一个菜鸟问题,怎样在linux的命令行中恢复回收站的文件?
  • 垃圾回收的問題
  • 信号处理器为什么回收不了子进程?
  • 关于垃圾回收的问题
  • 关于对象的生存期问题,和内存回收器的问题
  • 用C或C++实现主存的分配与回收
  • 僵死进程不能回收
  • 如何回收安装Ubuntu的硬盘


  • 站内导航:


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

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

    浙ICP备11055608号-3