Oracle学习笔记(二十)——管理权限和角色

本文介绍了Oracle数据库中管理权限和角色的相关知识,包括不同类型的系统权限如create session、create table等,以及如何创建和授予用户及角色权限。通过实例展示了如何赋予用户对特定表的查询、更新、删除权限,并探讨了角色的创建、删除以及权限传递。同时,提到了Oracle的精细访问控制策略,允许根据用户身份返回不同的查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



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

2)常用权限
  • create session:连接数据库
  • create table:建表
  • create view:建视图
  • create public synonym:建同义词
  • crete procedure:建过程、函数、包
  • create trigger:见触发器
  • create claster:建簇

3)显示系统权限:oracle的版本越高,提供的系统权限就越多。可以查询数据字典视图system_privilege_map来显示所有系统权限。
  • select * from system_privilege_map order by name;

4)授予系统权限:
(1)一般情况,授予系统权限是由dba完成的。如果用其他用户来授予系统权限,则要求该用户必须具有grant any privilege的系统权限。在授予系统权限是,可以带有with admin option选项。这样,被授予权限的用户或角色还可以将该系统权限授予其它用户或角色。
(2)示例
  • 创建两个用户ken,tom。初始阶段他们咩有任何权限,如果登录就会给出错误信息。
    • create user ken identified by ken;
  • 给用户ken授权
    • grant create session,create table to ken with admin option;
    • grant create view to ken;
  • 给用户tom授权
    • grant create session,create table to tom;
    • grant create view to tom;(False)

5)回收系统权限
(1)一般情况,回收系统权限是由dba完成的。如果用其他用户来回收系统权限,要求该用户必须具有相应系统权限及转授系统权限的选项(with admin option)。
(2)回收系统权限使用revoke来完成。
(3)系统权限不是级联回收。
(4)示例:
system(create session)——>ken(create session)——>tom(create session)
  • revoke create session from ken;(注意:此时,tom还可以登录



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

2)常用的对象权限:
  • alter:修改
  • delete:删除
  • select:查询
  • insert:添加
  • update:修改
  • index:索引
  • references:引用
  • execute:执行

3)显示对象权限:查询数据字典视图dba_tab_privs来显示用户或角色所具有的对象权限。
  • select distinct privilege from dba_tab_privs;
  • select grantor,owner,table_name,privilege from dba_tab_privs where grantee='BLAKE';

4)授予对象权限
(1)在oracle9i之前,授予对象权限是由对象的所有者来完成的,如果用其他用户来操作,则需要对象具有相应的权限(with grant option)。从oracle9i开始,dba用户(sys,system)可以将任何对象上的对象权限授予其它用户。
  • 授予对象权限用命令grant来完成。
(2)对象权限可以授予用户、角色和public。
  • 在授予权限时,如果带有with grant option选项,则可以将该权限转手给其它用户。但是,with grant option选项不能被授予角色。
(3)示例: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;
(4)示例:能否对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;

