1. 程式人生 > >Oracle 使用者管理與許可權分配

Oracle 使用者管理與許可權分配

使用者與模式的關係

Oracle資料庫的安全保護流程可以分為3個步驟。首先,使用者向資料庫提供身份識別資訊,即提供一個數據庫賬號。接下來使用者還需要證明他們所給出的身份識別資訊是有效的,這是通過輸入密碼來實現的,使用者輸入的密碼經過資料庫的核對確認使用者提供的密碼是否正確。最後,假設密碼是正確的,那麼資料庫認為身份識別資訊是可信賴的。此時,資料庫將會在基於身份識別資訊的基礎上確定使用者所擁有的許可權,即使用者可以對資料庫執行什麼操作。因此,為了確保資料庫的安全,首要的問題就是對使用者進行管理。
這裡所有的使用者並不是資料庫的操作人員,而是在資料庫中定義的一個名稱,更準確地說它是賬戶,只是習慣上稱其為使用者,它是Oracle資料庫的基本訪問控制機制,當連線到Oracle資料庫時,操作人員必須提供正確的使用者名稱和密碼。
連線到資料庫的使用者所具有的許可權是不同的,Oracle提供了一些特權使用者,比如,SYSDBA或SYSOPER,這類使用者主要用於執行資料庫的維護操作,如啟動資料庫、關閉資料庫、建立資料庫,以及執行備份和恢復等操作。SYSDBA和SYSOPER的區別在於:SYSDBA不僅具備SYSOPER的所有許可權,而且還可以建立資料庫,執行不完全恢復。在Oracle 11g中,Oracle提供了預設的特權使用者SYS,當以特權使用者身份登入資料庫時,必須帶有AS SYSDBA或AS SYSOPER選項。例如;

SQL> connect system/1qaz2wsx as sysdba;
已連線。

與使用者密切關係的另一個概念是模式,模式也稱作方案(Schema)。模式或方案實際上是使用者所擁有的資料庫物件的集合。在Oracle資料庫中,物件是以使用者來組織的,使用者與模式是一一對應的關係,並且兩者名稱相同。
SCOTT使用者擁有的所有物件都屬於SCOTT模式,而HR使用者擁有的所有物件都屬於HR模式。
這裡寫圖片描述
當訪問資料庫物件時,需要注意如下一些事項:

  • 在同一個模式中不能存在同名物件,但是不同模式中的物件名稱則可以相同。
  • 使用者可以直接訪問其它模式物件,但如果要訪問其它模式物件,則必須具有該物件的相應訪問許可權。例如,使用者SCOTT可以直接檢視其模式中的EMP表,但如果使用者HR要檢視SCOTT模式中的EMP表時,則必須在EMP表上具有SELECT操作的許可權。
  • 當用戶要訪問其它模式物件時,必須附加模式名作為字首。

建立與管理使用者

Oracle為使用者賬戶提供了三種身份驗證方法。
密碼驗證 當一個使用密碼驗證機制的使用者檢視連線到資料庫時,資料庫會核實使用者名稱是否是一個有效的資料庫賬戶,並且提供與該使用者在資料庫中儲存的密碼相匹配的密碼。由於使用者資訊和密碼都儲存在資料庫內部,所以使用密碼驗證使用者也稱為資料庫驗證使用者。
外部驗證外部驗證是指當用戶試圖連線到資料庫時,資料庫會核實使用者名稱是否是一個有效的資料庫賬戶,並且確認該使用者已經完成了作業系統級別的身份驗證。
注意:外部驗證使用者並不在資料庫中儲存一個驗證密碼。
全域性驗證

全域性驗證是指使用者不在資料庫中儲存驗證密碼,而是通過一種高階安全選項所提供的身份驗證服務來進行的。
在上述的三種驗證方式中,密碼驗證是最常使用的驗證方法。

建立使用者

要建立一個新的使用者,可採用CREATE USER命令。其語法格式如下:

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]

