Oracle用戶權(quán)限
?
?
??? 對(duì)用戶的管理主要還是進(jìn)行權(quán)限上的設(shè)置。這部分的安全性問題就比較大了,有很多可以講的。其實(shí)可以參看一下Ask Tom中的相關(guān)問題。這里只是簡(jiǎn)單的介紹一下設(shè)置的原理,以及一些相關(guān)的數(shù)據(jù)字典。
?
?
系統(tǒng)權(quán)限:
1、使用GRANT語句向用戶賦予系統(tǒng)權(quán)限:
??? GRANT system_privilege TO user_name [ WITH ADMIN OPTION ] ;
??? 注:使用WITH ADMIN OPTION語句后,使用戶可以將相同權(quán)限賦給其他用戶。
?
2、使用REVOKE語句撤銷系統(tǒng)權(quán)限:
??? REVOKE system_privilege FROM user_name ;
??? 注:當(dāng)刪除A用戶的權(quán)限時(shí),通過A賦予B的權(quán)限不會(huì)消失。
?
3、任何用戶,都必須有CREATE SESSION權(quán)限,才可以連接到數(shù)據(jù)庫(kù)。
?
4、可通過 selectdistinctprivilegefrom dba_sys_privs; 來查詢所有的系統(tǒng)權(quán)限列表
??? ANALYZE ANY
??? AUDIT SYSTEM
??? CREATE TABLE
??? DROP PROFILE
??? DROP ANY ROLE
??? ALTER DATABASE
??? DROP ANY INDEX
??? DROP ANY TABLE
??? LOCK ANY TABLE
??? EXECUTE ANY PROCEDURE
??? ……
??? 基本上都是可以顧名思義的,但是權(quán)限相對(duì)比較多,150項(xiàng)左右。
?
對(duì)象權(quán)限:
?
1、對(duì)象權(quán)限賦予語法:
??? GRANT object_privilege ON object_name TO username [ WITH GRANT OPTION ];
??? 注:使用WITH GRANT OPTION語句后,使用戶可以將相同權(quán)限賦給其他用戶,與系統(tǒng)權(quán)限相同。
?
2、對(duì)象權(quán)限撤銷語法:
??? REVOKE object_privilege ON object_name FROM username;
??? 注:當(dāng)刪除A用戶的權(quán)限時(shí),通過A賦予B的權(quán)限自動(dòng)消失,與系統(tǒng)權(quán)限相反。
?
3、查看具體的對(duì)象權(quán)限:
?
???
select
*
from
dba_tab_privs
where
grantee=
'WANGXIAOQI'
;
?
??? select * fromTABLE_PRIVILEGESwhere GRANTEE='WANGXIAOQI';?
???
注1:兩者均可以查看對(duì)象權(quán)限,只是展現(xiàn)形式不同。
??? 注2:表名為TABLE_PRIV,但
不光只有table,而是所有object的信息,包括function、procedure、package等。
?
4、object privilege 種類比較少,而且根據(jù)對(duì)象類型的不同而不同。
?
??? 在賦值時(shí)可以使用all代替該類型對(duì)象的所有權(quán)限類型,如:
??? grant
select
,
update
,
delete
,
insert
on
table_name
to
user_name;
??? grant
all
on
table_name
to
user_name;
?
??? 注:對(duì)于TABLE,all包括:ALTER、DELETE、INDEX、INSERT、SELECT、UPDATE、REFERENCES、ON COMMIT REFRESH、QUERY REWRITE、DEBUG、FLASHBACK
?
?
角色管理:
?
1、通過role來簡(jiǎn)化賦權(quán)操作,每個(gè)role含有若干項(xiàng)系統(tǒng)權(quán)限。role包括系統(tǒng)預(yù)定義和自定義兩種。
?
??? select * from dba_roles; --查詢當(dāng)前所有ROLE列表,包括自定義
??? select * from dba_role_privs; --查詢某用戶的ROLE權(quán)限
??? select * from ROLE_SYS_PRIVS; --查詢當(dāng)前用戶的ROLE,及其所包含的系統(tǒng)權(quán)限
?
2、系統(tǒng)預(yù)定義角色:
?
??? CONNECT:
??????? CREATE VIEW
??????? CREATE TABLE
??????? ALTER SESSION
??????? CREATE CLUSTER
??????? CREATE SESSION
??????? CREATE SYNONYM
??????? CREATE SEQUENCE
??????? CREATE DATABASE LINK
??? RESOURCE:
??????? CREATE TYPE
??????? CREATE TABLE
??????? CREATE CLUSTER
??????? CREATE TRIGGER
??????? CREATE OPERATOR
??????? CREATE SEQUENCE
??????? CREATE INDEXTYPE
??????? CREATE PROCEDURE
?
??? 另外包括比較重要的ROLE如:DBA、EXP_FULL_DATABASE、IMP_FULL_DATABASE等。
?
?
3、自定義角色:
???
??? 創(chuàng)建ROLE:
??? CREATE ROLE role_name
??? [ NOT IDENTIFIED | IDENTIFIED BY password]
??? 注:IDENTIFIED 表示在修改該ROLE時(shí)是否需要提供密碼 <修改,不包括賦權(quán)和取消權(quán)限>
?
??? 在創(chuàng)建 role 之后,使用 grant 和 revoke 手動(dòng)設(shè)置 role 對(duì)應(yīng)的權(quán)限
??? 再使用 grant 和 revoke 將 role 賦給 user
??? 注:可以將 role 賦給 role
?
4、啟用和禁用ROLE:
?
??? SET ROLE [role [identified by password] |,role [identified by password]...]
??? | ALL [EXCEPT role[,role]...]
??? | NONE ];
??? 注:ALL 表示啟用改用戶的所有角色,NONE表示禁用所有角色。
?
??? 例:
??? 禁用所有角色:setrolenone;
??? 啟用所有角色:setroleall; --role不能有密碼
??? 啟用某個(gè)角色:setrole role_test identifiedby test; --有密碼的話
??? 禁用某個(gè)角色:setroleallexcept role_test;
??? 注:setrole命令是覆蓋性質(zhì)的,即不能先啟用一個(gè),再啟用另一個(gè),必須一條命令中全部啟動(dòng);
?
5、修改用戶時(shí)設(shè)置角色:
?
??? ALTER USER username
??? [default role [role_name[,role_name,...]]
??? | all [except role_name[,role_name,...]]
??? | none ];
?
?
?