預設情況下,`lsnrctl` **無需任何認證**即可執行 `STOP`、`STATUS`、`SERVICES`、`SET` 等管理命令,導致:
$ lsnrctl LSNRCTL> SET CURRENT_LISTENER listener_demo92 # 多監聽器環境指定目標 LSNRCTL> START # 啟動無需密碼 LSNRCTL> CHANGE_PASSWORD Old password: # 首次直接 Enter New password: ******** Reenter new password: ******** LSNRCTL> SET PASSWORD Password: ******** LSNRCTL> SAVE_CONFIG # 持久化至 listener.ora
$ lsnrctl STOP LISTENER TNS-01169: The listener has not recognized the password $ lsnrctl LSNRCTL> SET PASSWORD Password: ******** LSNRCTL> STOP LISTENER The command completed successfully
# ---- ADDED BY TNSLSNR 2024-01-15 10:30:00 ---- PASSWORDS_LISTENER = 6D7AA003392C436A # 加密存儲 # ---------------------------------------------
| 版本 | SAVE_CONFIG 行為 | 額外建議參數 |
|---|---|---|
| 9i/10gR1 | 需先 `SET PASSWORD` 再 `SAVE_CONFIG`,否則 TNS-01169 | 手動添加 `ADMIN_RESTRICTIONS_ |
| 10gR2+ | 支援 OS 認證回退:dba 群組用戶免密管理 | **關閉 OS 回退** 增加 `LOCAL_OS_AUTHENTICATION_ |
| 11g/12c/19c | 同上,預設安全 | 同 10gR2,建議顯式關閉 OS 回退 |
在 `listener.ora` 手動添加:
ADMIN_RESTRICTIONS_LISTENER = ON
效果:
| 現象 | 原因 | 解決 |
|---|---|---|
| SAVE_CONFIG 失敗 TNS-01169 | 未先 SET PASSWORD (9i/10gR1) | 先 `SET PASSWORD` 再 `SAVE_CONFIG` |
| 密碼遺失 | 無備份 | 刪除 `PASSWORDS_ |
| EM/Grid Control 無法監控 | 監控代理無密碼 | 配置代理 `snmp_rw.ora` 或暫時放行管理 IP |
| RAC 環境密碼不同步 | 各節點獨立配置 | 使用 `srvctl config listener` 統一管理或集群文件系統共享 listener.ora |
Listener 密碼是**最低成本、最高收益**的資料庫邊界防護。**「設定密碼 + 關閉 OS 回退 + 啟用 ADMIN_RESTRICTIONS」**三步走,可將未授權管理風險降至最低。建議納入資料庫上架驗收清單,並定期滲透測試驗證有效性。