ITPub博客

首页 > 数据库 > Oracle > oracle 19c 客户端链接报ORA-01017: invalid username/password的排查方法

oracle 19c 客户端链接报ORA-01017: invalid username/password的排查方法

原创 Oracle 作者:pingdanorcale 时间:2026-04-15 19:27:55 0 删除 编辑

一、先确认:到底是不是“真密码错”

1. 服务端本地登录验证

在数据库服务器执行:

sqlplus user/password@orcl

或:

sqlplus user/password

👉 结果判断:

  • ✔ 本地也失败 → 真的密码问题
  • ✔ 本地成功、远程失败 → 环境/协议问题

二、用户本身问题(最常见)

1. 账户状态

SELECT username, account_status, lock_date, expiry_date
FROM dba_users
WHERE username = 'XXX';

处理:

ALTER USER xxx ACCOUNT UNLOCK;
ALTER USER xxx IDENTIFIED BY new_password;

2. 密码版本不兼容(19c高频问题)

SELECT username, password_versions FROM dba_users;

异常情况:

10G

👉 原因:

  • 用户从旧库导入(10g/11g)
  • 19c客户端不再支持旧算法

✔ 解决:

ALTER USER xxx IDENTIFIED BY new_password;

三、连接串/TNS问题(最容易误判)

1. 实际连错库

很多人误以为密码错,其实连错实例

SELECT name FROM v$database;
SELECT sys_context( 'USERENV', 'DB_NAME') FROM dual;

2. service_name vs SID

错误示例(很常见):

sqlplus user/pass@ip:1521:ORCL   -- SID写法

正确建议:

sqlplus user/pass@//ip:1521/ORCL

3. tnsping验证

tnsping orcl

四、客户端环境问题(隐蔽)

1. 字符集导致“伪密码错误”

特别是:

  • 中文密码
  • 特殊字符密码

检查:

echo $NLS_LANG

建议统一:

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

2. 客户端版本过低

sqlplus -v

👉 建议:

  • 使用 12c / 19c client
  • 避免 10g/11g client 直连 19c

五、sqlnet.ora 配置问题(关键)

路径:

$ORACLE_HOME/network/admin/sqlnet.ora

1. 认证方式影响登录

SQLNET.AUTHENTICATION_SERVICES = (NTS)

👉 问题:

  • 会优先走 OS认证
  • 导致用户名密码被忽略

✔ 建议测试:

SQLNET.AUTHENTICATION_SERVICES = (NONE)

2. 加密/协议不兼容

SQLNET.ALLOWED_LOGON_VERSION_SERVER
SQLNET.ALLOWED_LOGON_VERSION_CLIENT

👉 如果客户端太老,会被拒绝


六、特殊用户问题(SYS / SYSDBA)

sqlplus sys/password@orcl as sysdba

👉 报密码错可能是:

  • 密码文件不一致

✔ 处理:

orapwd file=$ORACLE_HOME/dbs/orapwORCL password=xxx force=y

七、Profile限制(容易忽略)

SELECT * FROM dba_profiles
WHERE resource_name LIKE 'FAILED_LOGIN_ATTEMPTS';

👉 超过次数 → 自动锁定


八、日志定位(建议一定看)

1. listener.log

$ORACLE_BASE/diag/tnslsnr/.../trace/listener.log

2. alert.log

$ORACLE_BASE/diag/rdbms/.../trace/alert.log

👉 可以看到:

  • 是否认证失败
  • 是否协议拒绝

九、终极排查顺序(推荐你照这个走)

按优先级👇

  1. ✅ 本地登录是否成功
  2. ✅ 用户状态(LOCK / EXPIRE)
  3. ✅ password_versions
  4. ✅ 是否连错库
  5. ✅ 连接串写法(service_name)
  6. ✅ NLS_LANG
  7. ✅ 客户端版本
  8. ✅ sqlnet.ora
  9. ✅ 日志

十、真实生产TOP原因(经验总结)

你可以优先怀疑这几个:

👉 90%概率在这里:

  1. 密码版本问题(最常见)
  2. 连错数据库
  3. 账号锁定
  4. service_name写错
  5. 客户端太老


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10201716/viewspace-3116158/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-01-02

  • 博文量
    158
  • 访问量
    221183