引數說明如下:

  • user_name:使用者名稱,一般為字母數字型和“#”及“_”符號。
  • pass_word:使用者口令,一般為字母數字型和“#”及“_”符號。
  • identified exeternally:表示使用者名稱在作業系統下驗證,這種情況下要求該使用者必須與作業系統中所定義的使用者名稱相同。
  • identified globally as ‘CN=user’:表示使用者名稱由Oracle安全域中心伺服器驗證,CN名字表使使用者的外部名。
  • [default tablespace tablespace_default]:表示該使用者在建立資料物件時使用的預設表空間
  • [temporary tablespace tablespace_temp]:表示該使用者所使用的臨時表空間。
  • [quota [integer K[M]] [unlimited]] on
    tablespace_specify1:表示該使用者在指定表空間中允許佔用的最大空間。
  • [profiles profile_name]:資原始檔的名稱。
  • [account lock or account unlock]:使用者是否被加鎖,預設情況下是不加鎖的。
    (1)建立使用者,並指定預設表空間和臨時表空間。
----建立一個mr使用者,口令為mrsoft,並設定預設的表空間為users,臨時表空間為temp的使用者
SQL> create user mr identified by mrsoft
  2  default tablespace users
  3  temporary tablespace temp;

(2)建立使用者,並配置其在指定表空間上的磁碟限額。有時,為了避免使用者在建立表和索引物件時佔用過多的空間,可以配置使用者在表空間上的磁碟限額。在建立使用者時,可通過QUOTA xxxM ON tablespace_ specify子句配置指定表空間的最大可用限額,下面來看一個例子。

----建立一個使用者east,口令為mrsoft,預設表空間為users,臨時表空間為temp的使用者,並指定該使用者在tbsp_1表空間上最多可使用的大小為10m
SQL> create user east identified by mrsoft
  2  default tablespace users
  3  temporary tablespace temp
  4  quota 10m on tbsp_1;

說明:如果要禁止使用者使用某個表空間,則可以通過quota關鍵字設定該表空間的使用限額為0。
(3)建立使用者,並配置其在指定表空間上不受限制,如果要設定使用者在指定表空間上不受限制,可以使用QUOTA UNLIMITED ON tablespace_ specify子句。

----建立一個使用者名稱為df,口令為mrsoft,臨時表空間為temp,預設表空間為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;

在建立完使用者之後,需要注意以下幾點:
- 如果建立使用者時不指定DEFAULT TABLESPACE子句,Oracle會將SYSTEM表空間作為使用者預設表空間。
- 如果建立使用者時不能指定TEMPORARY TABLESPACE子句,Oracle會將資料庫預設臨時表空間作為使用者的臨時表空間。
- 初始建立的使用者沒有任何許可權,所以為了是使用者可以連線到資料庫,必須授權其CREATE SESSION許可權
- 如果建立使用者時沒有為表空間指定QUOTA子句,那麼使用者在特定表空間上的配額為0,使用者將不能在相應的表空間上建立資料物件。
- 初始建立的使用者沒有任何許可權,不能執行任何資料庫操作。

修改使用者

使用者建立完後,管理員可以對使用者進行修改,包括修改使用者口令,改變使用者預設表空間、臨時表空間、磁碟配額及資源限制等。修改使用者的語法與建立的使用者的語法基本相似,只是把建立使用者語法中的“CREATE”關鍵字替換成“ALTER”罷了。
修改使用者的磁碟限額
如果DBA在建立使用者時,指定了使用者在某個表空間的磁碟限額,那麼經過一段時間,該使用者使用該表空間已經達到了DBA所設定的磁碟限額時,Oracle系統就會顯示如圖13-2所示的錯誤提示。
這裡寫圖片描述
表示該使用者使用的資源已經超出了限額,DBA需要為該使用者適當增加資源。

 ----修改使用者east在表空間上的磁碟限額為20m(原始為10m,先增加10m)。
SQL> alter user east quota 20m on tbsp_1;

修改使用者的口令
使用者的口令在使用一段時間之後,根據系統安全的需要或在PROFILE檔案中(資源配置檔案)設定的規定,使用者必須要修改口令。

----修改使用者east的新口令為123456(原始為mrsoft)。
SQL> alter user east identified by 123456;

解鎖被鎖住的使用者
Oracle預設安裝完成後,為了安全起見,很多使用者處於LOCKED狀態,DBA可以對LOCKED狀態的使用者解除鎖定。

----使用alter user命令解除被鎖定的賬戶SHSQL> alter user SH account unlock;

刪除使用者

刪除使用者通過DROP USER語句完成的,刪除使用者後,Oracle會從資料字典中刪除使用者、方案及其所有物件方案,語法如下:

drop user user_name[cascade]

引數說明如下:

  • user_name:要刪除的使用者名稱。
  • cascade:級聯刪除選項,如果使用者包含資料庫物件,則必須加
    CASCADE選項,此時連同該使用者所擁有的物件一起刪除。