(5)授予alter权限:如果black用户要修改scott.emp的表结构,则必须授予alter对象权限。
  • SQL> conn scott/***;
  • SQL> grant altert on emp to blake;
(6)授予execute权限:如果用户想要执行其他方案的包、过程、函数等,则必须拥有execute权限。
  • 使ken可以执行包dbms_transaction,可以授予execute权限。
    • SQL> conn system/***;
    • SQL> grant execute on dbms_transaction to ken;
(7)授予index权限:如果想在别的方案的表上建立索引,则必须授予index对象权限。
  • SQL> conn scott/***;
  • SQL> grant index on scott.emp to blake;
(8)使用with grant option选项:用于转授予对象权限,但是该选项只能被授予用户,而不能授予角色。
  • SQL> conn scott/***;
  • SQL> grant select on emp to blake with grant option;
  • SQL> conn blake/***;
  • SQL> grant select on scott.emp to jones;

5)回收对象权限
(1)在oracle9i中,收回对象的权限可以由对象的所有者来完成,也可以用dba用户(sys,system)来完成。
(2)收回对象权限后,用户就不能执行相应的sql命令。
(3)系统权限不是级联回收。
(4)示例:
scott(select on emp)——>blake(select on emp )——>jones(select on emp )
  • revoke select on emp from ken;(注意:此时,tom不可以登录


二、角色
1、角色:相关权限的命令集合。
2、角色的目的:简化权限的管理。
3、角色分为:预定义角色和自定义角色两类。

4、预定义角色:oracle所提供的角色,每种角色都用于执行一些特定的管理任务。
1)connect角色:具有一般应用开发人员需要的大部分权限。当建立了一个用户有,多数情况下,只要给用户授予connect和resource角色就够了。
  • alter session
  • create cluster
  • create database link
  • create session
  • create table
  • create view
  • create sequence
2)resource角色:具有一般应用开发人员需要的大部分权限,比如建立存储过程、触发器等。注意:resource角色隐含了unlimited tablespace系统权限。
  • create cluster
  • create indextype
  • create table
  • create sequence
  • create type
  • create procedure
  • create trigger
3)dba角色:具有所有的系统权限,及with admin option选项。默认的dba用户为sys和system,可以将任何系统权限授予其它用户。注意:dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)。

5、自定义角色:根据自己的需要来定义。一般是dba来建立;如果用别的用户来建立,则需要具有create role的系统权限。在建立角色是可以指定验证方式(不验证、数据库验证等)
1)建立角色(不验证):如果角色时共用的,可以采用不验证的方式建立角色。
  • create role 角色名 not identified;
2)建立角色(数据库验证):角色名和口令存放在数据库中。当激活该角色时,必须提供口令。在建立角色时,需要为其提供口令。
  • create role 角色名 identified by ***;

6、角色授权:当建立角色时,角色没有任何权限。
1)给角色授权:与给用户授权区别不大。
  • 注意:系统权限的unlimited tablespace和对象权限的with grant option选项是不能授予角色的。
  • SQL> conn system/***;
  • SQL> grant create session to 角色名 with admin option;
  • SQL> conn scott/***;
  • SQL> grant select on scott.emp to 角色名;
  • SQL> grant insert,update,delete on scott.emp to 角色名;

2)分配角色给某个用户:一般分配角色是由dba来完成的。如果要以其它用户身份分配角色,则要求用户必须具有grant any role的系统权限。
  • SQL> conn system/***;
  • SQL> grant 角色名 to blake with admin option;

7、删除角色:使用drop role,一般要求由dba或具有drop any role系统权限的用户来完成。
  • SQL> conn system/***;
  • SQL> drop role 角色名;
  • 如果角色被删除,那么

8、显示角色信息
1)显示所有角色
  • SQL>select * from dba_roles;
2)显示角色具有的系统权限
  • SQL>select privilege,admin_option from role_sys_privs where role='角色名';
3)显示角色具有的对象权限
  • 通过查询数据字典视图dba_tab_privs可以查看角色具有的对象权限或是列的权限。
4)显示用户具有的角色及默认角色
  • 当以用户的身份连接到数据库时,oracle会自动激活默认的角色,通过查询数据字典视图dba_role_privs可以显示某个用户具有的所有角色及当前默认的角色。
  • SQL>select granted_role,default_role from dba_role_privs where grantee='用户名';

9、精细访问控制:指用户可以使用函数、策略是先更加细微的安全访问控制。
  • 如果使用精细访问控制,则当在客户端发出sqL语句(select, insert, update, delete)时,oraacle会自动在sql语句后追加谓词(where子句),并执行新的sql语句。通过这样的控制,可以使得不同的数据库用户在访问相同表时,返回不同的数据信息。如下:

  • 如上所示,通过策略emp_access,用户scott,blake,jones在执行相同的sql语句是,可以返回不同的结果。例如,当执行select ename from emp;时,根据实际情况可以返回不同的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值