标签:
在创建用户之后,用户不能干任何事情,登录数据库都会报ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon denied错误。这时我们就应该给用户授权。先来了解Oracle的权限管理。
Oracle数据库是利用权限来进行安全管理的,权限是Oracle安全机制重要组成部分。这些权限可以分了两类:系统权限和对象权限。
系统权限:系统权限是指在系统级控制数据库的存取和使用的机制,即执行某种语句SQL语句的能力,例如,启动、停止数据库,修改数据库参数,连接到数据库以及创建、删除、更改模式对象(如表、视图、索引、过程等)。
对象权限:对象权限是指在对象级控制数据库的存取和使用的机制,即访问其他用户模式对象的能力。对象权限是用户之间的表、视图等模式对象的相互存取权限。比如,用户xiaoming要查询用户scott中emp表的信息,就需要获得scott用户的授权。
Oracle的系统权限一般需要授予数据库管理人员和应用程序开发人员,数据库管理员可以将系统权限授予其他用户,也可以将系统权限从被授予用户中收回。可以分为多种不同的类型
1. 数据库维护权限。对于数据库管理员,需要创建表空间、修改数据库结构、创建用户、修改用户权限等进行数据库维护的权限。
2. 数据库模式对象权限。对于数据库开发人员,只需了解操作数据库对象的权限,如创建表、创建视图等权限
3. ANY权限,系统权限中还有一种权限是ANY,具有ANY权限表示可以在任何用户模式中进行操作。
语法格式:
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将这些权限授予给其他用户
grant create any table,create any view
to xiaoming with admin option
数据库管理员或者具有向其用户授权的权限的用户可以使用revoke语句将已经授予的系统权限收回。
语法格式:
revoke system_privilege from {public|role_name|user_name[..n]}
例如,使用system用户登录,以下语句可以收回用户小明的create session权限
revoke create session from xiaoming;
用户的系统权限被回收后,相应的传递权限也同时被收回,但已经经过传递的并获得权限的用户不受影响。例如下图:用户xiaoming的权限被回收后,xiaoming给用户xiaohong授予的create session 没有被回收。
Oracle方案对对象有9种权限:select、update、delete、insert、execute(执行类型、函数、包和过程)、read(读取数据字典中的数据)、index、peferences(生成外键)、alter。
语法格式:
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
语法格式:
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使用教程(第三版) 郑阿奇 主编
标签:
原文地址:http://www.cnblogs.com/duoluomengxing/p/4934685.html