首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 10g用戶鎖定與權限不足(ORA-01031)雙重故障排查實戰

     編輯:Oracle 資料庫基礎

案例背景

現場反饋:某業務用戶頻繁被鎖定,執行ALTER USER ... ACCOUNT UNLOCK後仍報ORA-28000: the account is locked;另DBA以SYSDBA登錄報ORA-01031: insufficient privileges。雙故障並發,實為Profile密碼策略與OS組授權兩類獨立問題。

故障一:用戶反覆被鎖定

根因分析

  • 用戶被鎖定狀態為LOCKED(TIMED),非人工LOCK,而是登錄失敗次數超過Profile限制觸發自動鎖定。
  • 默認DEFAULT Profile中FAILED_LOGIN_ATTEMPTS可能設為較小值(如10),應用連接池配置錯誤密碼導致快速觸發。

排查腳本

-- 1. 確認用戶狀態與Profile
SELECT username, account_status, profile
FROM dba_users
WHERE username = 'APP_USER';

-- 2. 檢查Profile密碼策略
SELECT resource_name, limit
FROM dba_profiles
WHERE profile = 'DEFAULT' AND resource_type = 'PASSWORD';

-- 3. 查看登錄失敗歷史(需啟用審計)
SELECT * FROM dba_audit_session
WHERE username = 'APP_USER' AND returncode != 0
ORDER BY timestamp DESC;

解決方案

-- 方案A:臨時放寬失敗次數(立即生效)
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;

-- 方案B:為該用戶創建寬鬆Profile(推薦,隔離影響)
CREATE PROFILE app_user_profile LIMIT
  FAILED_LOGIN_ATTEMPTS UNLIMITED
  PASSWORD_LIFE_TIME UNLIMITED
  PASSWORD_REUSE_TIME UNLIMITED
  PASSWORD_VERIFY_FUNCTION NULL;
ALTER USER app_user PROFILE app_user_profile;

-- 方案C:解鎖並重置密碼(若確認密碼正確)
ALTER USER app_user ACCOUNT UNLOCK;
ALTER USER app_user IDENTIFIED BY new_password;  -- 或由應用端更新連接池密碼

驗證

SELECT username, account_status FROM dba_users WHERE username = 'APP_USER';
-- 應顯示 OPEN

故障二:SYSDBA登錄報ORA-01031

現象

$ sqlplus /nolog
SQL> CONNECT / AS SYSDBA
ERROR: ORA-01031: insufficient privileges

根因

OS用戶oracle不屬於dba組(或ORA_DBA/ORA_SDBA組)。CONNECT / AS SYSDBA依賴OS認證,需當前OS進程有效用戶在特權組中。

排查命令

# Linux/Unix
id oracle
# 輸出應包含 gid=54321(dba) 或類似

# Windows
net localgroup ORA_DBA
# 應列出 oracle 用戶

解決

# Linux/Unix (root執行)
usermod -a -G dba oracle
# 或
usermod -a -G oinstall,dba,oper oracle

# Windows (管理員PowerShell)
net localgroup ORA_DBA oracle /add

修改後需重新登錄OS會話(或重啟服務)生效。

延伸知識:口令文件與REMOTE_LOGIN_PASSWORDFILE

  • 遠程SYSDBA登錄依賴$ORACLE_HOME/dbs/orapw口令文件。
  • 參數REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE允許除SYS外其他用戶獲SYSDBA權限並存入口令文件。
  • 查詢口令文件成員:SELECT * FROM V$PWFILE_USERS;

總結檢查清單

故障類型核心視圖關鍵參數/組一鍵修復
用戶自動鎖定DBA_USERS, DBA_PROFILESFAILED_LOGIN_ATTEMPTSALTER PROFILE ... LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED
ORA-01031V$PWFILE_USERSOS組 dba/ORA_DBAusermod -a -G dba oracle

最佳實踐建議

  1. 應用用戶專用Profile,隔離密碼策略變更影響。
  2. 監控DBA_USERS.ACCOUNT_STATUS非OPEN狀態,納入巡檢告警。
  3. OS層面:安裝時驗證oracle用戶組歸屬,自動化部署腳本中固化usermod步驟。
  4. 定期審計V$PWFILE_USERS,撤銷無效SYSDBA授權。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved