news 2026/4/16 14:38:21

报错:ORA-01017: invalid username/password; logon denied...如何解决?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
报错:ORA-01017: invalid username/password; logon denied...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

📌特别说明:
文中问题案例来源于真实生产环境与公开技术社区,并结合多位一线资深工程师与架构师的长期实践经验,经过人工筛选与AI系统化智能整理后输出。文中的解决方案并非唯一“标准答案”,而是兼顾可行性、可复现性与思路启发性的实践参考,供你在实际项目中灵活运用与演进。

欢迎订阅本专栏,一次订阅后,专栏内所有文章可永久免费阅读,后续更新内容皆不用再次订阅,持续更新中。

📢 问题描述

详细问题描述如下:关于linux下安装oracle11.2.0.4后使用navicat16进行连接出现ORA-01017: invalid username/password; logon denied这个问题,密码是没问题的,我也下载了对应的oci包,还是出现了这个问题。

具体报错如下所示:

全文目录:

    • 📢 问题描述
    • 📣 请知悉:如下方案不保证一定适配你的问题!
      • ✅️问题理解
      • ✅️问题解决方案
        • 🟢方案 A:如果你用的是 SYS(或 SYSTEM),检查登录“角色/方式”(高频)
        • 🔵方案 B:你其实连错了服务/实例(最容易“自认为密码没问题”)
        • 🟣方案 C:OCI/Instant Client 位数或加载路径错了(Navicat 最常见坑之一)
        • 🟡方案 D:用户密码版本(PASSWORD_VERSIONS)不兼容,重置密码生成 11G 校验值
        • 🟤方案 E:密码含特殊字符/中文导致“你以为一样,但传输字节不一样”
        • 🔴方案 F:sqlnet.ora 的认证/加密策略限制(较少见,但一旦遇到就很折磨)
      • ✅️问题延伸
      • ✅️问题预测(你接下来最可能卡住的点)
      • ✅️小结
    • 🌹 结语 & 互动说明
    • 🧧 文末福利:技术成长加速包 🧧
    • 🫵 Who am I?

📣 请知悉:如下方案不保证一定适配你的问题!

如下是针对上述问题进行专业角度剖析答疑,不喜勿喷,仅供参考:

✅️问题理解

你在Linux 安装 Oracle 11.2.0.4后,用 **Navicat 16(Windows 客户端居多)**连接时弹:

ORA-01017: invalid username/password; logon denied

你确认“密码没问题”、也装了OCI/Instant Client,但仍报错。

这里要先强调一个关键事实:
ORA-01017 并不只代表“密码错”,它还经常代表下面几类情况之一(而且在 GUI 工具里很常见):

  1. 连到了“不是你以为的那个服务/实例”(用户名在那个库里不存在 → 也会报 -1017)
  2. ✅ 用的是SYS 用户,但未用 SYSDBA 角色登录(Navicat 默认 Normal → 会 -1017)
  3. OCI 位数/版本不匹配或客户端加载到了“错误的 OCI”(同名 dll 被 PATH 抢走)导致认证走偏
  4. ✅ 用户的PASSWORD_VERSIONS只有旧版本(10G),而客户端/协议要求 11G(常见于导入/迁移后)
  5. ✅ 密码含特殊字符/非 ASCII(中文、全角符号等)引发编码差异,工具端传入字节不一致(你以为相同,其实发过去不同)
  6. ✅ 账号被锁/过期一般会报 ORA-28000/28001,但有些工具显示不完整也可能被你误判(仍建议核验)

✅️问题解决方案

下面我给你按命中率排序的可落地排查与修复路径(每个方案都有“如何验证”+“怎么修”)。你可以按顺序执行,通常A或B方案就能解决

🟢方案 A:如果你用的是 SYS(或 SYSTEM),检查登录“角色/方式”(高频)

