Oracle Profile主要是用來限制資料庫使用者對於資料庫資源的使用,以及用來設定使用者的密碼安全性原則,資料庫預設Profile的名稱為 “Default” ,如果在使用者建立時沒有特別設定Profile,那麼就會自動套用到 “Default” 這個 Profile。除了 “Default” 這個 Profile 外,我們可以針對資料庫使用者的特性來建立適合的Profile來套用,Profile可以設定的東西分成資源相關與密碼相關兩類。
與資源相關的Profile設定如下:
SESSIONS_PER_USER: 限制單一使用者可以開啟session的數量。
CPU_PER_SESSION: 限制單一session可使用的cpu time(單位0.01秒)。
CPU_PER_CALL: 限制執行call行動時(例如: parse、execute,fetch…等作業)可使用的 cpu time(單位0.01秒)。
CONNECT_TIME: 限制單一session可以待在資料庫裡面的總時間(單位分鐘)。
IDLE_TIME: 限制單一session在資料庫裡面可以idle(inactive)的時間(單位分鐘),如果使用者超過了IDLE_TIME後再執行命令,則會與資料庫連線中斷;如果使用者超過了IDLE_TIME並且不再做任何動作,則session的狀態會變成 “SNIPED” ,資料庫不會自動清理這些session,DBA必須手動將這些session kill掉。
LOGICAL_READ_PER_SESSION: 限制單一session可以從Memory或Disk中讀取多少個Data Block。
LOGICAL_READS_PER_CALL: 限制執行call行動時(例如: parse、execute,fetch…等作業)可以從Memory或Disk中讀取多少個Data Block。
PRIVATE_SGA: 限制單一session可以從SGA分配到多少shared_pool。
COMPOSITE_LIMIT: 限制單一session可以使用的總資源,單位為service units,此單位表示為上述各項資源設定的加總。
在Profile設定了各項資源限制之後,必須將資料庫參數resource_limit設定為TRUE,這些資源的限制才會生效。
與密碼相關的Profile設定如下:
FAILED_LOGIN_ATTEMPTS: 登入失敗幾次鎖定帳號。
PASSWORD_LIFE_TIME: 幾天後更換密碼。
PASSWORD_LOCK_TIME: 帳號鎖定經過幾天之後自動解鎖。
PASSWORD_GRACE_TIME: 密碼到期後還能再使用幾天。
PASSWORD_REUSE_TIME: 同樣的密碼經過幾天可以再重複使用。
PASSWORD_REUSE_MAX: 密碼要變更過多少次才可以再重複使用同樣的密碼,如果有設定PASSWORD_REUSE_TIME,此密碼還須等到過了REUSE TIME才能再使用。
PASSWORD_VERIFY_FUNCTION: 用來設定密碼複雜性原則,此原則是透過建立Function來定義,Oracle 11g提供了verify_function_11G,於 $ORACLE_HOME/rdbms/admin 底下執行utlpwdmg.sql來建立,verify_function_11G限制密碼必須要有下列原則:
密碼長度不可少於8個字。
密碼不得與使用者名稱同或逆向拼寫。
密碼不得包含伺服器名稱。
密碼不得包含 oracle關鍵字。
不得為常見密碼如 welcome1, password…等。
密碼必須含數字與字母。
必須與舊密碼三個字不同。
到了Oracle 12c之後又增加了ora12c_verify_function、ora12c_strong_verify_function、ora12c_stig_verify_function,對於密碼複雜度的要求又更為嚴格,在Oracle 12c之後必須使用$ORACLE_HOME/rdbms/admin 底下的catpvf.sql來建立這些Function,執行catpvf.sql會建立所有可使用的verify function(verify_function_11G、ora12c_verify_function、ora12c_strong_verify_function,ora12c_stig_verify_function),有了這些Verify Function之後只要在Profile裡面設定要使用的Function就可以了。
在了解這些項目之後,我們就可以利用這些項目來建立客製化的Profile,例如建立一個限制IDLE_TIME為30分鐘、60天需變更密碼,以及密碼複雜度為verify_function_11G的Profile:
如果要更改Profile可使用alter指令,例如將上述Profile的密碼複雜度原則變更為ora12c_verify_function:
我們可以透過查詢dba_profiles來檢視Profile所設定的屬性:
目前企業對於使用者密碼的安全性要求較高,因此Profile在密碼原則的運用上還是比較多的。