码迷,mamicode.com
首页 > 数据库 > 详细

oracle学习之权限管理

时间:2015-11-04 00:40:30      阅读:711      评论:0      收藏:0      [点我收藏+]

标签:

       在创建用户之后,用户不能干任何事情,登录数据库都会报ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon denied错误。这时我们就应该给用户授权。先来了解Oracle的权限管理。

一、权限概述

       Oracle数据库是利用权限来进行安全管理的,权限是Oracle安全机制重要组成部分。这些权限可以分了两类:系统权限和对象权限。

系统权限:系统权限是指在系统级控制数据库的存取和使用的机制,即执行某种语句SQL语句的能力,例如,启动、停止数据库,修改数据库参数,连接到数据库以及创建、删除、更改模式对象(如表、视图、索引、过程等)。

对象权限:对象权限是指在对象级控制数据库的存取和使用的机制,即访问其他用户模式对象的能力。对象权限是用户之间的表、视图等模式对象的相互存取权限。比如,用户xiaoming要查询用户scott中emp表的信息,就需要获得scott用户的授权。

二、系统权限管理

      Oracle的系统权限一般需要授予数据库管理人员和应用程序开发人员,数据库管理员可以将系统权限授予其他用户,也可以将系统权限从被授予用户中收回。可以分为多种不同的类型

2.1 系统权限的分类

1. 数据库维护权限。对于数据库管理员,需要创建表空间、修改数据库结构、创建用户、修改用户权限等进行数据库维护的权限。

2. 数据库模式对象权限。对于数据库开发人员,只需了解操作数据库对象的权限,如创建表、创建视图等权限

3. ANY权限,系统权限中还有一种权限是ANY,具有ANY权限表示可以在任何用户模式中进行操作。

2.2 系统权限的授予

语法格式:

grant system_privilege to {public|role_name|user_name[..n]} 
       [with admin option]

其中,system_privilege 为系统权限的名称,public是Oracle中的公共用户组,如果将权限授予public,则意味着数据库中所有用户都将拥有该权限,role_name是要授予权限的角色名。user_name为要授予权限的用户名。

        如果使用with admin option选项,则被授权的用户还可以将这些系统权限传递给其他用户和角色。

例一:授予用户xiaoming连接数据库的权限

创建用户xiaoming后该用户没有任何权限,登录数据库都会报错

技术分享

使用system连接数据库,执行语句:

grant create session to xiaoming
之后就可以使用xiaoming用户登录数据库了。

技术分享

例二:授予用户xiaoming在任何用户模式下创建表和视图的权限。并允许用户xiaoming将这些权限授予给其他用户

grant create any table,create any view
      to xiaoming
      with admin option

2.3 系统权限的收回

数据库管理员或者具有向其用户授权的权限的用户可以使用revoke语句将已经授予的系统权限收回。

语法格式:

revoke system_privilege from {public|role_name|user_name[..n]}

  例如,使用system用户登录,以下语句可以收回用户小明的create session权限

revoke create session from xiaoming;

用户的系统权限被回收后,相应的传递权限也同时被收回,但已经经过传递的并获得权限的用户不受影响。例如下图:用户xiaoming的权限被回收后,xiaoming给用户xiaohong授予的create session 没有被回收。

技术分享

三、对象权限

3.1 对象权限的分类

     Oracle方案对对象有9种权限:select、update、delete、insert、execute(执行类型、函数、包和过程)、read(读取数据字典中的数据)、index、peferences(生成外键)、alter。

3.2 对象权限的授予

语法格式:

grant {object_privilege|ALL[privilege][column(..n)]}
         on [schema.]object_name to  {public|role_name|user_name[..n]}
         [with grant option];

其中,object_privilege为对象权限的名称,关键字All表示授予该对象全部的对象权限。还可以使用column来指定在表的某列的权限,ON关键字用于指定权限所在的对象,with grant option选项用于指定用户可以将这些权限授予其他用户。

例三:将scott用户的emp表的查询授予给xiaoming,并允许用户xiaoming将这权限授予给其他用户

使用system用户登录,执行语句:

grant select on scott.emp to xiaoming with grant option

技术分享

3.3 对象权限的收回

语法格式:

revoke {object_privilege|ALL[privilege][column(..n)]}
         on [schema.]object_name to  {public|role_name|user_name[..n]}
         [cascade constrainsts];

其中,cascade constrainsts选项表示在收回对象的时,同时删除利用references对象权限在该对象上定义的参照完整性约束。

例四:收回用户小明查询scott的emp表

使用system登录,执行语句:

revoke select on scott.emp from xiaoming

注:对象权限回收后,相应的传递权限也同时被收回,同时已经经过传递并获得权限的用户的权限也将被回收。例如,用户xiaoming将查询emp表的权限给了xiaohong,当xiaoming的权限被回收后,小红的权限也没有了。

将查询权限给xiaohong:

技术分享

回收xiaoming的查询权限,xiaohong的查询权限也被回收:

技术分享

 

 

参考资料:oracle使用教程(第三版)  郑阿奇    主编

oracle学习之权限管理

标签:

原文地址:http://www.cnblogs.com/duoluomengxing/p/4934685.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!