九、Oracle的权限和角色管理

管理权限和角色

Oracle如何管理权限和角色,权限和角色的区别在哪里?

当刚刚建立用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种特定的数据库操作,则必须为其授予系统权限;如果用户要访问其他方案的对象,则必须为其授予对象权限。

为了简化权限管理,可以使用角色。

  1. 分类

权限:权限是指执行特定类型sql命令或是访问其他方案对象的权利,包括系统权限和对象权限2中:

1)什么是系统权限?

系统权限包括登录数据库,建库,建表,建存储过程,建索引等;(大概有140多个)

2)系统权限有哪些?

select * from system_privilege_map order by name;

3)如何给用户赋予系统权限?

1)什么是对象权限?

对象权限:用户对其他用户的数据对象访问/操作的权限;(大概有25个)

例如用户访问其他用户的表、视图等操作的权限;

2)对象权限有哪些?

select * from

3)如何给用户赋予对象权限?

一、系统权限

1)系统权限介绍

系统权限是指执行特定sql命令的权利。它用于控制用户可以执行的一个或是一组数据库操作。比如当用户具有create table权限时,可以在其方案中建表;当用户具有create any table权限时,可以在任何方案中建表。oracle提供100多种系统权限。

常用的系统权限有:

create session:连接数据库

create table:建表

create view:建视图

create procedure:建过程、函数、包

create trigger:建触发器

create cluster:建簇

create public synonym:建同义词

 

2)显示系统权限

Oracle提供140多种系统权限,而且Oracle版本越高,提供的系统权限越多。可以通过查询数据字典视图system_privilege_map显示所有系统权限。

select * from system_privilege_map order by name;

 

3)授予系统权限

一般情况下,授予系统权限是由dba完成的,如果其他用户来授予系统权限,则要求该用户必须具有grant any privilege的系统权限。在授予权限时,可以带有with admin option选项,这样,被授予权限的用户或角色还可以将该系统权限授予其他用户或是角色。

例如:

a)创建2个用户,ken、tom,初始阶段他们没有任何权限,如果登录就会报出错信息。

create user ken identified by ken;

create user tom identified by m123;

b)给用户ken授权

grant create session,create table to ken with admin option;

grant create view to ken;

c)给用户tom授权

grant create session,create table to tom with admin option;

 

4)回收系统权限

一般情况下,回收系统权限是由dba完成的,如果其他用户来回收系统权限,要求该用户必须具有相应的系统权限及转授权系统权限的选项(with admin option),回收系统权限用revoke命令完成。

当回收系统权限后,用户就不能执行相应的操作了,但是请注意,系统权限级联回收问题?

system---------------------à ken ---------------------------àtom

(create session) (create session) (create sessioin)

用system执行如下操作:revoke create session from ken;

请思考,tom还能登陆吗?——能,系统权限不是级联回收。

 

二、对象权限

1)对象权限介绍

对象权限指访问其他方案对象的权力,用户可以直接访问自己方案的对象,当时如果要访问别的方案的对象,则必须要具有对象权限。

比如smith用户要访问scott.emp表(scott方案,emp表)

则必须在emp表上具有对象的权限。

常用的对象权限有:

alter:修改

delete:删除

select:查询

insert:添加

update:修改

index:索引

reference:引用

execute:执行

 

2)显示对象权限

通过数据字典视图dba_tab_privs可以显示用户或是角色具有的对象权限。

conn system/manager as sysdba;

select distinct privilege from dba_tab_privs;

select grantor,owner,table_name,privilege from dba_tabl_privs where grantee='BLANK';

 

3)授予对象权限

在oracle9i之前,授予对象权限是由对象的所有者来完成的,如果其他用户来操作,则需要用户具有相应的(with grant option)权限,从oracle9i开始,dba用户(sys,system)可以将任何对象上的对象授予其他用户。授予对象权限是用grant命令完成的。

对象权限可以授予用户、角色和public。在授予权限时,如果带有with grant option选项,则可以将该权限转授予给其他用户。当时要注意,with grant option选项不能授予给角色。