----使用drop user語句刪除使用者df,並連同該使用者所擁有的物件一起刪除。
SQL> drop user df cascade;

使用者許可權管理

許可權簡介

根據系統管理方式的不同,在Oracle資料庫中將許可權分為兩大類:系統許可權和物件向許可權。
系統許可權是在系統級對資料庫進行存取和使用的機制,比如,使用者是否能夠連線到資料庫系統(SESSION許可權),執行系統級的DDL語句(如CREAT、ALTER、和DROP)等。
物件許可權是指某一個使用者對其他使用者的表、檢視、序列、儲存過程、函式、包等的操作許可權。不同型別的物件具有不同的物件許可權,對於某些模式物件,比如簇、索引、觸發器、資料庫連結等沒有相應的實體許可權,這些許可權由系統許可權進行管理。

授權操作

在Oracle 11g中含有200多種系統特權,並且所有這些系統特權均被列舉在SYSTEM_PRIVILEGE_MAP資料目錄檢視中。授權操作使用GRANT命令,其語法格式如下:

grant sys_privi | role to user | role | public [with admin option]

引數說明如下:

  • sys_privi:表示Oracle系統許可權,系統許可權是一組約定的保留字。比如,若能夠建立表,則為“CREATE TABLE”。
  • role:角色,關於角色會在後面小節中介紹。
  • user:具體的使用者名稱,或者是一些列的使用者名稱。
  • public:保留字,代表Oracle系統的所有使用者。
  • with admin option:表示被授權者可以再將許可權授予另外的使用者。
    —-為使用者east授予連線和開發系統許可權,並嘗試使用east連線資料庫。
SQL> connect system/1qaz2wsx
已連線。
SQL> grant connect,resource to east;
授權成功。 
SQL> connect east/123456;
已連線。

在上面的程式碼中,使用east連線資料庫後,Oracle顯示“已連線”,這說明給east授予“connect”的許可權是成功的。另外,如果想要east將這兩個許可權可以傳遞給其他的使用者,則需要在grant語句中使用“with admin option”關鍵字。

 ----在建立使用者dongfang和xifang後,首先system將建立session和建立-table的許可權授權給dongfang,然後dongfang再將這兩個許可權傳遞給xifang,最後通過xifang這個使用者建立一個數據表
SQL> create user dongfang identified by mrsoft
  2  default tablespace users
  3  quota 10m on users;
 使用者已建立。
 SQL> create user xifang identified by mrsoft
  2  default tablespace users
  3  quota 10m on users;
 使用者已建立。
 SQL> grant create session,create table to dongfang with admin option;
 授權成功。
 SQL> connect dongfang/mrsoft;
已連線。
SQL> grant create session,create table to xifang;
 授權成功。
 SQL> connect xifang/mrsoft;
已連線。
SQL> create table tb_xifang
  2  ( id number,
  3    name varchar2(20)
  4  );
 表已建立。

回收系統許可權

一般使用者若被授予過高的許可權就可能給Oracle系統帶來安全隱患。作為Oracle系統的管理員,應該能夠查詢當前Oracle系統各個使用者的許可權,並且能夠使用REVOKE命令撤銷使用者的某些不要的系統許可權,REVOKE命令的語法格式如下:

revoke sys_privi | role from user | role | public

引數說明如下:

  • sys_privi:系統許可權或角色;
  • role:角色;
  • user:具體的使用者名稱;
  • public:保留字,代表Oracle系統所有的使用者;

—- 撤銷east使用者的resource系統許可權,程式碼及執行結果如下。

SQL> connect system/1qaz2wsx;
已連線。
SQL> revoke resource from east;
撤銷成功。

如果資料庫管理員用GRANT命令給使用者A授予系統許可權是帶有WITH ADMIN OPTION選項,則該使用者A有權將系統許可權再次授予另外的使用者B。在這種情況下,如果資料庫管理員使用REVOKE命令撤銷A使用者的系統許可權,則使用者B的系統許可權仍然有效。
首先撤銷使用者dongfang的create table許可權,然後嘗試是否還可以通過使用者xifang建立資料表(注:是dongfang將create table許可權傳遞給xifang),程式碼及執行結果如下。

SQL> revoke create table from dongfang;
撤銷成功。
SQL> connect xifang/mrsoft;
已連線。
SQL> create table tb_xifang_2
  2  ( id number,
  3   name varchar2(10)
  4  );
