基礎知識6——授予和撤銷許可權

與刃爭鋒發表於2014-01-07
授予和撤銷許可權

沒許可權,使用者不能做任何操作,甚至無法成功連線. grant授權,revoke撤銷許可權.

許可權有兩種:系統許可權和物件許可權,前者通常允許使用者執行影響資料字典的操作,後者允許使用者執行影響資料的操作.


系統許可權
大概200多種,大多數應用於影響資料字典的操作,比如建立表,使用者,影響例項或資料庫的,建立表空間,調整例項引數,建立會話,常用的許可權如下:

建立會話(create session)   --允許使用者進行連線.
受限制的會話(restricted session)  --如果使用startup restrict啟動資料庫,或使用alter system enable restricted session進行調整,則僅擁有此許可權的使用者可以聯接.
更改資料庫(alter database)   --允許訪問多個修改物理結構所需的命令.
更改系統(alter system)  --允許控制例項引數和記憶體結構
建立表空間(create tablespace)    --alter tablespace和drop tablespace許可權允許使用者管理表空間
建立表(create table)   --允許使用者在自己的模式中建立表,更改和刪除表,執行select,DML,建立更改或刪除index.


授予任何物件許可權(grant any object privilege)    允許使用者將自己沒有的物件的物件許可權授予他人,但不能授予自己.
建立任何表(create any table) 被授權人可以建立屬於其他使用者的表.

刪除任何表(drop any table) 可以刪除屬於其他使用者的表
插入,更新,刪除任何表(insert any table,update any table,delete any table) 可以對所有其他使用者的表執行這些DML.
選擇任何表(select any table) 可以對資料庫中任何表執行select操作.


授予許可權的語法:

GRANT privilege [ ,privilege... ] TO username;

一般建立使用者後給予以下常用系統許可權:

grant create session,alter session,create table,create view,create synonym,
create cluster,create database link,create sequence,create trigger,create type,
create procedure,,create operator to username;


以上許可權允許使用者連線和配置會話,建立儲存資料的物件和PL/SQL物件.這些物件存在於其模式中,使用者不擁有針對其他任何模式的許可權.
物件的建立將受到為其分配(或未分配)的針對各個表空間的配額的限制. 

此語法的一個變體允許被授權人將許可權傳遞給第三方,例子:

connect system/pwd

grant create table to scott with admin option;

connect scott/tiger

grant create table to bob;

給予scott在自己的模式下建立表的能力,也給予scott將建立表的權利給予bob


如果從使用者撤銷許可權,使用者建立的表會不變,如果使用者A被授予帶有admin option的許可權,那麼即使做了撤銷,A授予了許可權的使用者B也將保留許可權,不儲存系統許可權授予者的記錄,所以不存在撤銷級聯.

系統許可權的撤銷不會級聯(與撤銷物件許可權不用),要牢記!

any許可權針對資料庫中所有相關物件,比如

grant select any table to scott


將允許scott查詢每個模式中的每個表,輕易不要將any許可權授予使用者.而且any許可權針對資料庫中的每個使用者賬戶的每個物件進行授權,因此是系統許可權而不是物件許可權.




物件許可權

物件許可權允許針對表和相關物件執行select,insert,update,delete命令,也允許執行PL/SQL物件,如果使用者有create table許可權,就
可以對錶執行select和DML操作,而不需要獲得更多許可權.


物件許可權適用於不同型別的物件


語法如下:

GRANT privilege ON [ schema. ] object TO username [ WITH GRANT OPTION ];

比如:

grant selec on store.customers to scott;

變化包括使用all,及命名檢視或表的特定列:

grant select on store.orders to scott;

grant update (order_status) on store.orders to scott;

grant all on store.regions to scott;


此程式碼將允許scott查詢store模式中的orders表的所有列,但只能對order_status列執行寫操作.此後scott被給予store的regions表的所有物件許可權(select和DML)

使用with grant option,可使使用者將其物件許可權傳給其它使用者,oracle保留著物件許可權授予誰的記錄,所以會產生級聯效應.

connect store/pwd

grant select on customers to sales with grant option;

connect sales/pwd

grant select on store.customers to webapp with grant option;

connect webapp/pwd

grant select on store.customers to scott;

connect store/pwd

revoke select on customers from sales;

最後的結果是sales,wdbapp和scott都沒了針對store.customers的select許可權.

物件許可權的撤銷會產生級聯效應(這與系統許可權的撤銷不同)






練習時間,為一些使用者授予一些許可權

用system登入為sales授予create session許可權

grant create session to sales;

另開一個plus,用sales連線,能連上但無法建立表

system會話中授予sales許可權create table

grant create table to sales;

再建立表還會報錯,因為沒配額

system中為sales分配storedata表空間配額:

alter user sales quota 1m on storedata;

以sale的身份,在新表上授予物件許可權:

grant all on t1 to webapp;

grant select on t1 to accounts;


使用plus檢索資訊,以system身份執行查詢

select grantee,privilege,grantor,grantable from dba_tab_privs
where owner='SALES' and table_name='T1';

select * from dba_sys_privs 
where grantee='SALES';

撤銷授予webapp和accounts的許可權:

revoke all on sales.t1 from webapp;

revoke all on sales.t1 from accounts;

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

相關文章