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 -- 建簇
 
(1). 顯示系統權限
      oracle提供了100多種系統權限,而且oracle的版本越高,提供的系統權限就越多,可以查詢數據字典視圖system_privilege_map,

可以顯示所有系統權限。
例:select * from system_privilege_map order by name;

(2). 授予系統權限
      一般情況,授予系統權限是由dba完成的,如果用其他用戶來授予系統權限,則要求該用戶必須具有grant any privilege的系統權限。在授予系統權限時,可以帶有with admin option選項,這樣,被授予權限的用戶或是角色還可以將該系統權限授予其它的用戶或是角色。爲了讓大家快速理解,我們舉例說明:
a. 創建兩個用戶ken,tom。初始階段他們沒有任何權限,如果登錄就會給出錯誤的信息。
    例:create user ken identfied by ken;
b. 給用戶ken授權
    例:grant create session, create table to ken with admin option;
          grant create view to ken;
c. 給用戶tom授權
   我們可以通過ken給tom授權,因爲with admin option是加上的。當然也可以通過dba給tom授權,我們就用ken給tom授權:
   grant create session, create table to tom;
   grant create view to ken;  --ok嗎?不ok

(3). 回收系統權限
       一般情況下,回收系統權限是dba來完成的,如果其它的用戶來回收系統權限,要求該用戶必須具有相應系統權限及轉授系統權限的選項(with admin option)。回收系統權限使用revoke來完成。
當回收了系統權限後,用戶就不能執行相應的操作了,但是請注意,系統權限級聯收回的問題?[不是級聯回收!]
system --------->ken ---------->tom
(create session)(create session)( create session)
用system執行如下操作:
revoke create session from ken;  --請思考tom還能登錄嗎?
答案:能,可以登錄

2.  對象權限
  指訪問其它方案對象的權利,用戶可以直接訪問自己方案的對象,但是如果要訪問別的方案的對象,則必須具有對象的權限。比如smith用戶要訪問scott.emp表(scott:方案,emp:表)。
常用的包括如下:
alter -- 修改
delete -- 刪除
select -- 查詢
insert -- 添加
update -- 修改
index -- 索引
references -- 引用
execute -- 執行

 

(1). 顯示對象權限
      通過數據字段視圖可以顯示用戶或是角色所具有的對象權限。視圖爲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';

 

(2). 授予對象權限
      在oracle9i前,授予對象權限是由對象的所有者來完成的,如果用其它的用戶來操作,則需要用戶具有相應的(with grant option)權限,從oracle9i開始,dba用戶(sys,system)可以將任何對象上的對象權限授予其它用戶。授予對象權限是用grant命令來完成的。
      對象權限可以授予用戶,角色,和public。在授予權限時,如果帶有with grant option選項,則可以將該權限轉授給其它用戶。但是要注意with grant option選項不能被授予角色。


a. 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;

 

b. 能否對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;

 

c. 授予alter權限
    如果black用戶要修改scott.emp表的結構,則必須授予alter對象權限
    conn scott/tiger;
    grant alter on emp to blake;
    當然也可以用system,sys來完成這件事。

 

d. 授予execute權限
    如果用戶想要執行其它方案的包/過程/函數,則須有execute權限。
    比如爲了讓ken可以執行包dbms_transaction,可以授予execute權限。
    conn system/manager;
    grant execute on dbms_transaction to ken;

 

e. 授予index權限
    如果想在別的方案的表上建立索引,則必須具有index對象權限。
    如果爲了讓black可以在scott.emp表上建立索引,就給其index的對象權限
    conn scott/tiger;
    grant index on scott.emp to blake;

 

f. 使用with grant option選項
   該選項用於轉授對象權限。但是該選項只能被授予用戶,而不能授予角色
   conn scott/tiger;
   grant select on emp to blake with grant option;
   conn black/shunping
   grant select on scott.emp to jones;

g. 回收對象權限
    在oracle9i中,收回對象的權限可以由對象的所有者來完成,也可以用dba用戶(sys,system)來完成。
    這裏要說明的是:收回對象權限後,用戶就不能執行相應的sql命令,但是要注意的是對象的權限是否會被級聯收回?[ 級聯回

收 ]
    如:scott------------->blake-------------->jones
          select on emp     select on emp       select on emp
          conn scott/tiger@accp
          revoke select on emp from blake
    請大家思考,jones能否查詢scott.emp表數據。
    答案:查不了了(和系統權限不一樣,剛好相反)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章