oracle使用者口令管理策略

zhanghjgnu發表於2008-06-28
1帳戶鎖定
  建立一個資料庫使用者XUDB,該帳戶允許連續註冊3次,超過3次就會引起帳戶死鎖。這樣可以減少口令被猜中、窮舉的可能性.它的環境檔名為lock_account。
  Create Profile Lock_account limit
  Failed_Login_Attempts3 Password_Lock_Time 1;
  Create User XUDB Identmed By XU520;
  Profile Lock_account;
  ALTER USER XUDB PROFILE Lock_aecount;
  如果XUDB帳戶連續註冊3次,那麼該帳戶就會被Oracle自動鎖住,即使使用了正確的口令,也會提示出錯。
  CONNECT XUDB/XU520;
  Error ORA-28000 the account is locked
  在建立Lock_account時,因為指定Password_Lock_Time的值為1.所以當帳戶鎖定一天之後,ORACLE會自動解鎖帳戶。另外,要對帳戶解鎖,在DBA帳戶下使用如下語句即可;
  Alter User XUDB Account Unlock
2口令歷史
  可以透過環境檔案Profile的資源PASSWORD_LIFE_TIME為帳戶建立一個最大的期限。如要求使用者每10天改變一次口令。
  Alter Profile Limited_Profile Limit
  Password_Life_Time 10;
  如果口令過期,那麼必須下次註冊時修改它,一個過期帳戶和鎖定的帳戶不同,一個鎖定的帳戶會隨時間的推移自動解鎖或用由來解鎖;一個過期帳戶,ORACLE會強制改變口令,否則不允許登入。
  當往往有些使用者在重新輸入新口令的時候。又使用以前的舊口令,為了防止使用者重用舊口令,強制該使用者在口令終止10天之內不能重用以前的口令。具體實現方法如下:
  Alter Profile password_history Limit
  Password_Life Time10 Password_Grace_Time2
  Password_Reuse_Time10 Password_Reuse_Max Unlimited;
  將該Profile分配給使用者才能起作用
  AherUserxUDBProfile password_history;
  當使用者在前十二天沒有修改口令,在第十三天登入時,0-RACLE會強制使用者改變口令,如果使用者仍然使用過去的口令,則口令修改不正確,並會有錯誤提示資訊。
  ERROR:ORA-28001:the password has expired
  Changing password for XUDB
  New password:
  Retype new password:
  ERROR:ORA-28007:the password cannot be reused
  
3口令複雜性驗證
  口令的複雜性驗證程式可用PL/SQL指令碼fUTLPWDMG.SQL)來建立自己的口令驗證程式來指定,使用OCIPasswordChangeο改變口令。
  DBAs授權的PL/SQL系統呼叫必須遵循以下格式:
  Routine_name(
  Userid_parameter IN VARCHAR2(30),
  PaSSWOrd_parameter IN VARCHAR2(30),
  Old_password_parameter IN VARCHAR2(30))
  RETURN BOOLEAN
  在程式建立之後使用使用者的PROFILE或系統的預設PRO-FILE,將其指定為口令驗證程式:
  Create/Alter PROFILE pmfile_name LIMIT
  PASSWORD_VERIFY_FUNCTION routin_name
  下面設計了一個程式來改進了原有口令,設定了預設口令資源限制,建立了自己的複雜性檢查程式,提供了口令複雜性最低限度的檢查。
  這個口令驗證程式必須SYS所有。該預設口令複雜性驗證函式檢查以下專案:(1)口令滿足最小長度,不能少於4個字元;(2)口令至少包含一個字母、一個數字、一個特殊字元的組合要求;(3)口令不是一些常用名;(4)口令不能與使用者名稱相同,使用者可根據實際的需要修改這個函式。
該函式在SYS模式中建立,執行它之前以SYSDBA身份連線SYS。
  程式如下:
  CREATE OR REPLACE FUNCTION
  verify_function
  (username varchar2,
  password varchar2)
  RETURN boolean IS
  n boolean;
  m integer;
  isdigit boolean;
  ischar boolean;
  ispunct boo1ean;
  digitarray varehar2(25);
  chararray varchar2(52);
  punctarray varchar2(52);
  Begin
  digitarray:=‘0123456789’;
  chararray:=‘abcdefghijklmnopqrstuvwxyzABCDEFGHUKLMNOPQRSTUVWXYZ’;
  punctarray:=‘&0”*;<=>?_!”#$%+,-/:’;
  IF password=username
  THEN raise_application_error(-20001,‘Password same asuser’);
  END IF
  IF length(password)<4 THEN
  Raise_application_error(-20002,‘Password length less than 4’);
  IF NLS_LOWER(password)
  IN(‘home’,‘abcd’,‘boy’,‘user’,‘password’,‘oracle’,‘dear’)THEN
  Raise_application_error(-20003,‘Password should not use thecommon word’);
  END IF
  ’
  isdigit=FALSE;
  m:=length(password);
  FOR i IN 1..10 LOOP
  FOR j IN 1..m LOOP
  IF subst(password,j,1)=substr(digitarray,i,1)THEN
  isdigit:=TRUE;
  GOTO findchar;
  END IF;
  END LOOP;
  END LOOP;
  IF ischar=FASLE
  THEN Raise_application_error(-20004,‘Password should contain at least one digit,one character and one punctuation’);
  END IF;
  
  2.4口令加密
  對客戶機.把SQLNET.ORA檔案中的引數ORA_EN-CRYPT_LOGIN設定為TRUE;
  對伺服器,把INIT.ORA檔案中的引數DBLINK_EN-CRYPT_LOGIN設定為TRUE;
  這樣口令以加密的形式在客戶機到伺服器和伺服器到伺服器之間傳送。
  另外需要強調的是資料庫系統管理員對SYS和SYSTEM兩個特殊的帳戶的保密管理,要經常更改這兩個帳戶的口令,防止被盜用。
  [@more@]

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

相關文章