管理權(quán)限和角色
權(quán)限和角色的區(qū)別主要在哪里
說(shuō)白了,用戶(hù)要操作數(shù)據(jù)庫(kù)的時(shí)候,需要有對(duì)應(yīng)的系統(tǒng)權(quán)限
要操作方案的時(shí)候,需要有對(duì)應(yīng)的對(duì)象權(quán)限,為了簡(jiǎn)化管理,出現(xiàn)了角色
圖解:
系統(tǒng)權(quán)限:是指執(zhí)行特定類(lèi)型sql命令的權(quán)利。他用于控制用戶(hù)可以執(zhí)行的一個(gè)或是一組
數(shù)據(jù)庫(kù)操作。比如,當(dāng)用戶(hù)具有了create
table權(quán)限的時(shí)候,它就可以在其的方案中建表了。
如果有create any table
權(quán)限的時(shí)候,可以在其他方案中建表了。在oracle中大概有100多權(quán)限
常用的有:
create
session 連接數(shù)據(jù)庫(kù)
create view
建視圖
create procedure
建過(guò)程、函數(shù)、包
create cluster
建族
create table
create public synonym 建同義詞
create trigger 建立觸發(fā)器
顯示系統(tǒng)權(quán)限
查詢(xún)數(shù)據(jù)字典視圖system_privilege_map
select * from
system_privilege_map order by name;
授予系統(tǒng)權(quán)限
dba身份授予,如果帶有with admin
option選項(xiàng),則被授予權(quán)限的用戶(hù)還可以給其他用戶(hù)授予權(quán)限
例子:
1、創(chuàng)建兩個(gè)用戶(hù)zqh1、zqh2
conn
system/manager;
create user zqh1 indendified by 123;
create user zqh2
indendified by 321;
這時(shí)兩個(gè)用戶(hù)登錄是登錄不了的
2、給zqh1授權(quán)權(quán)限
grant
create session,create table to zqh1 with admin option;
--------這意味zqh1可以給其他用戶(hù)繼續(xù)授權(quán)
grant create view to
zqh1;
這時(shí)zqh1可以登錄了
3、zqh1給zqh2授權(quán)
conn
zqh1/123;
grant create session,create table to zqh2 with admin
option;
grant create view to zqh2;------------no ok!!!!
回收系統(tǒng)權(quán)限
使用revoke命令,注意系統(tǒng)權(quán)限的級(jí)聯(lián)回收問(wèn)題---【不是級(jí)聯(lián)回收】
根據(jù)上面zqh1、zqh2
system----------->zqh1---------------->zqh2
現(xiàn)在用system執(zhí)行如下操作:
revoke
create session from zqh1;
-------思考:zqh2還能登陸嗎?yes!!!
========================================================================
對(duì)象權(quán)限:指訪問(wèn)其它方案對(duì)象的權(quán)限。比如zqh1用戶(hù)要訪問(wèn)scott.emp表,必須在emp表上
具有對(duì)象權(quán)限
常用的有:
alter
delete select insert update index索引 reference 引用 execute執(zhí)行
顯示對(duì)象權(quán)限
可以顯示用戶(hù)或是角色所具有的對(duì)象權(quán)限,視圖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'
授予對(duì)象權(quán)限
對(duì)象權(quán)限可以授予用戶(hù)、角色和public。授予用戶(hù)的時(shí)候可以用with
grant option
但是授予
角色的時(shí)候不可以用。
1、monkey用戶(hù)操作scott.emp表,則必須授與相應(yīng)的對(duì)象權(quán)限
conn
system/manager as sysdba;
create user monkey identified by 123;
grant
create session to monkey;
conn monkey/123;
select * from scott.emp;
-------報(bào)錯(cuò),表或者視圖不存在
-------------------------------------------------------------
(1)monkey用戶(hù)查詢(xún)scott.emp表數(shù)據(jù),如何執(zhí)行?
conn
scott/tiger;
grant select on emp to monkey;
select * from
scott.emp;
(2)monkey用戶(hù)修改scott.emp表數(shù)據(jù),如何執(zhí)行?
grant update emp to
monkey;
(3)monkey用戶(hù)刪除scott.emp表數(shù)據(jù),如何執(zhí)行?
grant delete emp to
monkey;
(4)有沒(méi)有更加簡(jiǎn)單的方法,一次把所有權(quán)限賦給monkey?
grant all on emp to monkey;
2、能否對(duì)monkey訪問(wèn)權(quán)限更加精細(xì)控制
(1)monkey只可以修改scott.emp的表的sal字段,怎么操作?
grant
update on emp(sal) to
monkey;
(2)monkey只可以查詢(xún)scott.emp的表的ename,sal數(shù)據(jù),怎么操作?
grant select on
emp(ename,sal) to monkey;
3、授予alter權(quán)限
monkey要修改scott.emp表的結(jié)果
則必須授予alter對(duì)象權(quán)限
conn
scott/tiger;
grant alter on emp to monkey;
4、授予execute權(quán)限
monkey想要執(zhí)行其他方案的包/過(guò)程/函數(shù),則須有execute權(quán)限
conn
system/manager;
grant execute on dbms_transaction(包) to monkey;
5、授予index權(quán)限
想在別的方案的表上建立索引
conn scott/tiger;
grant
index on scott.emp to monkey;
6、使用with grant option選項(xiàng)
conn scott/tiger;
grant select
on emp to monkey with grant option;
回收對(duì)象權(quán)限
對(duì)象的權(quán)限的回收是否會(huì)級(jí)聯(lián)收回呢?【yes!!!!】
scott--------------->zqh1------------->zqh2
conn
scott/tiger@orcl
revoke select on emp
from zqh1; -------zqh2能否查詢(xún)scott.emp表【no!!!】
總結(jié):關(guān)于級(jí)聯(lián)回收,系統(tǒng)權(quán)限沒(méi)有級(jí)聯(lián)回收,對(duì)象權(quán)限有級(jí)聯(lián)回收!!!!!
角色:相關(guān)權(quán)限命令的集合,使用角色就是為了簡(jiǎn)化管理。
分類(lèi):預(yù)定義和自定義角色兩類(lèi)
預(yù)定義角色是oracle提供的角色,每種角色
都用于執(zhí)行一些特定的管理任務(wù)。connect/resource/dba
(1)connect角色具有的系統(tǒng)權(quán)限
alter session
create
cluster
create database link
create session
create table
create view
create sequence
創(chuàng)建角色
create role zqhrole not
identified;
角色授權(quán)
conn system/manager;
grant
create session to zqhrole with admin option;----連接數(shù)據(jù)庫(kù)的授權(quán)
conn scott/tiger@orcl;
grant
insert,update,delete on emp to zqhrole;-----提倡表是誰(shuí)的,由誰(shuí)給角色授權(quán)
把角色分配給用戶(hù)
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 角色名
問(wèn)題:
假如zqhrole角色刪除了,那么zqh3還能登錄嗎????
conn system/manager;
drop role zqhrole;
conn zqh3/123;【登不上去了!!!!!!】
顯示角色信息:
(1)顯示所有的角色
select * from
dba_roles;---------25個(gè)角色
(2)顯示角色具有的系統(tǒng)權(quán)限
select privilege,admin_option from
roles_sys_privs where
role='角色名';
(3)顯示角色具有的對(duì)象權(quán)限
查詢(xún)dba_tab_privs
(4)顯示用戶(hù)具有的角色,及默認(rèn)角色
查詢(xún)dba_role_privs
select
grant_role,default_role from dba_role_privs where grantee='用戶(hù)名';