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

Oracle 用戶鎖定/解鎖與密碼管理速查手冊

     編輯:Oracle 資料庫基礎

核心命令速查表

操作SQL 命令說明
解鎖用戶 ALTER USER scott ACCOUNT UNLOCK; 恢復被鎖定用戶的登錄權限
鎖定用戶 ALTER USER scott ACCOUNT LOCK; 禁止用戶登錄,不刪除對象
修改密碼 ALTER USER scott IDENTIFIED BY new_password; 立即生效,需具備 ALTER USER 系統權限
登錄驗證 CONNECT scott/new_password 測試解鎖/改密後的連通性

完整操作流程示範

-- 1. 以 SYSDBA 連接(或具備 ALTER USER 權限的管理用戶)
CONNECT / AS SYSDBA
-- 或
CONNECT sys/password AS SYSDBA

-- 2. 檢查用戶狀態
SELECT username, account_status, lock_date, expiry_date
FROM dba_users
WHERE username = 'SCOTT';

-- 3. 執行解鎖
ALTER USER scott ACCOUNT UNLOCK;
-- 返回:User altered.

-- 4. (可選) 同步重置密碼
ALTER USER scott IDENTIFIED BY tiger;

-- 5. 驗證登錄
CONNECT scott/tiger
-- 返回:Connected.

-- 6. 再次確認狀態
SELECT username, account_status FROM dba_users WHERE username = 'SCOTT';
-- ACCOUNT_STATUS 應為 OPEN

進階場景與避坑指南

1. 批量解鎖/鎖定腳本

-- 解鎖除 SYS/SYSTEM 外所有被鎖定用戶
BEGIN
  FOR u IN (SELECT username FROM dba_users 
            WHERE account_status = 'LOCKED' 
            AND username NOT IN ('SYS','SYSTEM','OUTLN','DBSNMP'))
  LOOP
    EXECUTE IMMEDIATE 'ALTER USER ' || u.username || ' ACCOUNT UNLOCK';
    DBMS_OUTPUT.PUT_LINE('Unlocked: ' || u.username);
  END LOOP;
END;
/

2. 密碼驗證函數與 Profile 綁定

單純解鎖不解決弱密碼問題。生產環境應配置 Profile 強制複雜度:

-- 創建驗證函數(示例:長度≥8、含大小寫數字特殊字符)
CREATE OR REPLACE FUNCTION verify_complexity
  (username VARCHAR2, password VARCHAR2, old_password VARCHAR2)
RETURN BOOLEAN IS
BEGIN
  IF LENGTH(password) < 8 THEN
    RAISE_APPLICATION_ERROR(-20001, '密碼長度至少 8 位');
  END IF;
  IF NOT REGEXP_LIKE(password, '[A-Z]') THEN
    RAISE_APPLICATION_ERROR(-20002, '需包含大寫字母');
  END IF;
  -- 更多規則...
  RETURN TRUE;
END;
/

-- 創建 Profile 並綁定函數
CREATE PROFILE secure_profile LIMIT
  PASSWORD_VERIFY_FUNCTION verify_complexity
  PASSWORD_LIFE_TIME 90
  PASSWORD_GRACE_TIME 7
  FAILED_LOGIN_ATTEMPTS 5
  PASSWORD_LOCK_TIME 1/24; -- 1 小時

-- 應用至用戶
ALTER USER scott PROFILE secure_profile;

3. 常見故障排查

現象可能原因排查動作
解鎖後仍報 ORA-28000: the account is locked Profile 設置 `PASSWORD_LIFE_TIME` 過期導致隱式鎖定 檢查 `DBA_USERS.EXPIRY_DATE`;修改 Profile 或 `ALTER USER ... IDENTIFIED BY ... REPLACE ...` 重置密碼
解鎖報 ORA-01950: no privileges on tablespace 'USERS' 用戶無默認表空間配額 `ALTER USER scott QUOTA UNLIMITED ON users;`
PDB 中解鎖無效 未切換至正確容器 `ALTER SESSION SET CONTAINER = pdb_name;` 後再操作

安全合規建議

  • 審計追蹤: 開啟 `AUDIT ALTER USER;` 記錄所有鎖定/解鎖/改密操作。
  • 最小權限: 避免直接授予 `ALTER USER` 系統權限,改用封裝過程 + `GRANT EXECUTE` 方式委託運維團隊。
  • 定期巡檢: 納入巡檢腳本:`SELECT username FROM dba_users WHERE account_status != 'OPEN';`
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved