oracle的口令管理

shilei1發表於2010-07-15
在Oracle資料庫中,若要訪問資料,必須先具有該資料庫的一個賬戶。這個訪問可以是直接訪問(通過一個資料庫的使用者連線)或間接訪問(通過在資料庫連結中預設許可權的訪問)。每個賬戶必須有一個與其相關的口令,一個資料庫賬戶可以連線到一個作業系統賬戶上。
  
  口令是在建立使用者賬戶時為每一使用者設定的,並可在該賬戶建立後對它們進行變更。使用者變更賬戶口令的能力受他訪問工具許可權的限制。資料庫以加密的形式將口令儲存在一個資料字典表中。如果賬戶直接與作業系統賬戶相關,就可以旁路口令檢查。在Oracle 8i中,口令可以無效。資料庫管理員可以建立能重複使用口令的條件(通過一個資料庫口令歷史設定值),也可以使用環境檔案為口令制定標準,如最小長度,或如果連續多次與賬戶連線不成功,就可以自動鎖定賬戶。
  
  環境檔案
  可以使用環境檔案來限制使用者能使用的系統和資料庫資源,並管理口令限制。如果資料庫中沒有建立環境檔案,將使用預設環境檔案(Default)。預設環境檔案對於所有使用者資源沒有限制,表1列出了可以通過環境檔案限制的資源。
  
  
  oracle的口令管理
  
  (注: PASSWORD_REUSE_MAX和PASSWORD_REUSE_TIME互不相容,如果其中一個資源設定成一個值,另一個必須設定成Unlimited。)
  
  如表1所示,許多資源都可以被限制,在使用者超過資源限制前不會發生任何動作,一旦到達限值, SQL語句就被停止。
  
  環境檔案是通過“create profile”命令建立的,可以用“alter profile”命令修改。下例所示的“alter profile”命令用於修改現有的環境檔案。在這個例子中,資料庫的預設環境檔案被修改成允許最大空閒時間為1小時:
  
  alter profile DEFAULT limit idle_time 60;
  
  在Oracle 8i中,可以使用環境檔案來管理口令的終止、重新使用和複雜性。例如,可以限制一個口令的壽命、鎖定口令過舊的賬戶,也可以強制一個口令至少有一定程度的複雜性,並鎖定一個多次註冊失敗的賬戶。
  
  口令的鎖定與過期
  FAILED_LOGIN_ATTEMPTS用於設定賬戶允許的嘗試次數,可以防止惡意人員無限制地嘗試賬戶口令來破解口令。例如,如果設定使用者環境檔案的FAILED_LOGIN_ATTEMPTS資源為3,該賬戶允許連續註冊失敗3次,第4次失敗就會引起賬戶被鎖定。
  
  在下面的例子中,建立一個供使用者TestUser使用的TEST_PROFILE環境檔案:
  
  create profile TEST_PROFILE limit
  
  FAILED_LOGIN_ATTEMPTS 3;
  
  create user TESTUSER identified by abcd1234
  
  profile TEST_PROFILE;
  
  grant CREATE SESSION to TESTUSER;
  
  如果連續3次與TestUser賬戶的連線失敗,該賬戶將自動被Oracle鎖定。此後當輸入TestUser賬戶的正確口令時,會收到一條錯誤資訊:
  
  ERROR:ORA-28000: the account is locked
  
  要對賬戶解鎖,可在資料庫管理員賬戶中使用“alter user”命令的account unlock子句,如下所示:
  
  alter user TESTUSER account unlock;
  
  賬戶解鎖後,TestUser賬戶再一次被允許連線。可以通過“alter user”命令的account lock子句來手動鎖定一個賬戶。
  
  alter user TESTUSER account lock;
  
  若一個賬戶由於多次連線失敗而被鎖定,當超過其環境檔案的PASSWORD_LOCK_TIME值時將自動解鎖。例如,如果PASSWORD_LOCK_TIME設為1,前面例子中的TestUser賬戶就被鎖定1天,過後賬戶即被自動解鎖。
  
  可以通過環境檔案中的PASSWORD_LIFE_TIME資源建立一個口令的最大期限。例如,可以強制TEST_PROFILE環境檔案的使用者每30天改變一次口令。
  
  alter profile TEST_PROFILE limit
  
  PASSWORD_LIFE_TIME 30;
  
  在這個例子中,“alter profile”命令用於修改TEST_PROFILE環境檔案。PASSWORD_LIFE_TIME值設為30,因此使用這個環境檔案的每個賬戶在30天后口令就會過期。如果口令過期,就必須在下次註冊時修改它,除非環境檔案對過期的口令有一特定的寬限期。寬限期引數叫做PASSWORD_GRACE_TIME,如果在寬限期內沒有修改口令,賬戶就會過期。
  
  (注: 如果使用PASSWORD_LIFE_TIME引數,就必須為使用者提供一種便於其改變口令的方法。)
  
  “過期”賬戶與“鎖定”賬戶不同。鎖定賬戶會隨著時間的推移自動解鎖,而過期賬戶需要通過資料庫管理員人工干預才能重新啟用。
  
  (注:如果使用口令過期特性,就要確保擁有應用程式的賬戶具有不同的環境檔案設定值,否則它們會被鎖定,使得應用程式不能使用。)
  
  如前面例子所述,若要重新恢復一個過期賬戶,需使用“alter user”命令。在這個例子中,使用者TestUser首先由資料庫管理員手工使其口令過期。
  
  alter user TESTUSER password expire;
  
  接著,TestUser試圖連線其賬戶。當他輸入口令時,立即被提示輸入賬戶的新口令。
  
  也可以使用“create user”命令的“password expire”子句,強制使用者在第一次訪問時修改口令。不過“create user”命令不允許對使用者設定的新口令設定限期日期。要設定的話,必須使用前面例子中的PASSW??????餀???? ??ORD_LIFE_TIME環境檔案引數。
  
  若要檢視任一賬戶的口令限期,可查詢DBA_USERS資料字典檢視的Expire_Date列。若使用者自己想檢視,可查詢USER_USERS資料字典檢視的Expiry_Date列(通過SQL*Plus或一個基於客戶機的查詢工具)。
  
  防止口令重新使用
  若要防止一個口令被重新使用,可以使用兩個環境檔案引數的其中一個: PASSWORD_REUSE_MAX或PASSWORD_REUSE_TIME。這兩個引數互不相容,如果給其中的一個設定了值,另一個就必須設為Unlimited。
  
  PASSWORD_REUSE_TIME引數規定一個口令可以重新使用前必須經過的天數。例如,如果設定PASSWORD_REUSE_TIME為60天,則在60天內不能使用同一個口令。
  
  PASSWORD_REUSE_MAX引數指定一個口令可以重新使用前必須對其改變的次數。如果試圖在這個限制到達前重新使用該口令,Oracle會拒絕口令的修改。
  
  例如,可以為本章前面建立的TEST_PROFILE環境檔案設定一個PASSWORD_REUSE_MAX引數。
  
  alter profile TEST_PROFILE limit
  
  PASSWORD_REUSE_MAX 3
  
  PASSWORD_REUSE_TIME UNLIMITED;
  
  如果使用者TestUser現在試圖重新使用一個最近的口令,修改口令就會失敗。例如,如下修改口令:
  
  alter user TESTUSER identified by eye123;
  
  然後再次改變它:
  
  alter user TESTUSER identified by eye456;
  
  在下次修改口令時,試圖重新使用最近的口令,就會失敗。他不能重新使用任何他最近用過口令,必須提供一個新口令。
  
  口令歷史被儲存在SYS模式下一個叫USER_HISTORY$的表中。在這個表中,Oracle儲存了使用者資源識別符、加密的口令值和建立該口令的日期/時間標記。當PASSWORD_REUSE_TIME值已過期或口令修改次數超過PASSWORD_REUSE_MAX值時,這個老的口令記錄就從SYS.USER_HISTORY$表中刪除。如果一個新的密碼與現有的密碼一樣,這個新口令就被拒絕。
  
  由於老口令儲存在SYS擁有的一個表中,所以資料儲存在System表空間中。因此,如果要為頻繁修改口令的大量使用者保留非常大的口令歷史,口令歷史表SYS.HISTORY$所需的空間就會影響System表空間的空間需求。
  
  設定口令複雜度
  可以強制使用者的口令符合複雜度標準。例如,可以要求口令的最小長度,限制不能是一些簡單的詞,至少包括一個數字或標點符號等。“create profile”和“alter profile”命令的PASSWORD_VERIFY_FUNCTION引數指定用於評估口令的函式名。如果使用者提出的口令不符合要求,就不會被接受。例如,可以拒絕“abcde”和“eye”作為口令,因為它們未包含任何數字值。為簡化實施口令複雜度的過程,Oracle提供了一個函式VERIFY_FUNCTION。在預設情況下,不建立這個函式。只有在執行utlpwdmg.sql指令碼檔案(該檔案位於Oracle軟體主目錄下的/rdbms/admin子目錄中)時才建立VERIFY_FUNCTION函式(注意這個函式應當在SYS模式下建立)。
  
  函式中的前三個條件子句檢查口令是否與使用者名稱相同,是否少於4個字元,是否是一組特定的詞之一。可以任意修改這些檢查或增加你的要求。例如,安全原則可能要求口令最少有六個字元,執行前要簡單地更新部分utlpwdmg.sql檔案。
  
  函式的下一個主要部分是對口令字串內容的三段檢查。要通過這些檢查,口令中至少要包含一個字元、一個數字和一個標點符號。同前面的檢查一樣,它們是可以編輯的。例如,可以不要求使用者在其口令中使用標點符號,只要簡單地繞過那部分口令檢查就可以。
  
  函式的下一部分是將新口令與老口令逐字元進行比較。如果它們之間的不同之處少於三處,新口令將不予接受。
  
  這個指令碼檔案中最後一條命令不屬於該函式,它是一條改變預設環境檔案的“alter profile”命令。如果改變了預設環境檔案,那麼資料庫中所有使用預設環境檔案的使用者都會受到影響。
  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-668131/,如需轉載,請註明出處,否則將追究法律責任。

相關文章