Oracle數(shù)據(jù)庫(kù)的安全保護(hù)流程可以分為3個(gè)步驟。首先,用戶向數(shù)據(jù)庫(kù)提供身份識(shí)別信息,即提供一個(gè)數(shù)據(jù)庫(kù)賬號(hào)。接下來(lái)用戶還需要證明他們所給出的身份識(shí)別信息是有效的,這是通過(guò)輸入密碼來(lái)實(shí)現(xiàn)的,用戶輸入的密碼經(jīng)過(guò)數(shù)據(jù)庫(kù)的核對(duì)確認(rèn)用戶提供的密碼是否正確。最后,假設(shè)密碼是正確的,那么數(shù)據(jù)庫(kù)認(rèn)為身份識(shí)別信息是可信賴(lài)的。此時(shí),數(shù)據(jù)庫(kù)將會(huì)在基于身份識(shí)別信息的基礎(chǔ)上確定用戶所擁有的權(quán)限,即用戶可以對(duì)數(shù)據(jù)庫(kù)執(zhí)行什么操作。因此,為了確保數(shù)據(jù)庫(kù)的安全,首要的問(wèn)題就是對(duì)用戶進(jìn)行管理。
這里所有的用戶并不是數(shù)據(jù)庫(kù)的操作人員,而是在數(shù)據(jù)庫(kù)中定義的一個(gè)名稱(chēng),更準(zhǔn)確地說(shuō)它是賬戶,只是習(xí)慣上稱(chēng)其為用戶,它是Oracle數(shù)據(jù)庫(kù)的基本訪問(wèn)控制機(jī)制,當(dāng)連接到Oracle數(shù)據(jù)庫(kù)時(shí),操作人員必須提供正確的用戶名和密碼。
連接到數(shù)據(jù)庫(kù)的用戶所具有的權(quán)限是不同的,Oracle提供了一些特權(quán)用戶,比如,SYSDBA或SYSOPER,這類(lèi)用戶主要用于執(zhí)行數(shù)據(jù)庫(kù)的維護(hù)操作,如啟動(dòng)數(shù)據(jù)庫(kù)、關(guān)閉數(shù)據(jù)庫(kù)、建立數(shù)據(jù)庫(kù),以及執(zhí)行備份和恢復(fù)等操作。SYSDBA和SYSOPER的區(qū)別在于:SYSDBA不僅具備SYSOPER的所有權(quán)限,而且還可以建立數(shù)據(jù)庫(kù),執(zhí)行不完全恢復(fù)。在Oracle 11g中,Oracle提供了默認(rèn)的特權(quán)用戶SYS,當(dāng)以特權(quán)用戶身份登錄數(shù)據(jù)庫(kù)時(shí),必須帶有AS SYSDBA或AS SYSOPER選項(xiàng)。例如;
SQL> connect system/1qaz2wsx as sysdba;已連接。
與用戶密切關(guān)系的另一個(gè)概念是模式,模式也稱(chēng)作方案(Schema)。模式或方案實(shí)際上是用戶所擁有的數(shù)據(jù)庫(kù)對(duì)象的集合。在Oracle數(shù)據(jù)庫(kù)中,對(duì)象是以用戶來(lái)組織的,用戶與模式是一一對(duì)應(yīng)的關(guān)系,并且兩者名稱(chēng)相同。
SCOTT用戶擁有的所有對(duì)象都屬于SCOTT模式,而HR用戶擁有的所有對(duì)象都屬于HR模式。
Oracle為用戶賬戶提供了三種身份驗(yàn)證方法。
密碼驗(yàn)證 當(dāng)一個(gè)使用密碼驗(yàn)證機(jī)制的用戶視圖連接到數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)會(huì)核實(shí)用戶名是否是一個(gè)有效的數(shù)據(jù)庫(kù)賬戶,并且提供與該用戶在數(shù)據(jù)庫(kù)中存儲(chǔ)的密碼相匹配的密碼。由于用戶信息和密碼都存儲(chǔ)在數(shù)據(jù)庫(kù)內(nèi)部,所以使用密碼驗(yàn)證用戶也稱(chēng)為數(shù)據(jù)庫(kù)驗(yàn)證用戶。
外部驗(yàn)證外部驗(yàn)證是指當(dāng)用戶試圖連接到數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)會(huì)核實(shí)用戶名是否是一個(gè)有效的數(shù)據(jù)庫(kù)賬戶,并且確認(rèn)該用戶已經(jīng)完成了操作系統(tǒng)級(jí)別的身份驗(yàn)證。
注意:外部驗(yàn)證用戶并不在數(shù)據(jù)庫(kù)中存儲(chǔ)一個(gè)驗(yàn)證密碼。
全局驗(yàn)證全局驗(yàn)證是指用戶不在數(shù)據(jù)庫(kù)中存儲(chǔ)驗(yàn)證密碼,而是通過(guò)一種高級(jí)安全選項(xiàng)所提供的身份驗(yàn)證服務(wù)來(lái)進(jìn)行的。
在上述的三種驗(yàn)證方式中,密碼驗(yàn)證是最常使用的驗(yàn)證方法。
要?jiǎng)?chuàng)建一個(gè)新的用戶,可采用CREATE USER命令。其語(yǔ)法格式如下:
create user user_name identified by pass_word[or identified exeternally][or identified globally as ‘CN=user’][default tablespace tablespace_default][temporary tablespace tablespace_temp][quota [integer k[m]] [unlimited] ] on tablesapce_ specify1[,quota [integer k[m]] [unlimited] ] on tablesapce_ specify2[,…]…on tablespace_specifyn[profiles profile_name][account lock or account unlock]
參數(shù)說(shuō)明如下:
----創(chuàng)建一個(gè)mr用戶,口令為mrsoft,并設(shè)置默認(rèn)的表空間為users,臨時(shí)表空間為temp的用戶SQL> create user mr identified by mrsoft 2 default tablespace users 3 temporary tablespace temp;
(2)創(chuàng)建用戶,并配置其在指定表空間上的磁盤(pán)限額。有時(shí),為了避免用戶在創(chuàng)建表和索引對(duì)象時(shí)占用過(guò)多的空間,可以配置用戶在表空間上的磁盤(pán)限額。在創(chuàng)建用戶時(shí),可通過(guò)QUOTA xxxM ON tablespace_ specify子句配置指定表空間的最大可用限額,下面來(lái)看一個(gè)例子。
----創(chuàng)建一個(gè)用戶east,口令為mrsoft,默認(rèn)表空間為users,臨時(shí)表空間為temp的用戶,并指定該用戶在tbsp_1表空間上最多可使用的大小為10mSQL> create user east identified by mrsoft 2 default tablespace users 3 temporary tablespace temp 4 quota 10m on tbsp_1;
說(shuō)明:如果要禁止用戶使用某個(gè)表空間,則可以通過(guò)quota關(guān)鍵字設(shè)置該表空間的使用限額為0。
(3)創(chuàng)建用戶,并配置其在指定表空間上不受限制,如果要設(shè)置用戶在指定表空間上不受限制,可以使用QUOTA UNLIMITED ON tablespace_ specify子句。
----創(chuàng)建一個(gè)用戶名為df,口令為mrsoft,臨時(shí)表空間為temp,默認(rèn)表空間為tbsp_1,并且該用戶使用tbsp_1表空間不受限制SQL> create user df identified by mrsoft 2 default tablespace tbsp_1 3 temporary tablespace temp 4 quota unlimited on tbsp_1;
在創(chuàng)建完用戶之后,需要注意以下幾點(diǎn):
- 如果建立用戶時(shí)不指定DEFAULT TABLESPACE子句,Oracle會(huì)將SYSTEM表空間作為用戶默認(rèn)表空間。
- 如果建立用戶時(shí)不能指定TEMPORARY TABLESPACE子句,Oracle會(huì)將數(shù)據(jù)庫(kù)默認(rèn)臨時(shí)表空間作為用戶的臨時(shí)表空間。
- 初始建立的用戶沒(méi)有任何權(quán)限,所以為了是用戶可以連接到數(shù)據(jù)庫(kù),必須授權(quán)其CREATE SESSION權(quán)限
- 如果建立用戶時(shí)沒(méi)有為表空間指定QUOTA子句,那么用戶在特定表空間上的配額為0,用戶將不能在相應(yīng)的表空間上建立數(shù)據(jù)對(duì)象。
- 初始建立的用戶沒(méi)有任何權(quán)限,不能執(zhí)行任何數(shù)據(jù)庫(kù)操作。
用戶創(chuàng)建完后,管理員可以對(duì)用戶進(jìn)行修改,包括修改用戶口令,改變用戶默認(rèn)表空間、臨時(shí)表空間、磁盤(pán)配額及資源限制等。修改用戶的語(yǔ)法與創(chuàng)建的用戶的語(yǔ)法基本相似,只是把創(chuàng)建用戶語(yǔ)法中的“CREATE”關(guān)鍵字替換成“ALTER”罷了。
修改用戶的磁盤(pán)限額
如果DBA在創(chuàng)建用戶時(shí),指定了用戶在某個(gè)表空間的磁盤(pán)限額,那么經(jīng)過(guò)一段時(shí)間,該用戶使用該表空間已經(jīng)達(dá)到了DBA所設(shè)置的磁盤(pán)限額時(shí),Oracle系統(tǒng)就會(huì)顯示如圖13-2所示的錯(cuò)誤提示。
----修改用戶east在表空間上的磁盤(pán)限額為20m(原始為10m,先增加10m)。SQL> alter user east quota 20m on tbsp_1;
修改用戶的口令
用戶的口令在使用一段時(shí)間之后,根據(jù)系統(tǒng)安全的需要或在PROFILE文件中(資源配置文件)設(shè)置的規(guī)定,用戶必須要修改口令。
----修改用戶east的新口令為123456(原始為mrsoft)。SQL> alter user east identified by 123456;
解鎖被鎖住的用戶
Oracle默認(rèn)安裝完成后,為了安全起見(jiàn),很多用戶處于LOCKED狀態(tài),DBA可以對(duì)LOCKED狀態(tài)的用戶解除鎖定。
----使用alter user命令解除被鎖定的賬戶SH。SQL> alter user SH account unlock;
刪除用戶通過(guò)DROP USER語(yǔ)句完成的,刪除用戶后,Oracle會(huì)從數(shù)據(jù)字典中刪除用戶、方案及其所有對(duì)象方案,語(yǔ)法如下:
drop user user_name[cascade]
參數(shù)說(shuō)明如下:
----使用drop user語(yǔ)句刪除用戶df,并連同該用戶所擁有的對(duì)象一起刪除。SQL> drop user df cascade;
根據(jù)系統(tǒng)管理方式的不同,在Oracle數(shù)據(jù)庫(kù)中將權(quán)限分為兩大類(lèi):系統(tǒng)權(quán)限和對(duì)象向權(quán)限。
系統(tǒng)權(quán)限是在系統(tǒng)級(jí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取和使用的機(jī)制,比如,用戶是否能夠連接到數(shù)據(jù)庫(kù)系統(tǒng)(SESSION權(quán)限),執(zhí)行系統(tǒng)級(jí)的DDL語(yǔ)句(如CREAT、ALTER、和DROP)等。
對(duì)象權(quán)限是指某一個(gè)用戶對(duì)其他用戶的表、視圖、序列、存儲(chǔ)過(guò)程、函數(shù)、包等的操作權(quán)限。不同類(lèi)型的對(duì)象具有不同的對(duì)象權(quán)限,對(duì)于某些模式對(duì)象,比如簇、索引、觸發(fā)器、數(shù)據(jù)庫(kù)鏈接等沒(méi)有相應(yīng)的實(shí)體權(quán)限,這些權(quán)限由系統(tǒng)權(quán)限進(jìn)行管理。
在Oracle 11g中含有200多種系統(tǒng)特權(quán),并且所有這些系統(tǒng)特權(quán)均被列舉在SYSTEM_PRIVILEGE_MAP數(shù)據(jù)目錄視圖中。授權(quán)操作使用GRANT命令,其語(yǔ)法格式如下:
grant sys_privi | role to user | role | public [with admin option]
參數(shù)說(shuō)明如下:
SQL> connect system/1qaz2wsx已連接。SQL> grant connect,resource to east;授權(quán)成功。 SQL> connect east/123456;已連接。
在上面的代碼中,使用east連接數(shù)據(jù)庫(kù)后,Oracle顯示“已連接”,這說(shuō)明給east授予“connect”的權(quán)限是成功的。另外,如果想要east將這兩個(gè)權(quán)限可以傳遞給其他的用戶,則需要在grant語(yǔ)句中使用“with admin option”關(guān)鍵字。
----在創(chuàng)建用戶dongfang和xifang后,首先system將創(chuàng)建session和創(chuàng)建-table的權(quán)限授權(quán)給dongfang,然后dongfang再將這兩個(gè)權(quán)限傳遞給xifang,最后通過(guò)xifang這個(gè)用戶創(chuàng)建一個(gè)數(shù)據(jù)表SQL> create user dongfang identified by mrsoft 2 default tablespace users 3 quota 10m on users; 用戶已創(chuàng)建。 SQL> create user xifang identified by mrsoft 2 default tablespace users 3 quota 10m on users; 用戶已創(chuàng)建。 SQL> grant create session,create table to dongfang with admin option; 授權(quán)成功。 SQL> connect dongfang/mrsoft;已連接。SQL> grant create session,create table to xifang; 授權(quán)成功。 SQL> connect xifang/mrsoft;已連接。SQL> create table tb_xifang 2 ( id number, 3 name varchar2(20) 4 ); 表已創(chuàng)建。
一般用戶若被授予過(guò)高的權(quán)限就可能給Oracle系統(tǒng)帶來(lái)安全隱患。作為Oracle系統(tǒng)的管理員,應(yīng)該能夠查詢(xún)當(dāng)前Oracle系統(tǒng)各個(gè)用戶的權(quán)限,并且能夠使用REVOKE命令撤銷(xiāo)用戶的某些不要的系統(tǒng)權(quán)限,REVOKE命令的語(yǔ)法格式如下:
revoke sys_privi | role from user | role | public
參數(shù)說(shuō)明如下:
—- 撤銷(xiāo)east用戶的resource系統(tǒng)權(quán)限,代碼及運(yùn)行結(jié)果如下。
SQL> connect system/1qaz2wsx;已連接。SQL> revoke resource from east;撤銷(xiāo)成功。
如果數(shù)據(jù)庫(kù)管理員用GRANT命令給用戶A授予系統(tǒng)權(quán)限是帶有WITH ADMIN OPTION選項(xiàng),則該用戶A有權(quán)將系統(tǒng)權(quán)限再次授予另外的用戶B。在這種情況下,如果數(shù)據(jù)庫(kù)管理員使用REVOKE命令撤銷(xiāo)A用戶的系統(tǒng)權(quán)限,則用戶B的系統(tǒng)權(quán)限仍然有效。
首先撤銷(xiāo)用戶dongfang的create table權(quán)限,然后嘗試是否還可以通過(guò)用戶xifang創(chuàng)建數(shù)據(jù)表(注:是dongfang將create table權(quán)限傳遞給xifang),代碼及運(yùn)行結(jié)果如下。
SQL> revoke create table from dongfang;撤銷(xiāo)成功。SQL> connect xifang/mrsoft;已連接。SQL> create table tb_xifang_2 2 ( id number, 3 name varchar2(10) 4 );表已創(chuàng)建。
與將系統(tǒng)權(quán)限授予用戶基本相同,授予對(duì)象權(quán)限給用戶或角色也使用GRANT命令,其語(yǔ)法格式如下:
Grant obj_privi | all column on schema.object to user | role | public [with grant option] | [with hierarchy option]
參數(shù)說(shuō)明如下:
----給用戶xifang授予select、insert、delete和update表soctt.emp的權(quán)限。SQL> grant select,insert,delete,update on scott.emp to xifang;授權(quán)成功。
要從用戶或角色中撤銷(xiāo)對(duì)象權(quán)限,仍然要使用REVOKE命令,其語(yǔ)法格式如下:
revoke obj_privi | all on schema.object from user | role | public cascade constraints
參數(shù)說(shuō)明如下:
----從xifang用戶撤銷(xiāo)scott.emp表的update和delete權(quán)限。SQL> connect system/1qaz2wsx;已連接。SQL> revoke delete,update on scott.emp from xifang;撤銷(xiāo)成功。
說(shuō)明:如果數(shù)據(jù)庫(kù)管理員GRANT命令給用戶A授予對(duì)象權(quán)限時(shí)帶有WITH ADMIN OPTION選項(xiàng),則該用戶A有權(quán)將權(quán)限再次授予另外的用戶B。在這種情況下,如果數(shù)據(jù)庫(kù)管理員用REVOKE命令撤銷(xiāo)A用戶的對(duì)象權(quán)限時(shí),用戶B的對(duì)象權(quán)限也被撤銷(xiāo)。由此可見(jiàn),在進(jìn)行系統(tǒng)權(quán)限回收和進(jìn)行對(duì)象權(quán)限回收時(shí),效果是不同的。
用戶被授予的系統(tǒng)權(quán)限或?qū)ο髾?quán)限都被記錄在Oracle的數(shù)據(jù)字典里,了解某個(gè)用戶被授予哪些系統(tǒng)權(quán)限和對(duì)象權(quán)限是確保應(yīng)用系統(tǒng)安全的重要工作。表是Oracle 11g用于存放用戶、系統(tǒng)權(quán)限、對(duì)象權(quán)限有關(guān)的數(shù)據(jù)字典。
角色是一個(gè)獨(dú)立的數(shù)據(jù)庫(kù)實(shí)體,它包括一組權(quán)限。也就是說(shuō),角色是包括一個(gè)或者多個(gè)權(quán)限的集合,它并不被哪個(gè)用戶所擁有。角色可以被授予任何用戶,也可以從用戶中將角色收回。
使用角色可以簡(jiǎn)化權(quán)限的管理,可以?xún)H用一條語(yǔ)句就能從用戶那里授予或回收權(quán)限,而不必對(duì)用戶一一授權(quán)。使用角色還可以實(shí)現(xiàn)權(quán)限的動(dòng)態(tài)管理,比如,隨著應(yīng)用的變化可以增加或者減少角色的權(quán)限,這樣通過(guò)改變角色的權(quán)限,就實(shí)現(xiàn)了改變多個(gè)用戶的權(quán)限。
角色、用戶及權(quán)限是一組關(guān)系密切的對(duì)象,既然角色是一組權(quán)限的集合,那么,它只有被授予某個(gè)用戶才能有意義,可以用如圖所示的圖形來(lái)幫助我們理解角色、用戶及權(quán)限的關(guān)系。
作為Oracle的數(shù)據(jù)庫(kù)管理員,在創(chuàng)建和管理用戶時(shí),必須理解Oracle的權(quán)限與角色的關(guān)系。在復(fù)雜的大型應(yīng)用系統(tǒng)中,要求對(duì)應(yīng)用系統(tǒng)功能進(jìn)行分類(lèi),從而形成角色的雛形,再使用CREATE ROLE語(yǔ)句將其創(chuàng)建成為角色;最后根據(jù)用戶工作的分工,將不同的角色(包括系統(tǒng)預(yù)定義的角色)授予各類(lèi)用戶。如果應(yīng)用系統(tǒng)的規(guī)模很小,用戶數(shù)也不多,則可以直接將應(yīng)用的權(quán)限授予用戶,即使是這樣,用戶也必須對(duì)Oracle系統(tǒng)的預(yù)定義角色有所了解,因?yàn)橐粋€(gè)用戶至少被授予一個(gè)以上的預(yù)定義角色時(shí)才能使用ORACLE系統(tǒng)資源。
另外,在創(chuàng)建角色時(shí),可以為角色設(shè)置應(yīng)用安全性。角色的安全性通過(guò)為角色設(shè)置口令進(jìn)行保護(hù),必須提供正確的口令才允許修改或設(shè)置角色。
所謂系統(tǒng)預(yù)定義角色是指在數(shù)據(jù)庫(kù)安裝完成后由系統(tǒng)自動(dòng)創(chuàng)建的一些常用角色,這些角色已經(jīng)由系統(tǒng)授予了相應(yīng)的系統(tǒng)權(quán)限,可以由數(shù)據(jù)庫(kù)管理員直接使用。一旦將這些角色授予用戶以后,用戶便具有了角色中所包含的系統(tǒng)權(quán)限。下面列出的這幾個(gè)系統(tǒng)預(yù)定義角色是最常被用到的。
IMP_FULL_DATABASE。
角色CONNECT,RESOURCE及DBA主要用于數(shù)據(jù)庫(kù)管理,這3個(gè)角色之間相互沒(méi)有包含關(guān)系(有些系統(tǒng)權(quán)限可能有重疊)。數(shù)據(jù)庫(kù)管理員需要分別授予CONNECT,RESOURCE和DBA角色。對(duì)于一般的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員,則需要授予CONNECT,RESOURCE角色。
角色I(xiàn)MP_FULL_DATABASE和EXP_FULL_DATABASE分別用于操作數(shù)據(jù)庫(kù)的導(dǎo)入或?qū)С龉ぞ?,如,操作?shù)據(jù)庫(kù)工具EXPDP,IMPDP,或者系統(tǒng)的EXP,IMP。在使用這些工具進(jìn)行整個(gè)數(shù)據(jù)庫(kù)的到導(dǎo)出與導(dǎo)入工作時(shí),需要具備這兩個(gè)角色。
不同版本的Oracle預(yù)定義的角色不一樣多,但都可以從DBA_ROLES數(shù)據(jù)字典中查詢(xún)到,下面通過(guò)該數(shù)據(jù)字典來(lái)看一下Oracle 11g的預(yù)定義系統(tǒng)角色有哪些。
----使用select語(yǔ)句查詢(xún)dba_roles數(shù)據(jù)字典中的角色信息。SQL> set pagesize 50;SQL> select * from dba_roles;
如果系統(tǒng)預(yù)定義的角色不符合用戶需要,那么,數(shù)據(jù)庫(kù)管理員可以創(chuàng)建更多的角色,創(chuàng)建用戶自定義角色可以使用CREATE ROLE語(yǔ)句來(lái)實(shí)現(xiàn),其語(yǔ)法格式如下:
create role role_name [ not identified | identified by [password] | [exeternally] | [globally]]
參數(shù)說(shuō)明如下:
----創(chuàng)建一個(gè)名為designer的角色,該角色的口令為123456。SQL> connect system/1qaz2wsx;已連接。SQL> create role designer identified by 123456;
一旦角色創(chuàng)建完成,就可以對(duì)角色進(jìn)行授權(quán),給角色授權(quán)也是使用GRANT…TO語(yǔ)句來(lái)實(shí)現(xiàn)的。如果系統(tǒng)管理員具有GRANT_ANY_PRVILEGE權(quán)限,就可以對(duì)某個(gè)角色進(jìn)行授權(quán)。比如,授權(quán)CREATE SESSION,CREATE SYNONYM,CREATE VIEW等。
----給designer角色授予create view和create table權(quán)限。SQL> grant create view,create table to designer;
在角色獲得了權(quán)限之后,就可以把這個(gè)有使用價(jià)值的角色授予給某個(gè)用戶了。把角色授予給某個(gè)用戶仍然使用GRANT…TO語(yǔ)句來(lái)實(shí)現(xiàn)。
----把designer角色授權(quán)給用戶dongfang,代碼及運(yùn)行結(jié)果如下。SQL> grant designer to dongfang;
在學(xué)習(xí)過(guò)管理用戶(包括創(chuàng)建、修改、刪除等操作)之后,再學(xué)習(xí)如何管理角色就相對(duì)簡(jiǎn)單多了,因?yàn)檫@二者之間有很多相似之處,這里僅通過(guò)一些簡(jiǎn)單實(shí)例來(lái)對(duì)角色的管理進(jìn)行說(shuō)明。
查看角色所包含的權(quán)限
查看角色權(quán)限通常使用ROLE_SYS_PRIVS數(shù)據(jù)字典,來(lái)看下面的例子。
----查詢(xún)角色designer被屬于的權(quán)限有哪些。SQL> select * from role_sys_privs where role = 'DESIGNER';
修改角色密碼
修改角色密碼包括取消角色密碼和修改角色密碼兩種情況,可以使用ALTER ROLE語(yǔ)句來(lái)實(shí)現(xiàn)。
----首先取消designer角色的密碼,然后再重新給該角色設(shè)置一個(gè)密碼。SQL> alter role designer not identified;角色已丟棄。SQL> alter role designer identified by mrsoft;角色已丟棄。
設(shè)置當(dāng)前用戶要生效的角色
角色的生效是一個(gè)什么概念呢?假設(shè)用戶a有b1,b2,b3三個(gè)角色,那么,如果b1未生效,則b1所包含的權(quán)限對(duì)于a來(lái)講是不擁有的,只有角色生效了,角色內(nèi)的權(quán)限才作用于用戶,最大可生效角色數(shù)由參數(shù)MAX_ENABLED_ROLES設(shè)定;用戶登錄后,Oracle將所有直接賦值給用戶的權(quán)限和用戶默認(rèn)角色中的權(quán)限賦給用戶。設(shè)置角色生效可使用SET ROLE語(yǔ)句。
創(chuàng)建一個(gè)無(wú)需密碼驗(yàn)證的角色queryer,然后設(shè)置該角色生效,接下來(lái)再設(shè)置帶有密碼的角色designer也生效。
SQL> create role queryer;角色已創(chuàng)建。SQL> set role queryer;角色集SQL> set role designer identified by mrsoft;角色集
說(shuō)明:如果要設(shè)置帶有密碼的角色生效,則必須在SET ROLE語(yǔ)句后面使用“IDENTIFIED BY”關(guān)鍵字指定角色的密碼。
刪除角色
刪除角色很簡(jiǎn)單,使用DROP ROLE語(yǔ)句即可實(shí)現(xiàn),來(lái)看下面的例子。
----使用drop role語(yǔ)句刪除角色queryer。SQL> drop role queryer;角色已刪除。
刪除角色后,原來(lái)?yè)碛性摻巧挠脩魧⒉辉贀碛性摻巧?,相?yīng)的權(quán)限也將失去。
創(chuàng)建角色和用戶以后,給角色和用戶授予的權(quán)限被記錄在Oracle數(shù)據(jù)字典里,作為Oracle數(shù)據(jù)庫(kù)管理員,需要了解角色被授予了哪些權(quán)限及用戶被授予了哪些權(quán)限和角色,從而對(duì)這個(gè)數(shù)據(jù)庫(kù)的所有用戶進(jìn)行全面的管理,如表所示是Oracle 11g用于存放用戶、角色及權(quán)限的相關(guān)數(shù)據(jù)字典。
----查詢(xún)HR用戶被授予的系統(tǒng)角色。SQL> select granted_role,default_role from dba_role_privs 2 where grantee = 'HR';
在某個(gè)模式下,如果用戶要確定當(dāng)前會(huì)話中的所有有效角色,可以通過(guò)SESSION_ROLE數(shù)據(jù)字典來(lái)查詢(xún)。
----在scott模式下,查詢(xún)當(dāng)前用戶的所有有效角色。SQL> connect scott/1qaz2wsx;已連接。SQL> select * from session_roles;
PROFILE作為用戶配置文件,它是密碼限制、資源限制的命名集合。PROFILE文件作為Oracle安全策略的重要組成部分,利用它可以對(duì)數(shù)據(jù)庫(kù)用戶進(jìn)行基本的資源限制,并且可以對(duì)用戶的密碼進(jìn)行管理。
在安裝數(shù)據(jù)庫(kù)時(shí),Oracle會(huì)自動(dòng)建立名為DEFAULT的默認(rèn)配置文件。如果沒(méi)有為新創(chuàng)建的用戶指定DEFAULT文件,Oracle將自動(dòng)為它指定DEFAULT配置文件。初始的DEFAULT文件沒(méi)有進(jìn)行任何密碼和資源限制。使用PROFILE文件時(shí)需要注意如下事項(xiàng)。
當(dāng)操作人員要連接到Oracle數(shù)據(jù)庫(kù)時(shí),需要提供用戶名和密碼。對(duì)于黑客或某些人而言,他們可能通過(guò)猜測(cè)或反復(fù)實(shí)驗(yàn)來(lái)破解密碼。為了加強(qiáng)密碼的安全性,可以使用PROFILE文件管理密碼。PROFILE文件提供了一些密碼管理選項(xiàng),他們提供了強(qiáng)大的密碼管理功能,從而確保密碼的安全。為 了實(shí)現(xiàn)密碼限制,必須首先建立PROFILE文件。建立PROFILE文件是使用CREATE PROFILE語(yǔ)句完成的, 一般情況下,該語(yǔ)句是由DBA執(zhí)行的,如果要以其他用戶身份建立PROFILE文件,則要求該用戶必須具有CREATE PROFILE系統(tǒng)權(quán)限。
使用PROFILE文件可以實(shí)現(xiàn)如下四種密碼管理:賬戶鎖定、密碼的過(guò)期時(shí)間、密碼歷史和密碼的復(fù)雜度。
1.賬戶鎖定
賬戶的鎖定策略是指用戶在連續(xù)輸入多少次錯(cuò)誤密碼后,Oracle會(huì)自動(dòng)鎖定用戶的賬戶,并且可以規(guī)定賬戶的鎖定時(shí)間。Oracle為鎖定賬戶提供了以下兩個(gè)參數(shù)。
---- 創(chuàng)建的profile文件,要求設(shè)置連續(xù)失敗次數(shù)為5,超過(guò)該次數(shù)后,賬戶將被鎖定7天,然后使用alter user語(yǔ)句將profile文件(即lock_account)分配給用戶dongfang。SQL> create profile lock_account limit 2 failed_login_attempts 5 3 password_lock_time 7;配置文件已創(chuàng)建SQL> alter user dongfang profile lock_account;用戶已更改。
在建立lock_account文件并將該文件分配給用戶dongfang后,如果以用戶dongfang身份連接到數(shù)據(jù)庫(kù),并且連續(xù)連接失敗5次后,Oracle將自動(dòng)鎖定該用戶賬戶。此時(shí),即使為用戶dongfang提供了正確的密碼,也無(wú)法連接到數(shù)據(jù)庫(kù)。
在建立lock_account文件時(shí),由于指定password_lock_time的參數(shù)為7,所以賬戶鎖定天數(shù)達(dá)到7天后,Oracle會(huì)自動(dòng)解鎖賬戶。
說(shuō)明:如果建立PROFILE文件時(shí)沒(méi)有提供該參數(shù),將自動(dòng)使用默認(rèn)值UNLIMITED,這種情況下,需要DBA手動(dòng)解鎖用戶賬戶。
2.密碼的過(guò)期時(shí)間
密碼的過(guò)期時(shí)間是指強(qiáng)制用戶定期修改自己的密碼,當(dāng)密碼過(guò)期后,Oracle會(huì)隨時(shí)提醒用戶修改密碼。密碼寬限期是指密碼到期之后的寬限使用時(shí)間。默認(rèn)情況下,建立用戶并為其提供密碼之后,密碼會(huì)一直生效。為了防止其他人員破解用戶賬戶的密碼,可以強(qiáng)制普通用戶定期改變密碼。為了將強(qiáng)制用戶定期修改密碼,Oracle提供了如下參數(shù)。
----下面創(chuàng)建一個(gè)profile文件(即password_lift_time),并設(shè)置用戶的密碼有效期為30天,密碼寬限期為3天,然后使用alter user語(yǔ)句將profile文件(即password_lift_time)分配給用戶dongfang。SQL> create profile password_lift_time limit 2 password_life_time 30 3 password_grace_time 3;配置文件已創(chuàng)建SQL> alter user dongfang profile password_lift_time;用戶已更改。
若果用戶在30天內(nèi)沒(méi)有修改密碼,那么在第31天、第32天、第33天連接時(shí),仍然會(huì)顯示類(lèi)似的警告信息。如果在33天內(nèi)仍然沒(méi)有修改密碼,那么當(dāng)?shù)?4天連接時(shí),Oracle會(huì)強(qiáng)制用戶修改密碼,否則不允許連接到數(shù)據(jù)庫(kù)。
3.密碼歷史
密碼歷史是用于控制賬戶密碼的可重復(fù)使用次數(shù)或可重用時(shí)間。使用密碼歷史參數(shù)后,Oracle會(huì)將密碼修改信息存放到數(shù)據(jù)字典中。這樣,當(dāng)修改密碼時(shí),Oracle會(huì)對(duì)新、舊密碼進(jìn)行比較,以確保用戶不會(huì)重用過(guò)去已經(jīng)用過(guò)的密碼。關(guān)于密碼歷史有如下兩個(gè)參數(shù)。
PASSWORD_REUSE_TIME 該參數(shù)指定密碼可重用的時(shí)間,單位為天。
PASSWORD_REUSE_MAX 該參數(shù)設(shè)置口令在能夠被重新使用之前,必須改變的次數(shù)。
說(shuō)明:在使用密碼歷史選項(xiàng)時(shí),只能使用其中的一個(gè)參數(shù),并將另一個(gè)參數(shù)設(shè)置為UNLIMITED。
4.密碼復(fù)雜度
在PROFILE文件中,可以通過(guò)指定的函數(shù)來(lái)強(qiáng)制用戶的密碼必須具有一定的復(fù)雜度。例如,強(qiáng)制用戶的密碼不能與用戶名相同。使用校驗(yàn)函數(shù)驗(yàn)證用戶密碼的復(fù)雜度時(shí),只需要將這個(gè)函數(shù)的名稱(chēng)指定給PROFILE文件中的PASSWORD_VERIFY_FUNCTION參數(shù),Oracle就會(huì)自動(dòng)使用該函數(shù)對(duì)用戶的密碼和格式進(jìn)行驗(yàn)證。
在Oracle 11g中,驗(yàn)證密碼復(fù)雜度功能有新的改進(jìn)。在$ORACLE_HOME/rdbms/admin目錄下創(chuàng)建了一個(gè)新的密碼驗(yàn)證文件UTLPWDMG.SQL,其中不僅提供了先前的驗(yàn)證函數(shù)VERIFY_FUNCTION,還提供了一個(gè)新建的VERIFY_FUNCTION_11G函數(shù)。
在大而復(fù)雜的多用戶數(shù)據(jù)庫(kù)環(huán)境中,因?yàn)橛脩舯姸?,所以系統(tǒng)資源可能會(huì)成為影響性能的主要瓶頸,為了有效地利用系統(tǒng)資源,應(yīng)該根據(jù)用戶所承擔(dān)任務(wù)的不同為其分配合理資源。PROFILE不僅可用于管理用戶密碼,還可以用于管理用戶資源。需要注意,如果是使用PROFILE管理資源,必須將RESOURCE_LIMIT參數(shù)設(shè)置為T(mén)RUE,以激活資源限制。由于該參數(shù)是動(dòng)態(tài)參數(shù),所以可以使用ALTER SYSTEM語(yǔ)句進(jìn)行修改。
----首先使用show命令查看RESOURCE_LIMIT參數(shù)的值,然后使用alter system命令修改該參數(shù)的值為true,從而激活資源限制。SQL> show parameter resource_limit;NAME TYPE VALUE-------------------- ----------- ------resource_limit boolean FALSESQL> alter system set resource_limit=true;系統(tǒng)已更改。
利用PROFILE配置文件,可以對(duì)以下系統(tǒng)資源進(jìn)行限制:
當(dāng)一個(gè)會(huì)話或SQL語(yǔ)句占用的資源超過(guò)PROFILE文件中的限制時(shí),Oracle將終止并回退當(dāng)前的事務(wù),然后向用戶返回錯(cuò)誤的信息,如果受到的限制是會(huì)話級(jí)的,在提交或回退事務(wù)后,用戶會(huì)話將被終止;而受到調(diào)用級(jí)限制時(shí),用戶會(huì)話還能夠繼續(xù)進(jìn)行,只是當(dāng)前執(zhí)行的SQL語(yǔ)句將被終止。下面是PROFILE文件中對(duì)各種資源限制的參數(shù)。
在Oracle中,PROFILE文件也是一種數(shù)據(jù)資源。DBA也可以使用相應(yīng)的語(yǔ)句對(duì)其進(jìn)行管理,包括修改配置文件、刪除配置文件按、激活或禁用配置文件。
1.修改PROFILE文件
在創(chuàng)建PROFILE文件之后,還可以使用ALTER PROFILE語(yǔ)句修改其中的資源參數(shù)和密碼參數(shù),來(lái)看下面的例子。
----對(duì)password_lift_time文件(即PROFILE文件)的資源限制參數(shù)進(jìn)行修改。SQL> alter profile password_lift_time limit 2 cpu_per_session 20000 3 sessions_per_user 10 4 cpu_per_call 500 5 password_life_time 180 6 failed_login_attempts 10;配置文件已更改
說(shuō)明:對(duì)配置文件所做的修改只有在用戶開(kāi)始新的會(huì)話時(shí)才會(huì)生效
2.刪除PROFILE文件
使用DROP PROFILE語(yǔ)句可以刪除PROFILE文件。如果要?jiǎng)h除的配置文件已經(jīng)被指定給了用戶,則必須在DROP PROFILE語(yǔ)句中使用CASCADE關(guān)鍵字,來(lái)看下面的例子。
----刪除被分配給dongfang這個(gè)用戶的password_lift_time配置文件。SQL> drop profile password_lift_time cascade;配置文件已刪除。
說(shuō)明:如果為用戶指定的配置文件被刪除,則Oracle將自動(dòng)為用戶重新指定DEFAULT配置文件
在PROFILE文件被創(chuàng)建后,其信息被存儲(chǔ)在數(shù)據(jù)字典中。通過(guò)查詢(xún)這些數(shù)據(jù)字典,可以了解PROFILE文件的信息。
1.顯示用戶的資源配置信息
建立或修改用戶時(shí),可以為用戶分配PROFILE文件,如果沒(méi)有為用戶分配PROFILE文件,Oracle會(huì)自動(dòng)將DEFAULT分配給用戶。通過(guò)查詢(xún)數(shù)據(jù)字典視圖DBA_USERS,可以顯示用戶使用的PROFILE文件,下面來(lái)看一個(gè)例子。
----顯示用戶的DONGFANG所使用的PROFILE文件。SQL> select profile from dba_users where username='DONGFANG';PROFILE------------------------LOCK_ACCOUNT
2.顯示指定PROFILE文件的資源配置信息
建立或修改PROFILE文件時(shí),Oracle將會(huì)PROFILE參數(shù)存放在數(shù)據(jù)字典中。通過(guò)查詢(xún)DBA_PROFILES,可以顯示PROFILE的密碼限制、資源限制信息,下面來(lái)看一個(gè)例子。
----顯示RESOURCE_LIMIT文件的密碼和資源限制信息。SQL> column limit for a20SQL> select resource_name,resource_type,limit 2 from dba_profiles3 where profile = 'LOCK_ACCOUNT';
聯(lián)系客服