ora-01017报错主因是oracle 12c+密码大小写敏感,而navicat未用双引号包裹password导致传值变形;须在连接字符串中手动设password="password123",并确认password_versions含12c、账户未锁定、角色选default、权限含connect。

Navicat 连接 Oracle 报 ORA-01017,**大概率不是输错了密码,而是密码被 Navicat 自动“标准化”后与 Oracle 实际存储的大小写敏感哈希不匹配**。Oracle 12c+ 默认启用密码大小写校验,而 Navicat 不会自动为 password 加双引号,导致传过去的是小写或截断值。
Navicat 连接字符串里必须手动加双引号包裹 password
Navicat 不识别 Oracle 的密码大小写语义,它把 Password=PassWord123 当作普通字符串处理,内部可能转成全小写再发给数据库。Oracle 要求:只要密码含大写字母/数字/特殊字符且已升级到 12C 版本,就必须用英文双引号显式包裹原始值。
- 进「连接属性 → 高级」页签,在
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; - 普通业务用户务必选
DEFAULT角色;误选SYSDBA会导致 Oracle 强制要求 sysdba 权限凭证,普通用户必然报错
用 SQL*Plus 直连验证凭据是否真实有效
绕过所有客户端干扰,用最原始方式验证——这是排查链路中唯一可信的基准点。
- 在终端运行:
sqlplus "alice/PassWord123@orclpdb"(注意整个凭据用英文双引号包裹) - 如果成功,说明问题纯属 Navicat 配置或缓存问题;如果失败,再查账户状态、权限、PDB 服务名是否匹配
- 特别注意 Windows 下从记事本复制的密码常带 UTF-8 BOM,
sqlplus看不出,但 Oracle 会严格比对失败
真正容易被忽略的是:密码版本升级和双引号包裹是两件事,缺一不可。很多人改了密码却没加引号,或者加了引号但密码仍存为 10G 版本,结果还是连不上。











