ORA-01017 连接失败主因是 Oracle 12c+ 密码大小写敏感且 Navicat 未用双引号包裹密码,需检查密码版本(PASSWORD_VERSIONS 含 12C)、账户状态、角色(如 SYS 需选 SYSDBA)并确保连接字符串中 password="PassWord123"。
ora-01017 报错时密码“明明是对的”却连不上,大概率不是输错了,而是 oracle 12c+ 默认启用密码大小写敏感,而 navicat 没把密码原样传过去——它默认当普通字符串处理,不加引号、不保留大小写意图,结果发给数据库的是全小写或被截断/变形的值。
Navicat 连接字符串里必须手动加双引号包裹 password
Navicat 不会自动为密码加引号,哪怕你输入的是 PassWord123,它内部仍可能转成小写或丢掉大写标识。Oracle 要求:只要密码含大写字母、数字、特殊字符且需保持原始形态,就必须用英文双引号显式包裹。
- 进「连接属性 → 高级」页签,找到
Connection String输入框 - 填入完整格式:
username="alice";password="PassWord123";database=ORCL; - 如果用 TNS(服务名),可在「常规」页签的「服务名」字段后追加:
ORCL?user="alice"&password="PassWord123" - 注意:
username和password是 Navicat 自己识别的键名,但值部分的双引号是 Oracle 认证必需的
确认用户密码版本是否已升级到 12C
即使 Navicat 输对了,也要查 Oracle 里这个用户密码实际存成什么样——老密码(10G/11G 版本)不走大小写校验逻辑,新密码(12C)才真正启用。
- 用 DBA 账户执行:
SELECT username, password_versions FROM dba_users WHERE username = 'ALICE'; - 若
PASSWORD_VERSIONS字段含12C,说明该用户已启用大小写敏感 - 若只显示
10G 11G,说明密码没重置过,此时改密码即可:ALTER USER alice IDENTIFIED BY "PassWord123";
别忽略角色和账户状态这两个隐藏开关
ORA-01017 不只是认证失败,也可能是用户被锁、没权限、或角色选错。Navicat 默认用 Normal 角色连,但 SYS 用户必须选 SYSDBA 才能通过。
- 检查账户是否被锁:
SELECT username, account_status FROM dba_users WHERE username = 'ALICE';,状态为LOCKED就得先解锁:ALTER USER alice ACCOUNT UNLOCK; - 确认有基本登录权限:
SELECT * FROM dba_role_privs WHERE grantee = 'ALICE' AND granted_role = 'CONNECT';,没有就补上:GRANT CONNECT TO alice; - Navicat 连接 SYS 或 SYSTEM 时,务必在「高级」页签中把
Role改成SYSDBA,否则一定报 ORA-01017
最容易被忽略的其实是密码版本和角色选择——前者决定 Oracle 底层是否真校验大小写,后者决定 Navicat 发起的连接请求是否被允许进入认证流程。光调连接字符串不查这两项,问题大概率还在原地打转。


















