Oracle权限

一、概述

这一部分我们主要看看Oracle如何管理权限和角色,权限和角色的区别在哪里。

当刚刚建立用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种特定的数据库操作,则必须为其授予系统的权限。如果用户要访问其他方案的对象,则必须为其授予对象的权限,为了简化权限的管理,可以使用角色。这里我们会详细介绍。

 

二、权限

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

1、系统权限

A、系统权限的介绍

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

常用的有

create session

连接数据库

create view

创建视图

create procedure

创建过程、函数、包

create cluster

建簇

create table

创建表

create public synonym

创建同义词

create trigger

创建触发器

 

B、显示系统权限

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

sql>select * from system_privilege_map order by name;

 

三、授予系统权限

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

案例:

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

sql>create user ken identified by m123;

sql>create user tom identified by m123;

 

2、给用户ken授权

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

sql>grant create view to ken;

 

3、给用户tom授权

我们可以通过ken给tom授权,因为with admin option是加上的。当然也可以通过DBA给tom授权,我们就用ken给tom授权。

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

sql>grant create view to tom;——这个是不可以的,因为Ken没有该权限的下放权限。

 

四、回收系统权限

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

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

执行以下语句:

sql>revoke create session from ken;

说明:DBA执行了该语句后回收了Ken的登录权限后,Ken自然就不能再登录了,有Ken下放的该权限所有者tom还是可以正常登录的。

 

五、对象权限

指访问其他方案对象的权利,用户可以直接访问自己方案的对象。但是如果要访问别的方案的对象,则必须具有对象的权限。比如Smith用户要访问scott.emp表(scott:方案,emp:表),则必须在scott.emp表上具有对象的权限。

常用的有:

alter

修改表结构

delete

删除数据

select

查询数据

insert

添加数据

update

修改数据

index

在表上建立索引

references

引用

execute

执行

 

1、显示对象权限

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

sql>select distinct privilege from dba_tab_privs;

sql>select grantor,owner,table_name,privilege from dba_tab_privs where grantee='Black';

 

2、传授对象权限

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

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

希望monkey可以查询scott.emp表的数据,怎么操作

sql>grant select on emp to monkey;

希望monkey可以修改scott.emp表的数据,怎么操作

sql>grant update on emp to monkey;

希望monkey可以删除scott,emp表的数据,怎么操作

sql>grant delete on emp to monkey;

有没有更加简单的方法,一次吧所有的权限赋给monkey

sql>grant all on emp to monkey;

 

2、能否对monkey访问权限更加精细控制。(授予列权限)

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

sql>grant update on emp(sal) to monkey;

希望monkey只可查询scott.emp的表的ename,sal数据,怎样操作

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

 

3、授予alter权限

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

sql>grant alter on emp to monkey;

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

 

4、授予execute权限

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

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

sql>grant execute on dbms_transaction to ken;

 

5、授予index权限

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

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

sql>grant index on scott.emp to ken;

 

6、使用with grant option选项

该选项用于传授对象权限,但是该选项只能被授予用户,而不能授予角色。

sql>grant select on emp to ken with grant option;

 

7、回收对象权限

在Oracle中,收回对象的权限可以由对象的所有者来完成。

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

sql>revoke select on emp from ken;

说明:Scott执行了该语句后,就回收了Ken用户在emp表上查询权限,因此此时ken已经不能对scott.emp进行查询操作了。于此同时也收回了ken转授下去的该权限,有ken授予的对scott.emp表查询的权限的获得者也不能对scott.emp进行查询操作了。

posted @ 2010-09-22 01:05  技术勇者  阅读(7651)  评论(2编辑  收藏  举报