例如:

a)monkey用户要操作scott.emp表,则必须授予相应的对象权限

①希望monkey可以查询scott.emp表数据,怎样操作?

grant select on emp to monkey;

②希望monkey可以修改scott.emp表数据,怎样操作?

grant update on emp to monkey;

③希望monkey可以删除scott.emp表数据,怎样操作?

grant delete on emp to monkey;

④有没有更加简单的办法,一次性把所有权限赋给monkey?

grant all on emp to monkey;

 

b)能否对monkey访问权限更加精细控制?(授予列权限)

①希望monkey可以修改scott.emp表的sal字段,怎样操作?

grant update on emp(sal) to monkey;

②希望monkey可以查询scott.emp表的ename,sal字段,怎样操作?

grant select on emp(ename,sal) to monkey;

 

4)授予alter权限

如果black用户要修改scott.emp表结构,则必须授予alter对象权限。

sql>conn scott/triger;

sql>grant alter on emp to black;

当然也可以用sys,system来完成这件事儿。

 

5)授予execute权限

如果用户想要执行其他方案的过程、函数、包,则必须具有execute权限。

比如为了让ken可以执行包dbms_transaction,可以授予execute权限。

sql>conn system/manager;

sql>grant execute on dbms_transaction to ken;

 

6)授予index权限

如果想在别的方案的表上建立索引,则必须具有index对象权限。

如:为了让black可以在scott.emp表上建立索引,就给其授予index的对象权限。

sql>conn scott/triger;

sql>grant index on emp to black;

 

7)使用with admin option选项,对象权限使用with grant option

该选项用于转授对象权限,当时该选项只能被授予用户,不能被授予角色。

sql>conn scott/triger;

sql>grant select on emp to black with admin option;

sql>conn black/m123;

sql>grant select on scott.emp to jones;-- 转授

 

8)收回对象权限

在oracle9i之后,收回对象权限可以由对象的所有者来完成,也可以由dba用户(sys、system)来完成。

说明:收回对象权限以后,用户就不能执行相应的sql命令,但是要注意,对象权限是否会被级联回收?

如:

scott -------------------------à black ------------------àjones

(select on emp) (select on emp) (select on emp)

sql>conn scott/triger;

sql>revoke select on emp from black;

请思考:jones还能查询scott.emp表的数据吗?

—不能了,对象权限是级联删除的。

 

  1. 方案

在建立用户的时候,系统会自动建立一个和用户名对应的、名称和用户名相同的方案。

方案中存放各种数据对象。

  1. 数据对象

数据对象:表、存储过程、触发器、视图、序列、同义词等。

  1. 角色

角色是为了简化权限的管理。

oracle一共提供了25种预定义角色:

select * from dba_roles;

在Oracle中,权限太多一一分配会很累,所以提出一种内置多种基本权限的集合,称为角色;

比如:connect是一种角色,里面包含7中权限;

角色分为:自定义角色预定义角色

预定义角色:系统内置的

自定义角色:用户自己定义的角色

授权举例:grant connect to xiaoming;--授权成功

常见角色介绍:

connect:连接数据库的权限

dba:权限很高,不可轻易授予

resource:可以在任何的 表空间 建表

 

三、角色

  1. 角色介绍

角色就是相关权限的命令集合。使用角色的主要目的就是为了简化权限的管理。

角色分为预定义角色和自定义角色。(联想:套餐与自助餐)

假定有用户a,b,c为了让他们都拥有权限

连接数据库、

在scott.emp上select,insert,update

如果采用直接授权操作,需要进行12次操作,太麻烦!

简化操作:

首先将create session、select on scott.emp、insert on scott.emp、update on scott.emp授予角色,然后将该角色分别授予a、b、c三个用户,这样三次就可以搞定。

 

  1. 预定义角色

 

 

 

 

 

如果角色被删除,那么用户是否还可以登录或者select操作?

 

 

posted on 2013-01-31 22:15  Frank.Fan  阅读(2424)  评论(0编辑  收藏  举报