2020年12月30日 星期三

7.3 Oracle Profile

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:

SQL> create profile user_profile limit

      IDLE_TIME 30

      PASSWORD_LIFE_TIME 60

      PASSWORD_VERIFY_FUNCTION verify_function_11G;


如果要更改Profile可使用alter指令,例如將上述Profile的密碼複雜度原則變更為ora12c_verify_function:

SQL> alter profile user_profile limit

      PASSWORD_VERIFY_FUNCTION ora12c_verify_function;


我們可以透過查詢dba_profiles來檢視Profile所設定的屬性:


目前企業對於使用者密碼的安全性要求較高,因此Profile在密碼原則的運用上還是比較多的。




沒有留言:

張貼留言