一、介紹
這一部分我們主要看看oracle中如何管理權限和角色,權限和角色的區別在哪里。
當剛剛建立用戶時,用戶沒有任何權限,也不能執行任何操作。如果要執行某種特定的數據庫操作,則必須為其授予系統的權限;如果用戶要訪問其它方案的對象,則必須為其授予對象的權限。為了簡化權限的管理,可以使用角色。這里我們會詳細的介紹。
二、權限
權限是指執行特定類型sql命令或是訪問其它方案對象的權利,包括系統權限和對象權限兩種。
三、系統權限
1)、系統權限是指執行特定類型sql命令的權利。它用於控制用戶可以執行的一個或是一組數據庫操作。比如當用戶具有create table權限時,可以在其方案中建表,當用戶具有create any table權限時,可以在任何方案中建表。oracle提供了100多種系統權限。
常用的有:
create session 連接數據庫
create table 建表
create view 建視圖
create public synonym 建同義詞
create procedure 建過程、函數、包
create trigger 建觸發器
create cluster 建簇
2)、顯示系統權限
oracle提供了100多種系統權限,而且oracle的版本越高,提供的系統權限就越多,我們可以查詢數據字典視圖system_privilege_map,可以顯示所有系統權限。
select * from system_privilege_map order by name;
3)、授予系統權限
一般情況,授予系統權限是由dba完成的,如果用其他用戶來授予系統權限,則要求該用戶必須具有grant any privilege的系統權限。在授予系統權限時,可以帶有with admin option選項,這樣,被授予權限的用戶或是角色還可以將該系統權限授予其它的用戶或是角色。為了讓大家快速理解,我們舉例說明:
1.創建兩個用戶ken,tom。初始階段他們沒有任何權限,如果登錄就會給出錯誤的信息。
create user ken identified by ken;
2 給用戶ken授權
1). grant create session, create table to ken with admin option;
2). grant create view to ken;
3 給用戶tom授權
我們可以通過ken給tom授權,因為with admin option是加上的。當然也可以通過dba給tom授權,我們就用ken給tom授權:
1. grant create session, create table to tom;
2. grant create view to ken; --ok 嗎?不ok
4)、回收系統權限
一般情況下,回收系統權限是dba來完成的,如果其它的用戶來回收系統權限,要求該用戶必須具有相應系統權限及轉授系統權限的選項(with admin option)。回收系統權限使用revoke來完成。當回收了系統權限后,用戶就不能執行相應的操作了,但是請注意,系統權限級聯收回的問題?[不是級聯回收!]
system --------->ken ---------->tom
(create session)(create session)( create session)
用system 執行如下操作:
revoke create session from ken; --請思考tom還能登錄嗎?
答案:能,可以登錄
四、對象權限
1)、對象權限介紹
指訪問其它方案對象的權利,用戶可以直接訪問自己方案的對象,但是如果要訪問別的方案的對象,則必須具有對象的權限。
比如smith用戶要訪問scott.emp表(scott:方案,emp:表)
常用的有:
insert 添加
delete 刪除
alter 修改
select 查詢
index 索引
references 引用
execute 執行
2)、顯示對象權限
通過數據字段視圖可以顯示用戶或是角色所具有的對象權限。視圖為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';
3)、授予對象權限
在oracle9i前,授予對象權限是由對象的所有者來完成的,如果用其它的用戶來操作,則需要用戶具有相應的(with grant option)權限,從oracle9i 開始,dba用戶(sys,system)可以將任何對象上的對象權限授予其它用戶。授予對象權限是用grant 命令來完成的。對象權限可以授予用戶,角色,和public。在授予權限時,如果帶有with grantoption 選項,則可以將該權限轉授給其它用戶。但是要注意with grant option選項不能被授予角色。
1.monkey 用戶要操作scott.emp 表,則必須授予相應的對象權限
1). 希望monkey可以查詢scott.emp 表的數據,怎樣操作?
grant select on emp to monkey;
2). 希望monkey可以修改scott.emp 的表數據,怎樣操作?
grant update on emp to monkey;
3). 希望monkey可以刪除scott.emp 的表數據,怎樣操作?
grant delete on 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權限
如果black用戶要修改scott.emp表的結構,則必須授予alter對象權限
SQL> conn scott/tiger
SQL> grant alter on emp to blake;
當然也可以用system,sys 來完成這件事。
4.授予execute權限
如果用戶想要執行其它方案的包/過程/函數,則須有execute權限。
比如為了讓ken可以執行包dbms_transaction,可以授予execute 權限。
SQL> conn system/manager
SQL> grant execute on dbms_transaction to ken;
5.授予index權限
如果想在別的方案的表上建立索引,則必須具有index 對象權限。
如果為了讓black 可以在scott.emp 表上建立索引,就給其index 的對象權限
SQL> conn scott/tiger
SQL> grant index on scott.emp to blake;
6.使用with grant option 選項
該選項用於轉授對象權限。但是該選項只能被授予用戶,而不能授予角色
SQL> conn scott/tiger;
SQL> grant select on emp to blake with grant option;
SQL> conn black/shunping
SQL> grant select on scott.emp to jones;
4)、回收對象權限
在oracle9i 中,收回對象的權限可以由對象的所有者來完成,也可以用dba用戶(sys,system)來完成。
這里要說明的是:收回對象權限后,用戶就不能執行相應的sql命令,但是要注意的是對象的權限是否會被級聯收回?【級聯回收】
如:scott------------->blake-------------->jones
select on emp select on emp select on emp
SQL> conn scott/tiger@accp
SQL> revoke select on emp from blake
請大家思考,jones能否查詢scott.emp表數據。
答案:查不了了(級聯回收,和系統權限不一樣,剛好1相反)
