oracle 11g 学习笔记 11_2

管理权限和角色

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

一、权限

1、系统权限

什么是系统权限?系统权限有哪些,如何赋给系统权限?
用户针对数据库的权限 ,系统级别的权限,比如能不能建库,能不能建表,能不能登录数据库,能不能创建用户等。。
系统权限指执行特定类型sql命令的权利,它用于控制用户可以执行的一个或是一组数据库操作,比如当用户具有create table权限时,可以在其方案中建表,当用户具有create any table权限时,可以在任何方案中建表。oracle提供了上百多种系统权限。
常用的有:
create session 连接数据库 create table 建表 create view 建视图 create public synonyn 建同义词
create procedure 建过程、函数、包 create trigger 建触发器 create cluster 建族

.系统权限有哪些,可以通过这个命令来查询
select * from system_privilege_map order by name;
*需要注意的是:系统权限不是级联回收。

2、对象权限

对象权限:是一个方案去访问别的方案的数据对象的权力
方案:当一个用户(假如是Tom)创建时,那么oracle会自动地给Tom用户对应了一个叫Tom的方案,方案的名字和用户的名字完全一样的,里面有各种各样的数据对象:表,视图,触发器,存储过程等等。Tom用户登录后,方案里面的东西都归Tom所有。当Tom用户想要去访问scott方案的表时,那么就要被scott赋予相应的对象权限。
常用的对象权限有:
alter 修改(表修改) delete 删除 select 查询 insert 添加
update 修改(数据修改) index 索引 references 引用 execute 执行

.查看用户或者角色的所有对象权限、
select distinct privilege from dba_tab_privs;
*授予对象权限
授予对象权限是由对象权限的所有者或者是sys、system用户来完成的,命令为 grant。如果带有 with grant option选项,那么则可以继续将该权限授予给其它用户。
.比如创建了 pangzi 用户,要可以查询scott.emp的表,那么就必须授予pangzi相应的对象权限
grant select on emp to pangzi;
.希望pangzi可以修改scott.emp的表,并且可以将该权限授予给其它用户。
grant update on emp to pangzi with grant option;
.希望pangzi可以拥有 查询,修改,删除的权限。
grant all on emp to pangzi;
*授予列权限,可以控制得更加精细
.希望pangzi可以修改scott.emp 的表的ename, sal数据。
grant update on emp(ename,sal) to pangzi;
*回收权限
收回对象权限可以由对象的所有者来完成,也可以由sys, system用户来完成. 命令 revoke
.收回pangzi可以查询scott.emp的权限
revoke select on emp from pangzi;
需要注意的是:对象权限的回收是级联回收的。也就是说,scott用户授予了pangzi 一个select权限并拥有了 with grant option 权限,当pangzi又授予了另外一个用户shouzi这个select权限时,要是scott对pangzi收回了select权限,那么,shouzi的select权限也将没有了。

二、角色:简化权限的管理

假如希望Tom用户可以登录、创建表、访问scott方案的表,如果要给Tom这三个权限,就要赋值三次,那就太麻烦了。一个用户创建之后就要给它许多默认的权限,要是一个一个给它的话,比较麻烦。于是oracle给了这样一种方式管理权限:
将 create session,select,insert,update授予给角色,然后将该角色授予给用户,那么该用户就拥有那些权限了。
角色分为预定义角色和自定义角色:

1.预定义角色

*connect 角色
connect 角色具有一般应用开发人员需要的大部分权限,当建立了一个用户后,多数情况下,只要给用户授予connect和resource 角色就够了。connect角色具有的系统权限:
alter session 连接数据库
create cluster
create database link
create table
create view
create sequence
*resource角色具有的系统权限
create cluster
create indextype
create table
create sequence
create type
create procedure
create trigger

*dba角色
dba角色具有所有的系统权限,及with admin option选项,默认的dba用户为sys和system,他们可以将任何系统权限授予其它用户。但是,dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)。 
*显示角色信息
.显示所有角色
select * from dba_roles;
.显示角色具有的角色。
这个可以通过数据字典视图dba_role_privs来显示某个用户具有的所有角色及当前默认角色。
select granted_role,default_role from dba_role_privs where grantee = '用户名';
当然了,这个用pl/sql developer工具查看更加直观。
原文地址:https://www.cnblogs.com/tgxblue/p/4217429.html