oracle set role

perfychi發表於2013-04-06
From: http://blog.csdn.net/lzx_bupt/article/details/6608955
文章寫得不錯,轉載一下,僅供分享收藏! 

ORACLE建立角色的時候是可以帶密碼驗證的。當為一個使用者授予角色時,如果是授予的DEFAULT的 時候,那麼這個使用者登入的時候自動就具備了這個角色,不需要進行這個角色的密碼驗證的。如果不是DEFAULT的,那麼可以使用SET ROLE ROLE_NAME IDENTIFIED ROLE_PASSWORD來進行密碼驗證後,使用者才能具有相應的角色。

 

oracle許可權體系中有個default role,比較難以理解。下面用例項說明一下作用。

我 們可以給某個使用者分配一些角色,比如role r1,r2,r3,r4,而其中可以將某些角色比如r1設定為default role,其他的不設定成default role,這樣,當該使用者登入時,自動具有default role中所包含的許可權,其他的角色所具有的許可權要透過set role 角色來獲得。

下面我們舉個例子:

(1)sys使用者作為sysdba登入,建立4個角色:


create role r1;

create role r2 identified by r2;

create role r3 identified by r3;

create role r4 identified by r4;


(2)sys使用者賦予這四個角色對應的許可權:


grant create session to r1;

grant select on hr.test to r2;  (這裡hr.test是我新建立的一個表,裡面有ID和name兩列)

grant update(name) on hr.test to r3;

grant insert on hr.test to r3;

grant delete on hr.test to r4;


(3)sys使用者建立一個使用者u3

create user u3 identified by u3;

(4)將角色r1,r2,r3,r4賦予使用者u3

grant r1,r2,r3,r4 to u3;

在修改使用者u3的預設角色前,r1,r2,r3,r4 角色均為u3的 default role,以u3使用者登入,查詢、增刪改hr.test,都沒有問題。[註釋:**10g 中是這樣的,11g中有此處有出入*]

(5)現在sys使用者修改使用者u3的default role,僅將r1作為u3的預設角色:

alter user u3 default role r1;  --此時將覆蓋原來的設定,u3 的default role =r1,僅僅有登入許可權。

(6)使用者u3 log off ,然後再log on,進去後發現,

查詢、增刪改hr.test都不能進行。

(7) 使用者自己開啟role許可權

set role r2 identified by r2;

這時執行 select * from hr.test,發現沒有問題。增刪改不行。

將對應的角色開啟:

set role r3 identified by r3;

此時修改和插入記錄沒有問題,但是select * from hr.test 確發現不行了。證明此時使用者所屬的角色僅僅是預設角色r1,和剛剛開啟的角色r3,而r2被set role r3 identified by r3;覆蓋掉了。

那要同時有r2,r3,r4的許可權怎麼辦呢?

set role r2 identified by r2,r3 identified by r3,r4 identified by r4。此時就同時對hr.test可以進行查詢,增刪改了。

不過set role 的效果是臨時的,只是當前session有效,其他的session無效,當結束當前session後再登入,又只有default role 的許可權了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-757847/,如需轉載,請註明出處,否則將追究法律責任。

相關文章