Oracle中的管理权限


1. 概述

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

2. 权限

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

<1>系统权限

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

常用的系统权限:

sql语句 含义
create session 连接数据库
create table 建表
create view 建视图
create public synonym 建同义词
create procedure 建过程、函数、包
create trigger 建触发器
create cluster 建簇

显示系统权限

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

select * from system_privilege_map order by name;

授予系统权限:

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

举例:

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

  2. 给用户ken授权

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

    <2>grant create view to ken;

  3. 给用户tom授权

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

    <1>grant create session, create table to tom;

    <2>grant create view to ken; 该授权不成功。

回收系统权限:

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

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

用system执行如下操作:

revoke create session from ken;

<2>对象权限

对象权限指访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。

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

常用的对象权限:

sql语句 含义
alter 修改表结构
update 修改数据
delete 删除
select 查询
insert 添加
index 索引
references 引用
execute 执行

显示对象权限:

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

SQL> conn system/manager;

SQL> select distinct privilege from dba_tab_privs;

SQL> select grantor, owner, table_name, privilege from dba_tab_privs where grantee = ‘BLAKE’;

授予对象权限:

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

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

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

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

    grant select on emp to monkey;

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

    grant update on emp to monkey;

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

grant delete on emp to monkey;

  1. 有没有更加简单的方法,一次把所有权限赋给monkey?

    grant all on emp to monkey;

授予列权限:

授予列权限能对monkey访问权限更加精细的控制。

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

    grant update on emp(sal) to monkey

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

    grant select on emp(ename,sal) to monkey

授予alter权限:

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

SQL> conn scott/tiger

SQL> grant alter on emp to blake;

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

授予execute权限:

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

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

SQL> conn system/manager

SQL> grant execute on dbms_transaction to ken;

授予index权限:

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

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

SQL> conn scott/tiger

SQL> grant index on scott.emp to blake;

用with grant option选项:

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

SQL> conn scott/tiger;

SQL> grant select on emp to blake with grant option;

SQL> conn black/shunping

SQL> grant select on scott.emp to jones;

回收对象权限:

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

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

SQL> revoke select on emp from blake


参考视频:https://www.bilibili.com/video/BV13W411H768?p=23

猜你喜欢

转载自blog.csdn.net/weixin_45605541/article/details/120649801