ORA-01017: invalid username/password; logon denied 是 Oracle 開發者最常遇到的錯誤之一。本文整理從客戶端工具 (PL/SQL Developer) 連線失敗的完整排查路徑,涵蓋密碼驗證、TNS 配置、帳號狀態、權限授予、環境變數五大維度,助你快速定位根因。
ORA-01017,但確信帳密正確。SELECT username, account_status FROM dba_users WHERE username = 'YOUR_USER';
ALTER USER your_user IDENTIFIED BY new_password;
$ORACLE_HOME/network/admin/tnsnames.ora (如 D:\Program Files (x86)\Oracle\odac_client\network\admin\tnsnames.ora)。HOST IP 是否為資料庫伺服器真實 IP,SERVICE_NAME 是否與伺服器端一致。Oracle Home 路徑下的 tnsnames.ora 是否為正確修改的那一份。-- 以 SYS 登入檢查 SELECT username, account_status FROM dba_users WHERE username = 'YOUR_USER'; -- 若顯示 LOCKED(TIMED) 或 EXPIRED(GRACE) 則需解鎖 ALTER USER your_user ACCOUNT UNLOCK; -- 若密碼過期同步重置 ALTER USER your_user IDENTIFIED BY new_password ACCOUNT UNLOCK;
GRANT CREATE SESSION TO your_user; -- 視需求授予資源角色 GRANT CONNECT, RESOURCE, CREATE TABLE, CREATE VIEW, UNLIMITED TABLESPACE TO your_user;
ORACLE_HOME、TNS_ADMIN、NLS_LANG 是否指向錯誤的 Oracle Home。作者在 tnsnames.ora 中誤將 HOST 設為開發機 IP 而非資料庫伺服器 IP,導致連線請求發送到無監聽器的機器,回傳 ORA-01017 (實際應為 ORA-12541,但因中間層轉發或驗證邏輯差異顯示為 1017)。修正 IP 後即刻解決。
避坑指南:團隊協作時建立統一
tnsnames.ora模板存放版控,CI/CD 部署時自動分發至 Client 端$ORACLE_HOME/network/admin與instantclient/network/admin,杜絕手動修改導致的不一致。