0
点赞
收藏
分享

微信扫一扫

Oracle学习记录——5.Oracle的权限与角色


文章目录

  • ​​1.简介​​
  • ​​2.权限​​
  • ​​基本介绍​​
  • ​​系统权限​​
  • ​​对象权限​​
  • ​​2.角色​​
  • ​​基本介绍​​
  • ​​预定义角色​​
  • ​​自定义角色​​
  • ​​角色授权​​
  • ​​删除角色​​
  • ​​显示角色信息​​
  • ​​精细访问控制​​

1.简介

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

Oracle学习记录——5.Oracle的权限与角色_Oracle

Oracle学习记录——5.Oracle的权限与角色_sql_02

2.权限

基本介绍

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

系统权限

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

常用的有

  • create session 连接数据库
  • create table 建表
  • create view 建视图
  • createpublic 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; 
create user tom identfied by tom;

  1. 给用户 ken 授权

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

  1. 给用户 tom 授权

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

grant create session, create table to tom; 
grant create view to ken;//会出错

回收系统权限

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

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

对象权限

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

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

常用的有:

  • alter 修改
  • delete 删除
  • select 查询
  • insert 添加
  • update 修改
  • 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选项不能被授予角色。

2.角色

基本介绍

角色就是相关权限的命令集合,使用角色的主要目的就是为了简化权限的管理,假定有用户 a,b,c 为了让他们都拥有权限

  1. 连接数据库
  2. 在 scott.emp 表上 select,insert, update。
  • 如果采用直接授权操作,则需要进行 12 次授权。
  • 因为要进行 12 次授权操作,所以比较麻烦喔!怎么办?
  • 如果我们采用角色就可以简化:

首先将 creat session,select on scott.emp,insert on scott.emp,update on scott. emp 授予角色,然后将该角色授予 a,b,c 用户,这样就可以四次授权搞定。

查看角色:

SELECT * FROM dba_roles;

角色分为预定义和自定义角色两类。

预定义角色

预定义角色是指 oracle 所提供的角色,每种角色都用于执行一些特定的管理任务,下面我们介绍常用的预定义角色 connect,resource,dba

  1. connect角色

connect 角色具有一般应用开发人员需要的大部分权限,当建立了一个用户后,多数情况下,只要给用户授予 connect 和 resource 角色就够了,那么 connect 角色具有哪些系统权限呢?

  • alter session
  • create cluster
  • create database link
  • create session
  • create tablecreate view
  • create sequence
  1. resource角色

resource 角色具有应用开发人员所需要的其它权限,比如建立存储过程,触发器等。这里需要注意的是 resource 角色隐含了 unlimited tablespace 系统权限。

resource 角色包含以下系统权限:

  • create cluster
  • create indextype
  • create table
  • create sequence
  • create type
  • create procedure
  • create trigger
  1. dba角色

dba 角色具有所有的系统权限,及 with admin option 选项,默认的 dba 用户为sys 和 system,它们可以将任何系统权限授予其他用户。但是要注意的是 dba 角色不具备 sysdba 和 sysoper 的特权(启动和关闭数据库)。

自定义角色

顾名思义就是自己定义的角色,根据自己的需要来定义。一般是 dba 来建立,如果用别的用户来建立,则需要具有 create role 的系统权限。在建立角色时可以指定验证方式(不验证,数据库验证等)。

  1. 建立角色(不验证)

如果角色是公用的角色,可以采用不验证的方式建立角色。

create role 角色名 not identified;

  1. 建立角色(数据库验证)

采用这样的方式时,角色名、口令存放在数据库中。当激活该角色时,必须提供口令。在建立这种角色时,需要为其提供口令。

create role 角色名 identified by

角色授权

当建立角色时,角色没有任何权限,为了使得角色完成特定任务,必须为其授予相应的系统权限和对象权限。

  1. 给角色授权

给角色授予权限和给用户授权没有太多区别,但是要注意,系统权限的 unlimitedtablespace 和对象权限的 with grant option 选项是不能授予角色的。

SQL〉 conn system/manager; 
SQL〉grant create session to 角色名 with admin option
SQL〉 conn scott/tiger@myoral;
SQL〉grant select on scott.emp to 角色名;
SQL〉grant insertupdatedelete on scott.emp to

通过上面的步骤,就给角色授权了。

  1. 分配角色给某个用户

一般分配角色是由 dba 来完成的,如果要以其它用户身份分配角色,则要求用户 必须具有 grant any role 的系统权限。

SQL〉 conn system/manager; 
SQL〉grant 角色名 to blake with admin option;

因为我给了 with admin option 选项,所以,blake 可以把 system 分配给它的角色分配给别的用户。

删除角色

使用 drop role,一般是 dba 来执行,如果其它用户则要求该用户具有 drop any role 系统权限。

SQL〉conn system/manager; 
SQL〉drop

注意:如果角色被删除,那么被授予角色的用户是否还具有之前角色里的权限吗? 不具有了

显示角色信息

  1. 显示所有角色

SQL> select * from dba_roles;

  1. 显示角色具有的系统权限

SQL> select privilege,admin_option from role_sys_privs where role=’角色名’;

  1. 显示角色具有的对象权限

通过查询数据字典视图 dba_tab_privs 可以查看角色具有的对象权限或是列的权限。

  1. 显示用户具有的角色,及默认角色

当以用户的身份连接到数据库时,oracle 会自动的激活默认的角色,通过查询数据字典视图 dba_role_privs 可以显示某个用户具有的所有角色及当前默认的角色

SQL> select granted_role,default_role from dba_role_privs where grantee  = ‘用户名’;

精细访问控制

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

  • 用户 scott blake jones
  • 策略 emp_access
  • 数据库表 emp

通过策略 emp_access,用户 scott,black,jones在执行相同的sql语句时,可以返回不同的结果。


举报

相关推荐

0 条评论