现象特征

  • 你用sys用户,Navicat 连接类型是“Normal”(普通用户)
  • Oracle远程 SYS 登录必须 as SYSDBA(依赖 password file)
  • 否则就算密码对,也会ORA-01017

怎么验证(最快)
在任意能跑 sqlplus 的地方测试(推荐在 Oracle 服务器上):

sqlplus sys/你的密码@//127.0.0.1:1521/你的service as sysdba
  • 如果这样能进,而 Navicat 仍报错 → 99% 是 Navicat 没选对角色。

怎么修(Navicat)

  • 连接配置里找到Role / 连接角色
  • Normal 改为 SYSDBA(或 SYSOPER,如果你就是要 SYSOPER)

⚠️ 如果你选了 SYSDBA 仍失败,检查 password file:

  • 服务器端确认:

    • remote_login_passwordfile=EXCLUSIVE(一般默认就可以)
    • 密码文件存在(通常$ORACLE_HOME/dbs/orapw$ORACLE_SID
🔵方案 B:你其实连错了服务/实例(最容易“自认为密码没问题”)

关键点
如果你在 Navicat 里填的是SID/Service Name 其中之一填错,或连到了监听器暴露的另一个 service:

  • 你输入的用户名在那个库不存在
  • Oracle 也会回ORA-01017(不会告诉你“用户不存在”)

怎么验证(在服务器上查真实 service)

  1. 看监听器有哪些服务名:
lsnrctl status

你会看到类似:

  • Service "orcl"has 1 instance(s) …
  • Service "orclpdb"…(11g一般没有 PDB,但可能有额外 service)
  1. 用你“认为正确的 service”试一次:
sqlplus 用户/密码@//服务器IP:1521/服务名

怎么修(Navicat)

  • 优先使用 Service Name 方式(更稳定)
  • 把 Navicat 里的服务名改成lsnrctl status里真实出现的那个
  • 如果你目前用的是 SID,建议换成 Service Name(很多人把两者混了)
🟣方案 C:OCI/Instant Client 位数或加载路径错了(Navicat 最常见坑之一)

你说“下载了对应 OCI 包”,但仍可能加载错,原因通常是:

  • Navicat 16 是 64-bit,你装了 32-bit OCI(或反过来)
  • 你装了多个 Oracle Client,Windows 的PATH先命中了别的oci.dll
  • 你配置了 OCI 目录,但依赖库缺失(msvcr/VC++ runtime)导致内部回退/异常

怎么验证(抓住“到底加载了哪个 oci.dll”)
最简单办法:

  • 确认 Navicat 的OCI 目录指向你解压的instantclient_11_2(或instantclient_12_1
  • 然后把 Windows 环境变量PATH里其它 Oracle 客户端路径临时移除(或把你的 instantclient 放到 PATH 最前面)

推荐组合(稳定)

  • Oracle 11.2.0.4 服务端

  • 客户端建议用Instant Client 11.2 x64(Navicat 16 x64就用 x64)

    • 不建议拿 19c/21c client 去连 11g(不是不能,但认证/加密兼容坑更多)

怎么修

  • 保证:Navicat 位数 = Instant Client 位数
  • 只保留一个oci.dll来源(避免 PATH 抢占)
  • 在 Navicat 里明确配置 OCI 目录(不要只靠系统 PATH)
🟡方案 D:用户密码版本(PASSWORD_VERSIONS)不兼容,重置密码生成 11G 校验值

这个在“导入旧库/迁移账号”后非常多:

  • 用户只存在10G密码校验版本
  • 客户端/服务器要求11G校验
  • 于是你怎么输都像“密码不对” → ORA-01017

怎么验证(DBA 账号执行)

SELECTusername,account_status,password_versionsFROMdba_usersWHEREusername='你的用户名大写';
  • 如果PASSWORD_VERSIONS只有10G(没有 11G) → 很可能就是它。

怎么修(重置一次密码即可)

ALTERUSERyour_user IDENTIFIEDBY"NewStrongPwd123";

重置后再查password_versions,一般会出现11G

建议:先用纯英文+数字的临时密码测试(排除编码/特殊字符问题),确认可连后再改回你需要的复杂密码。

🟤方案 E:密码含特殊字符/中文导致“你以为一样,但传输字节不一样”

如果你的密码里包含:

  • 中文、全角符号(比如:( ) ! ¥
  • 或某些特殊字符(如引号、反斜杠、空格结尾)
    GUI 工具很容易在编码/转义上出问题,尤其跨平台(Linux server + Windows client)。

怎么验证

  • 把用户密码临时改成只含[A-Za-z0-9]的简单密码测试
  • 如果立刻能连 → 基本就是编码/特殊字符/输入法导致

怎么修

  • 密码尽量用:英文字母大小写 + 数字 + 少量安全符号(如_ - @ #
  • 避免:空格、中文、全角符号、引号类
🔴方案 F:sqlnet.ora 的认证/加密策略限制(较少见,但一旦遇到就很折磨)

有些环境会改sqlnet.ora导致某些客户端被拒绝,最终也可能表现为 -1017。
例如:

  • SQLNET.ALLOWED_LOGON_VERSION_SERVER / CLIENT
  • 强制加密/校验算法不兼容(老库 + 新客户端)

怎么验证

  • 在同一台 Windows 上用 **sqlplus(来自同一套 instantclient)**连接是否成功

    • 如果 sqlplus 成功而 Navicat 失败 → 更偏 Navicat/OCI 配置问题
    • 如果 sqlplus 也失败 → 更偏服务端 sqlnet 策略/账号状态问题

怎么修(方向)

  • 暂时放宽sqlnet.ora的限制做验证(生产环境请谨慎、最好由 DBA 操作)
  • 或换用更兼容的 instantclient 版本(优先 11.2)

✅️问题延伸

给你一套“最稳的定位闭环”,以后遇到任何 Oracle 客户端登录问题都能快速归因:

✅️问题预测(你接下来最可能卡住的点)

  1. 你用的是 SYS,但一直用 Normal 角色→ 永远 -1017
  2. 你以为是 orcl,实际监听 service 是 orcl11g / xe / 其他→ 连错实例
  3. 你装了多个 Oracle Client,Navicat 实际加载了另一套 oci.dll → 你换 OCI 包也没用
  4. 用户从旧库导入导致PASSWORD_VERSIONS=10G→ 重置一次立刻好
  5. 密码带中文/全角/特殊符号 → 工具端转义/编码差异导致“看起来对、实际错”

✅️小结

你这个 ORA-01017 在“密码确定没问题 + Navicat + OCI”场景下,最常见真正原因是:

  • 1、SYS 没用 SYSDBA 登录
  • 2、Service/SID 填错导致连到别的实例
  • 3、OCI 位数/加载路径/PATH 抢占
  • 4、PASSWORD_VERSIONS 不兼容(重置一次密码即可)

🌹 结语 & 互动说明

希望以上分析与解决思路,能为你当前的问题提供一些有效线索或直接可用的操作路径

若你按文中步骤执行后仍未解决:

  • 不必焦虑或抱怨,这很常见——复杂问题往往由多重因素叠加引起;
  • 欢迎你将最新报错信息、关键代码片段、环境说明等补充到评论区;
  • 我会在力所能及的范围内,结合大家的反馈一起帮你继续定位 👀

💡如果你有更优或更通用的解法:

  • 非常欢迎在评论区分享你的实践经验或改进方案;
  • 你的这份补充,可能正好帮到更多正在被类似问题困扰的同学;
  • 正所谓「赠人玫瑰,手有余香」,也算是为技术社区持续注入正向循环

🧧 文末福利:技术成长加速包 🧧

文中部分问题来自本人项目实践,部分来自读者反馈与公开社区案例,也有少量经由全网社区与智能问答平台整理而来。

若你尝试后仍没完全解决问题,还请多一点理解、少一点苛责——技术问题本就复杂多变,没有任何人能给出对所有场景都 100% 套用的方案。

如果你已经找到更适合自己项目现场的做法,非常建议你沉淀成文档或教程,这不仅是对他人的帮助,更是对自己认知的再升级。

如果你还在持续查 Bug、找方案,可以顺便逛逛我专门整理的 Bug 专栏👉《全栈 Bug 调优(实战版)》👈️

这里收录的都是在真实场景中踩过的坑,希望能帮你少走弯路,节省更多宝贵时间。

✍️如果这篇文章对你有一点点帮助:

  • 欢迎给 bug菌 来个一键三连:关注 + 点赞 + 收藏
  • 你的支持,是我持续输出高质量实战内容的最大动力。

同时也欢迎关注我的硬核公众号 「猿圈奇妙屋」:

获取第一时间更新的技术干货、BAT 等互联网公司最新面试真题、4000G+ 技术 PDF 电子书、简历 / PPT 模板、技术文章 Markdown 模板等资料,通通免费领取
你能想到的绝大部分学习资料,我都尽量帮你准备齐全,剩下的只需要你愿意迈出那一步来拿。

🫵 Who am I?

我是 bug菌:

  • 热活跃于 CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等技术社区;
  • CSDN 博客之星 Top30、华为云多年度十佳博主/卓越贡献者、掘金多年度人气作者 Top40;
  • 掘金、InfoQ、51CTO 等平台签约及优质作者;
  • 全网粉丝累计30w+

更多高质量技术内容及成长资料,可查看这个合集入口 👉 点击查看 👈️

硬核技术公众号「猿圈奇妙屋」期待你的加入,一起进阶、一起打怪升级。

- End -

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 1:28:36

耶鲁大学团队如何让电脑助手学会“看懂“桌面操作

这项由耶鲁大学和北卡罗来纳大学教堂山分校联合开展的研究发表于2025年2月的arXiv预印本数据库,论文编号为arXiv:2602.07153v1。对于想要深入了解技术细节的读者,可以通过该编号查询完整的学术论文。当你看到那些科幻电影里的场景——人们只需要对电脑说…

作者头像 李华
网站建设 2026/4/16 10:54:01

【YOLOv12多模态涨点改进】独家创新首发| CVPR 2025 | 引入FDSM频率域动态地选择模块,高效融合红外和可见光多模态特征,精准保留有用信息、抑制冗余与噪声,助力目标检测、图像分割、分类

一、本文介绍 本文介绍使用 FDSM(Frequency Dynamic Selection Mechanism)模块改进 YOLOv12多模态 模型,可有效提升模型对复杂场景中目标的判别能力。FDSM 通过在频域中动态选择和融合多源图像(如 RGB 与 NIR)中的高低频互补特征,自适应提取关键结构信息与纹理细节,从而…

作者头像 李华
网站建设 2026/4/16 12:33:55

论文写作AI推荐:10个实用网站详细评测

毕业论文写作是学术生涯中的重要环节,但文献整理和内容创作往往耗费大量精力。随着AI技术的快速发展,智能工具正逐步改变这一现状。以aibiye和aicheck为代表的专业学术AI工具,通过智能文献分析、内容优化和查重校对等功能,显著提升…

作者头像 李华
网站建设 2026/4/15 17:58:19

2机5节点系统潮流仿真模型附Simulink仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/4/15 14:31:10

【综合能源】电热冷综合能源优化调度研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/4/16 12:03:59

C++之函数模板

文章目录函数模板的定义函数模板的实例化模板参数模板参数的匹配问题解决参数的匹配问题的方法模板函数的形参表函数模板的特化函数模板提供了一种通用的函数行为,该函数行为可以用多种不同的数据类型进行调用,编译器会根据调用类型自动将它实例化为具体…

作者头像 李华