表已建立。

物件授權

與將系統許可權授予使用者基本相同,授予物件許可權給使用者或角色也使用GRANT命令,其語法格式如下:

Grant obj_privi | all column on schema.object to user | role | public [with grant option] | [with hierarchy option]

引數說明如下:

  • obj_privi:表示物件的許可權,可以是ALTER、EXECUTE、SELECT、UPDATE和INSERT等;
  • role:角色名;
  • user:被授權的使用者名稱;
  • with admin option:表示被授權者可再將系統許可權授予其他的使用者;
  • with hierarchy option:在物件的子物件(在檢視上再建立檢視)上授權給使用者。
----給使用者xifang授予select、insert、delete和update表soctt.emp的許可權。
SQL> grant select,insert,delete,update on scott.emp to xifang;
授權成功。

回收物件許可權

要從使用者或角色中撤銷物件許可權,仍然要使用REVOKE命令,其語法格式如下:

revoke obj_privi | all on schema.object from user | role | public cascade constraints

引數說明如下:

  • obj_privi:表示物件的許可權。
  • public:保留字,代表Oracle系統的所有許可權。
  • cascade ascade constraints:表示有關聯關係的許可權也被撤銷。
----從xifang使用者撤銷scott.emp表的update和delete許可權。
SQL> connect system/1qaz2wsx;
已連線。
SQL> revoke delete,update on scott.emp from xifang;
撤銷成功。

說明:如果資料庫管理員GRANT命令給使用者A授予物件許可權時帶有WITH ADMIN OPTION選項,則該使用者A有權將許可權再次授予另外的使用者B。在這種情況下,如果資料庫管理員用REVOKE命令撤銷A使用者的物件許可權時,使用者B的物件許可權也被撤銷。由此可見,在進行系統許可權回收和進行物件許可權回收時,效果是不同的。

查詢使用者與許可權

使用者被授予的系統許可權或物件許可權都被記錄在Oracle的資料字典裡,瞭解某個使用者被授予哪些系統許可權和物件許可權是確保應用系統安全的重要工作。表是Oracle 11g用於存放使用者、系統許可權、物件許可權有關的資料字典。

這裡寫圖片描述

角色管理

角色簡介

角色是一個獨立的資料庫實體,它包括一組許可權。也就是說,角色是包括一個或者多個許可權的集合,它並不被哪個使用者所擁有。角色可以被授予任何使用者,也可以從使用者中將角色收回。
使用角色可以簡化許可權的管理,可以僅用一條語句就能從使用者那裡授予或回收許可權,而不必對使用者一一授權。使用角色還可以實現許可權的動態管理,比如,隨著應用的變化可以增加或者減少角色的許可權,這樣通過改變角色的許可權,就實現了改變多個使用者的許可權。
角色、使用者及許可權是一組關係密切的物件,既然角色是一組許可權的集合,那麼,它只有被授予某個使用者才能有意義,可以用如圖所示的圖形來幫助我們理解角色、使用者及許可權的關係。
這裡寫圖片描述

作為Oracle的資料庫管理員,在建立和管理使用者時,必須理解Oracle的許可權與角色的關係。在複雜的大型應用系統中,要求對應用系統功能進行分類,從而形成角色的雛形,再使用CREATE ROLE語句將其建立成為角色;最後根據使用者工作的分工,將不同的角色(包括系統預定義的角色)授予各類使用者。如果應用系統的規模很小,使用者數也不多,則可以直接將應用的許可權授予使用者,即使是這樣,使用者也必須對Oracle系統的預定義角色有所瞭解,因為一個使用者至少被授予一個以上的預定義角色時才能使用ORACLE系統資源。
另外,在建立角色時,可以為角色設定應用安全性。角色的安全性通過為角色設定口令進行保護,必須提供正確的口令才允許修改或設定角色。

預定義角色

