本文主要讲解oracle数据库中的管理权限和角色。
oracle权限分为系统权限和对象权限。
一、 系统权限:
系统权限是指执行特定sql命令的权限,它用于控制用户可以执行一个或一组数据库操作,比如用户拥有create table 权限时可以在其方案下建立表,当拥有create any table 时可以在其他用户方案下建表。
oracle提供了100多种系统权限,常用的有:
create session 连接数据库
create table 建表
create view 建视图
create trigger 建触发器
create procedure 建存储过程
显示系统权限:可以查询数据字典视图system_privilege_map,可以显示所有系统权限。
sql> select * from system_privilege_map order by name;
1.授予系统权限:
一般情况下授予系统权限是由DBA完成的,如果由其他用户完成,则该用户必须有grant any privilege 权限。在授予系统权限时,可以带with admin option 选项,这样的话被授予权限或者角色的用户可以将此权限或者角色授予其他人。
sql> grant privilege_name to user_name [with admin option];
2.回收系统权限
一般情况下,回收权限由DBA完成,如果其他用户完成回收系统权限,则要求该用户拥有该系统权限及转授系统权限的选项(with admin option)。回收系统权限用revoke命令完成。但是请注意权限的级联回收问题,例如,system授予用户A权限with admin option,用户A把权限授予了用户B,但是system回收了用户A的权限,那么用户B还是否拥有权限呢?我通过试验得出结论,用户B还是拥有权限的,也就是说oracle权限回收不是级联的。
sql> revoke privilege_name from user_name;
二、对象权限
指访问其他方案对象的权利。用户可以直接访问自己方案里的对象,如果想要访问其他用户方案里的对象,则必须有对象权限。比如用户A想访问用户B上的X表,则必须在X上具有对象的权限。
常用的有:
alter 修改
delete 删除
select 查询
insert 插入
update 修改
index 索引
references 引用
execute 执行
all 所有权限
显示对象权限,通过数据字典视图可以显示用户或者角色所具有的对象权限,视图为dba_tab_privs
sql> select * from dba_tab_privs where grantee='user_name';
1.授予对象权限
在oracle 9i版本之前,授予对象权限是由对象的所有者完成的,或者拥有with grant option的用户完成,在oracle 9i之后,DBA用户可以将对象权限授予任何用户。授予对象权限用grant命令完成。
sql> grant privilege on user_name1.table_name[(field1,field2)] to user_name2;
2.回收对象权限
在oracle 9i之后,回收对象权限是由对象所有者或者DBA用户完成。但是请注意,对象权限的回收是级联的。
三、角色
角色就是相关权限命令的集合,使用角色就是为了简化权限的管理。角色分为预定义和自定义两类。
预定义就是Oracle定义的角色,自定义是自己根据管理需要所建立的角色。
1. 常用预定义角色介绍
(1) connect
所拥有的权限:alter session,create cluster,create database link,create session,create table,create view,create sequence
(2) resource
所拥有的权限:create cluster,create indextype,create table,create sequence,create type,create trigger,create procedure
(3)dba
dba角色具有所有的系统权限及with admin option 选项,默认的用户为sys和system,他们可以将系统权限授予任何用户,但是dba不具有sysdba和sysoper的特权(启动和关闭数据库)。
2.自定义角色
一般是由DBA创建角色,如果其他用户创建,则需要create role 权限。在建立角色时可以指定验证方式(不验证,数据库验证等)
(1)建立角色(不验证)
如果角色是公用的角色,可以采用不验证的方式来创建。
sql> create role role_name not identified;
(2)建立角色(数据库验证)
采用这样的方式建立角色,角色名、口令存放在数据库中。当激活该角色时必须提供口令,在建立角色时需提供口令。
sql> create role role_name identified by password;
3.角色授权
当角色刚建立时是没有任何权限的,为了使角色完成特定的任务,需授予其一定的系统权限和对象权限。给角色授权与用户授权没有多少区别,但要注意,系统权限的 unlimited tablespace 和对象权限的with grant option 是不能授予角色的。
sql >grant privilege_name to role_name;
4.为用户分配角色
一般分配角色是由DBA完成,若普通用户分配角色,需有grant any role 的系统权限。用grant命令分配角色。
sql> grant role_name to user_name [with admin option];
5.删除角色
一般分配角色是由DBA完成,若普通用户分配角色,需有drop any role 的系统权限。注意,当角色删除后,拥有此角色的用户将不再拥有相对应的权限。
sql> drop role role_name;
6.显示角色信息
显示所有角色信息:
sql> select * from dba_roles;
显示角色所具有的系统权限:
sql> select privilege,admin_option from role_sys_privs where role='role_name';
显示用户所具有的角色及默认角色:
sql> select granted_role,default_role from dba_role_privs where grantee='user_name';