核心命令速查表
| 操作 | 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';`