所謂系統預定義角色是指在資料庫安裝完成後由系統自動建立的一些常用角色,這些角色已經由系統授予了相應的系統許可權,可以由資料庫管理員直接使用。一旦將這些角色授予使用者以後,使用者便具有了角色中所包含的系統許可權。下面列出的這幾個系統預定義角色是最常被用到的。

  • CONNECT;
  • RESOURCE;
  • DBA;
  • EXP_FULL_DATABASE;
  • IMP_FULL_DATABASE。

    角色CONNECT,RESOURCE及DBA主要用於資料庫管理,這3個角色之間相互沒有包含關係(有些系統許可權可能有重疊)。資料庫管理員需要分別授予CONNECT,RESOURCE和DBA角色。對於一般的資料庫開發人員,則需要授予CONNECT,RESOURCE角色。
    角色IMP_FULL_DATABASE和EXP_FULL_DATABASE分別用於操作資料庫的匯入或匯出工具,如,操作資料庫工具EXPDP,IMPDP,或者系統的EXP,IMP。在使用這些工具進行整個資料庫的到匯出與匯入工作時,需要具備這兩個角色。

    這裡寫圖片描述

不同版本的Oracle預定義的角色不一樣多,但都可以從DBA_ROLES資料字典中查詢到,下面通過該資料字典來看一下Oracle 11g的預定義系統角色有哪些。

----使用select語句查詢dba_roles資料字典中的角色資訊。
SQL> set pagesize 50;
SQL> select * from dba_roles;

這裡寫圖片描述

建立角色與授權

如果系統預定義的角色不符合使用者需要,那麼,資料庫管理員可以建立更多的角色,建立使用者自定義角色可以使用CREATE ROLE語句來實現,其語法格式如下:

create role role_name [ not identified | identified by [password] | [exeternally] | [globally]]

引數說明如下:

  • role_name:角色名;
  • identified by password:角色口令;
  • identified by exeternally:表示角色名在作業系統下驗證;
  • identified globally:表示使用者是Oracle安全域中心伺服器來驗證,此角色由全域性使用者來使用。
----建立一個名為designer的角色,該角色的口令為123456SQL> connect system/1qaz2wsx;
已連線。
SQL> create role designer identified by 123456;

一旦角色建立完成,就可以對角色進行授權,給角色授權也是使用GRANT…TO語句來實現的。如果系統管理員具有GRANT_ANY_PRVILEGE許可權,就可以對某個角色進行授權。比如,授權CREATE SESSION,CREATE SYNONYM,CREATE VIEW等。

----給designer角色授予create view和create table許可權。
SQL> grant create view,create table to designer;

在角色獲得了許可權之後,就可以把這個有使用價值的角色授予給某個使用者了。把角色授予給某個使用者仍然使用GRANT…TO語句來實現。

 ----把designer角色授權給使用者dongfang,程式碼及執行結果如下。
SQL> grant designer to dongfang;

管理角色

在學習過管理使用者(包括建立、修改、刪除等操作)之後,再學習如何管理角色就相對簡單多了,因為這二者之間有很多相似之處,這裡僅通過一些簡單例項來對角色的管理進行說明。
檢視角色所包含的許可權
檢視角色許可權通常使用ROLE_SYS_PRIVS資料字典,來看下面的例子。

----查詢角色designer被屬於的許可權有哪些。
SQL> select * from role_sys_privs where role = 'DESIGNER';

這裡寫圖片描述

修改角色密碼
修改角色密碼包括取消角色密碼和修改角色密碼兩種情況,可以使用ALTER ROLE語句來實現。

 ----首先取消designer角色的密碼,然後再重新給該角色設定一個密碼。
SQL> alter role designer not identified;
角色已丟棄。
SQL> alter role designer identified by mrsoft;
角色已丟棄。

設定當前使用者要生效的角色
角色的生效是一個什麼概念呢?假設使用者a有b1,b2,b3三個角色,那麼,如果b1未生效,則b1所包含的許可權對於a來講是不擁有的,只有角色生效了,角色內的許可權才作用於使用者,最大可生效角色數由引數MAX_ENABLED_ROLES設定;使用者登入後,Oracle將所有直接賦值給使用者的許可權和使用者預設角色中的許可權賦給使用者。設定角色生效可使用SET ROLE語句。
建立一個無需密碼驗證的角色queryer,然後設定該角色生效,接下來再設定帶有密碼的角色designer也生效。

SQL> create role queryer;
角色已建立。
SQL> set role queryer;
角色集
SQL> set role designer identified by mrsoft;
角色集

說明:如果要設定帶有密碼的角色生效,則必須在SET ROLE語句後面使用“IDENTIFIED BY”關鍵字指定角色的密碼。
刪除角色
刪除角色很簡單,使用DROP ROLE語句即可實現,來看下面的例子。

----使用drop role語句刪除角色queryer。
SQL> drop role queryer;
角色已刪除。

刪除角色後,原來擁有該角色的使用者將不再擁有該角色,相應的許可權也將失去。

角色與許可權查詢

建立角色和使用者以後,給角色和使用者授予的許可權被記錄在Oracle資料字典裡,作為Oracle資料庫管理員,需要了解角色被授予了哪些許可權及使用者被授予了哪些許可權和角色,從而對這個資料庫的所有使用者進行全面的管理,如表所示是Oracle 11g用於存放使用者、角色及許可權的相關資料字典。

這裡寫圖片描述

----查詢HR使用者被授予的系統角色。
SQL> select granted_role,default_role from dba_role_privs
  2  where grantee = 'HR';

這裡寫圖片描述

在某個模式下,如果使用者要確定當前會話中的所有有效角色,可以通過SESSION_ROLE資料字典來查詢。

----在scott模式下,查詢當前使用者的所有有效角色。
SQL> connect scott/1qaz2wsx;
已連線。
SQL> select * from session_roles;

這裡寫圖片描述

資源配置PROFILE

PROFILE簡介

PROFILE作為使用者配置檔案,它是密碼限制、資源限制的命名集合。PROFILE檔案作為Oracle安全策略的重要組成部分,利用它可以對資料庫使用者進行基本的資源限制,並且可以對使用者的密碼進行管理。
在安裝資料庫時,Oracle會自動建立名為DEFAULT的預設配置檔案。如果沒有為新建立的使用者指定DEFAULT檔案,Oracle將自動為它指定DEFAULT配置檔案。初始的DEFAULT檔案沒有進行任何密碼和資源限制。使用PROFILE檔案時需要注意如下事項。

  • 建立使用者時,如果不指定PROFILE選項,Oracle會自動將DEFAULT分配給相應的資料庫使用者。
  • 建立PROFILE檔案時,如果只設置了部分密碼和資源限制選項,其他選項會自動使用預設值,即使DEFAULT檔案中有相應選項的值。
  • 使用PROFILE管理密碼時,密碼管理選項總是處於被啟用狀態,但是如果使用PROFILE管理資源,必須要啟用資源限制。
  • 一個使用者只能分配一個PROFILE檔案。如果要同時管理使用者的密碼和資源,那麼在建立PROFILE時應該同時指定密碼和資源選項。

使用PROFILE管理密碼

當操作人員要連線到Oracle資料庫時,需要提供使用者名稱和密碼。對於黑客或某些人而言,他們可能通過猜測或反覆實驗來破解密碼。為了加強密碼的安全性,可以使用PROFILE檔案管理密碼。PROFILE檔案提供了一些密碼管理選項,他們提供了強大的密碼管理功能,從而確保密碼的安全。為 了實現密碼限制,必須首先建立PROFILE檔案。建立PROFILE檔案是使用CREATE PROFILE語句完成的, 一般情況下,該語句是由DBA執行的,如果要以其他使用者身份建立PROFILE檔案,則要求該使用者必須具有CREATE PROFILE系統許可權。
使用PROFILE檔案可以實現如下四種密碼管理:賬戶鎖定、密碼的過期時間、密碼歷史和密碼的複雜度。
1.賬戶鎖定
賬戶的鎖定策略是指使用者在連續輸入多少次錯誤密碼後,Oracle會自動鎖定使用者的賬戶,並且可以規定賬戶的鎖定時間。Oracle為鎖定賬戶提供了以下兩個引數。

  • FAILED_LOGIN_ATEMPTS 該引數限制使用者在登入到Oracle資料庫時允許失敗的次數。一旦某個使用者嘗試登陸資料庫的次數達到該值,則系統將該使用者賬戶鎖定。
  • PASSWORD_LOCK_TIME 該引數用於指定賬戶被鎖定的天數。
---- 建立的profile檔案,要求設定連續失敗次數為5,超過該次數後,賬戶將被鎖定7天,然後使用alter user語句將profile檔案(即lock_account)分配給使用者dongfang。

SQL> create profile lock_account limit
  2  failed_login_attempts 5
  3  password_lock_time 7;

配置檔案已建立

SQL> alter user dongfang profile lock_account;

使用者已更改。

在建立lock_account檔案並將該檔案分配給使用者dongfang後,如果以使用者dongfang身份連線到資料庫,並且連續連線失敗5次後,Oracle將自動鎖定該使用者賬戶。此時,即使為使用者dongfang提供了正確的密碼,也無法連線到資料庫。
在建立lock_account檔案時,由於指定password_lock_time的引數為7,所以賬戶鎖定天數達到7天后,Oracle會自動解鎖賬戶。
說明:如果建立PROFILE檔案時沒有提供該引數,將自動使用預設值UNLIMITED,這種情況下,需要DBA手動解鎖使用者賬戶。

