管理权限和角色
权限和角色的区别主要在哪里
说白了,用户要操作数据库的时候,需要有对应的系统权限
要操作方案的时候,需要有对应的对象权限,为了简化管理,出现了角色
图解:
系统权限:是指执行特定类型sql命令的权利。他用于控制用户可以执行的一个或是一组
数据库操作。比如,当用户具有了create
table权限的时候,它就可以在其的方案中建表了。
如果有create any table
权限的时候,可以在其他方案中建表了。在oracle中大概有100多权限
常用的有:
create
session 连接数据库
create view
建视图
create procedure
建过程、函数、包
create cluster
建族
create table
create public synonym 建同义词
create trigger 建立触发器
显示系统权限
查询数据字典视图system_privilege_map
select * from
system_privilege_map order by name;
授予系统权限
dba身份授予,如果带有with admin
option选项,则被授予权限的用户还可以给其他用户授予权限
例子:
1、创建两个用户zqh1、zqh2
conn
system/manager;
create user zqh1 indendified by 123;
create user zqh2
indendified by 321;
这时两个用户登录是登录不了的
2、给zqh1授权权限
grant
create session,create table to zqh1 with admin option;
--------这意味zqh1可以给其他用户继续授权
grant create view to
zqh1;
这时zqh1可以登录了
3、zqh1给zqh2授权
conn
zqh1/123;
grant create session,create table to zqh2 with admin
option;
grant create view to zqh2;------------no ok!!!!
回收系统权限
使用revoke命令,注意系统权限的级联回收问题---【不是级联回收】
根据上面zqh1、zqh2
system----------->zqh1---------------->zqh2
现在用system执行如下操作:
revoke
create session from zqh1;
-------思考:zqh2还能登陆吗?yes!!!
========================================================================
对象权限:指访问其它方案对象的权限。比如zqh1用户要访问scott.emp表,必须在emp表上
具有对象权限
常用的有:
alter
delete select insert update index索引 reference 引用 execute执行
显示对象权限
可以显示用户或是角色所具有的对象权限,视图dba_tab_privs
conn
system/manager;
select distinct privilege from dba_tab_privs;
select
grantor ,owner,table_name,privilege from dba_tab_privs where grantee='BLAKE'
授予对象权限
对象权限可以授予用户、角色和public。授予用户的时候可以用with
grant option
但是授予
角色的时候不可以用。
1、monkey用户操作scott.emp表,则必须授与相应的对象权限
conn
system/manager as sysdba;
create user monkey identified by 123;
grant
create session to monkey;
conn monkey/123;
select * from scott.emp;
-------报错,表或者视图不存在
-------------------------------------------------------------
(1)monkey用户查询scott.emp表数据,如何执行?
conn
scott/tiger;
grant select on emp to monkey;
select * from
scott.emp;
(2)monkey用户修改scott.emp表数据,如何执行?
grant update emp to
monkey;
(3)monkey用户删除scott.emp表数据,如何执行?
grant delete emp to
monkey;
(4)有没有更加简单的方法,一次把所有权限赋给monkey?
grant all on emp to monkey;
2、能否对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;
3、授予alter权限
monkey要修改scott.emp表的结果
则必须授予alter对象权限
conn
scott/tiger;
grant alter on emp to monkey;
4、授予execute权限
monkey想要执行其他方案的包/过程/函数,则须有execute权限
conn
system/manager;
grant execute on dbms_transaction(包) to monkey;
5、授予index权限
想在别的方案的表上建立索引
conn scott/tiger;
grant
index on scott.emp to monkey;
6、使用with grant option选项
conn scott/tiger;
grant select
on emp to monkey with grant option;
回收对象权限
对象的权限的回收是否会级联收回呢?【yes!!!!】
scott--------------->zqh1------------->zqh2
conn
scott/tiger@orcl
revoke select on emp
from zqh1; -------zqh2能否查询scott.emp表【no!!!】
总结:关于级联回收,系统权限没有级联回收,对象权限有级联回收!!!!!
角色:相关权限命令的集合,使用角色就是为了简化管理。
分类:预定义和自定义角色两类
预定义角色是oracle提供的角色,每种角色
都用于执行一些特定的管理任务。connect/resource/dba
(1)connect角色具有的系统权限
alter session
create
cluster
create database link
create session
create table
create view
create sequence
创建角色
create role zqhrole not
identified;
角色授权
conn system/manager;
grant
create session to zqhrole with admin option;----连接数据库的授权
conn scott/tiger@orcl;
grant
insert,update,delete on emp to zqhrole;-----提倡表是谁的,由谁给角色授权
把角色分配给用户
conn system/manager;
create user
zqh3 identified by 123;
grant zqhrole to zqh3 with admin option;
zqh3登录
conn zqh3/123;
select * from
scott.emp;-------ok!!!!!
删除角色
drop role 角色名
问题:
假如zqhrole角色删除了,那么zqh3还能登录吗????
conn system/manager;
drop role zqhrole;
conn zqh3/123;【登不上去了!!!!!!】
显示角色信息:
(1)显示所有的角色
select * from
dba_roles;---------25个角色
(2)显示角色具有的系统权限
select privilege,admin_option from
roles_sys_privs where
role='角色名';
(3)显示角色具有的对象权限
查询dba_tab_privs
(4)显示用户具有的角色,及默认角色
查询dba_role_privs
select
grant_role,default_role from dba_role_privs where grantee='用户名';