Navicat 连 Oracle 不会报 1045 错误,该错误仅属 MySQL/MariaDB;若出现 1045,说明实际连接的是 MySQL 实例或 Navicat 连接类型配置错误(如选 MySQL 却填 Oracle 地址端口),需核对连接类型、端口(3306 为 MySQL,1521 为 Oracle)、密码回车符、Host 权限及 MySQL 8.0+ 认证插件兼容性。
navicat 连 oracle 不会报 1045 错误——这个错误只属于 mysql / mariadb。如果你在连接 oracle 时看到 1045,说明你实际连的是 mysql 实例,但误以为是 oracle;或者 navicat 链接配置选错了数据库类型(比如协议选了 mysql 却填了 oracle 的地址端口)。
确认你连的到底是 MySQL 还是 Oracle
Oracle 的典型认证错误是 ORA-01017: invalid username/password 或 ORA-12154: TNS could not resolve,绝不会出现 1045。MySQL 的 1045 全称是 Access denied for user 'xxx'@'yyy',由 mysqld 主动抛出。
- 检查 Navicat 新建连接窗口右上角的「连接类型」:必须是
MySQL,不是Oracle、OCI或ODBC - 检查主机名和端口:
1521是 Oracle 默认端口,3306才是 MySQL 默认端口;若填了1521却选了 MySQL 类型,大概率连不上或触发代理/防火墙干扰,间接导致认证异常 - 用命令行交叉验证:
mysql -h your_ip -P 3306 -u root -p能通,才说明后端确实是 MySQL
密码里藏回车符:从 Word / 网页复制最常踩的坑
Navicat 的用户名/密码输入框对不可见字符(尤其是 \r\n)不作提示,粘贴后看似正常,实则末尾多了一个回车,导致 MySQL 认证时比对的是 'root\r' 而非 'root'。
- 现象:点击测试连接,报
1045;但用 CMD 手动执行mysql -u root -p -h xxx输入同一密码却能登录 - 验证方法:在 Navicat 密码框中按一次
Backspace(哪怕光标已在末尾),再点测试——如果成功,基本锁定是回车符问题 - 解决方式:彻底清空密码框,手动输入,不要复制粘贴;如必须复制,请先粘贴到记事本,删掉换行再转过去
Host 权限不匹配:localhost ≠ % ≠ 实际 IP
MySQL 用户是 'user'@'host' 成对存在的。root@localhost 和 root@'%' 是两个完全不同的账号,权限互不影响。
- 远程连接失败但本地能登?大概率是只有
root@localhost,没开root@'%'或root@'your_ip' - 登录 MySQL 后执行:
SELECT User, Host FROM mysql.user;看是否存在对应记录 - 授予权限示例(注意替换用户名和密码):
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass'; GRANT ALL ON *.* TO 'myuser'@'%'; FLUSH PRIVILEGES; - 安全提醒:生产环境慎用
@'%',优先指定具体 IP 或内网段,如@'192.168.1.%'
MySQL 8.0+ 认证插件变更导致的“密码正确仍报 1045”
MySQL 8.0 默认使用 caching_sha2_password 插件,而老版本 Navicat(v12 及更早)可能不兼容,表现为输对密码也报 1045。
- 临时解决:创建用户时强制指定旧插件:
CREATE USER 'myuser'@'%' IDENTIFIED WITH mysql_native_password BY 'mypass'; - 长期建议:升级 Navicat 至 v15 或更高版本(已原生支持
caching_sha2_password) - 验证当前用户插件:
SELECT User, Host, plugin FROM mysql.user WHERE User = 'myuser';
真正卡住人的,往往不是权限 SQL 写错,而是 Navicat 里选错了连接类型、粘贴时吞了回车、或者根本连到了一台装着 MySQL 的“Oracle 服务器”上——先确认协议和端口,比翻十页重置密码教程都管用。