2.密碼的過期時間
密碼的過期時間是指強制使用者定期修改自己的密碼,當密碼過期後,Oracle會隨時提醒使用者修改密碼。密碼寬限期是指密碼到期之後的寬限使用時間。預設情況下,建立使用者併為其提供密碼之後,密碼會一直生效。為了防止其他人員破解使用者賬戶的密碼,可以強制普通使用者定期改變密碼。為了將強制使用者定期修改密碼,Oracle提供瞭如下引數。

  • PASSWORD_LIFE_TIME 該引數用於設定使用者密碼的有效時間,單位為天數。超過這一段時間,使用者必須重新設定口令。
  • PASSWORD_GRACE_TIME 該引數用於設定口令失效的“寬限時間”。如果口令到達PASSWORD_LIFE_TIME設定的失效時間,設定寬限時間後,使用者仍然可以繼續使用一段時間。
----下面建立一個profile檔案(即password_lift_time),並設定使用者的密碼有效期為30天,密碼寬限期為3天,然後使用alter user語句將profile檔案(即password_lift_time)分配給使用者dongfang。
SQL> create profile password_lift_time limit
  2  password_life_time 30
  3  password_grace_time 3;

配置檔案已建立

SQL> alter user dongfang profile password_lift_time;

使用者已更改。

這裡寫圖片描述

若果使用者在30天內沒有修改密碼,那麼在第31天、第32天、第33天連線時,仍然會顯示類似的警告資訊。如果在33天內仍然沒有修改密碼,那麼當第34天連線時,Oracle會強制使用者修改密碼,否則不允許連線到資料庫。
3.密碼歷史
密碼歷史是用於控制賬戶密碼的可重複使用次數或可重用時間。使用密碼歷史引數後,Oracle會將密碼修改資訊存放到資料字典中。這樣,當修改密碼時,Oracle會對新、舊密碼進行比較,以確保使用者不會重用過去已經用過的密碼。關於密碼歷史有如下兩個引數。

  • PASSWORD_REUSE_TIME 該引數指定密碼可重用的時間,單位為天。

  • PASSWORD_REUSE_MAX 該引數設定口令在能夠被重新使用之前,必須改變的次數。
    說明:在使用密碼歷史選項時,只能使用其中的一個引數,並將另一個引數設定為UNLIMITED。
    4.密碼複雜度
    在PROFILE檔案中,可以通過指定的函式來強制使用者的密碼必須具有一定的複雜度。例如,強制使用者的密碼不能與使用者名稱相同。使用校驗函式驗證使用者密碼的複雜度時,只需要將這個函式的名稱指定給PROFILE檔案中的PASSWORD_VERIFY_FUNCTION引數,Oracle就會自動使用該函式對使用者的密碼和格式進行驗證。
    在Oracle 11g中,驗證密碼複雜度功能有新的改進。在$ORACLE_HOME/rdbms/admin目錄下建立了一個新的密碼驗證檔案UTLPWDMG.SQL,其中不僅提供了先前的驗證函式VERIFY_FUNCTION,還提供了一個新建的VERIFY_FUNCTION_11G函式。

使用PROFILE管理資源

在大而複雜的多使用者資料庫環境中,因為使用者眾多,所以系統資源可能會成為影響效能的主要瓶頸,為了有效地利用系統資源,應該根據使用者所承擔任務的不同為其分配合理資源。PROFILE不僅可用於管理使用者密碼,還可以用於管理使用者資源。需要注意,如果是使用PROFILE管理資源,必須將RESOURCE_LIMIT引數設定為TRUE,以啟用資源限制。由於該引數是動態引數,所以可以使用ALTER SYSTEM語句進行修改。

----首先使用show命令檢視RESOURCE_LIMIT引數的值,然後使用alter system命令修改該引數的值為true,從而啟用資源限制。
SQL> show parameter resource_limit;
NAME                TYPE            VALUE
--------------------        -----------         ------
resource_limit          boolean         FALSE
SQL> alter system set resource_limit=true;
系統已更改。

利用PROFILE配置檔案,可以對以下系統資源進行限制:

  • CPU時間:為了防止無休止地使用CPU時間,限制使用者每次呼叫是使用的CPU時間以及在一次會話期間所使用的CPU時間。
  • 邏輯讀:為了防止過多使用系統的I/O操作,限制每次呼叫即會話時讀取的邏輯資料塊數目。
  • 使用者的併發會話數。
  • 會話空閒的限制:當一個會話空閒的時間達到了限制值時,當前事務被回滾,會話被終止並且所佔用的資源被釋放。
  • 會話可持續的時間:如果一個會話的總計連線時間達到了該限制值,當前事務被回滾,會話被終止並釋放所佔用的資源。
  • 會話所使用的SGA空間限制。

當一個會話或SQL語句佔用的資源超過PROFILE檔案中的限制時,Oracle將終止並回退當前的事務,然後向用戶返回錯誤的資訊,如果受到的限制是會話級的,在提交或回退事務後,使用者會話將被終止;而受到呼叫級限制時,使用者會話還能夠繼續進行,只是當前執行的SQL語句將被終止。下面是PROFILE檔案中對各種資源限制的引數。

  • SESSION_PER_USER:使用者可以同時連線的會話數量。如果使用者的連線數達到該限制,則試圖登入時將產生一條錯誤資訊。
  • CPU_PER_SESSION:限制使用者再一次資料庫會話期間可以使用的CPU時間,單位為百分之一秒。當達到該時間值後,系統就會終止該會話。如果使用者還需要執行操作,則必須重建立連線。
  • CUP_PER_CALL:該引數使用者限制每條SQL語句所能使用的CPU時間,引數值是一個整數,單位百分之一秒。
  • LOGICAL_READS_PER_SESSION:限制每個會話所能讀取的資料塊數量,包括從記憶體中讀取的資料塊和從磁碟中讀取的資料塊。
  • CONNECT_TIME:限制每個使用者連線到資料庫的最長時間,單位分鐘,當連線時間超出該設定時,該連結終止。
  • IDLE_TIME:該引數限制每個使用者會話連線到資料庫的最長時間。超過該空閒時間的會話,系統會終止該會話。

維護PROFILE檔案

在Oracle中,PROFILE檔案也是一種資料資源。DBA也可以使用相應的語句對其進行管理,包括修改配置檔案、刪除配置檔案按、啟用或禁用配置檔案。
1.修改PROFILE檔案
在建立PROFILE檔案之後,還可以使用ALTER PROFILE語句修改其中的資源引數和密碼引數,來看下面的例子。

----對password_lift_time檔案(即PROFILE檔案)的資源限制引數進行修改。
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;
配置檔案已更改

說明:對配置檔案所做的修改只有在使用者開始新的會話時才會生效

2.刪除PROFILE檔案
使用DROP PROFILE語句可以刪除PROFILE檔案。如果要刪除的配置檔案已經被指定給了使用者,則必須在DROP PROFILE語句中使用CASCADE關鍵字,來看下面的例子。

----刪除被分配給dongfang這個使用者的password_lift_time配置檔案。
SQL> drop profile password_lift_time cascade;
配置檔案已刪除。

說明:如果為使用者指定的配置檔案被刪除,則Oracle將自動為使用者重新指定DEFAULT配置檔案

顯示PROFILE資訊

在PROFILE檔案被建立後,其資訊被儲存在資料字典中。通過查詢這些資料字典,可以瞭解PROFILE檔案的資訊。
1.顯示使用者的資源配置資訊
建立或修改使用者時,可以為使用者分配PROFILE檔案,如果沒有為使用者分配PROFILE檔案,Oracle會自動將DEFAULT分配給使用者。通過查詢資料字典檢視DBA_USERS,可以顯示使用者使用的PROFILE檔案,下面來看一個例子。

----顯示使用者的DONGFANG所使用的PROFILE檔案。
SQL> select profile from dba_users where username='DONGFANG';
PROFILE
------------------------
LOCK_ACCOUNT

2.顯示指定PROFILE檔案的資源配置資訊
建立或修改PROFILE檔案時,Oracle將會PROFILE引數存放在資料字典中。通過查詢DBA_PROFILES,可以顯示PROFILE的密碼限制、資源限制資訊,下面來看一個例子。

----顯示RESOURCE_LIMIT檔案的密碼和資源限制資訊。
SQL> column limit for a20
SQL> select resource_name,resource_type,limit
  2  from dba_profiles
3  where profile = 'LOCK_ACCOUNT';