我正在尝试连接到远程 MySQL 数据库进行复制。
该数据库位于属于安全网络一部分的计算机上,因此在打开足够的安全性以允许我的复制目标访问 3306 端口后,我想通过 CLI 工具进行连接以检查连接。
但是,无论我如何尝试连接,我都会收到以下响应:
ERROR 1045 (28000): Access denied for user '{user}'@'{IP}' (using password: NO)
不管这条消息的内容如何,我一直尝试连接的用户确实设置了密码,并且我确实为 CLI 提供了该密码。
我尝试过以交互方式、内联方式以及通过 .cnf 文件传递密码
我已确保密码正确,并确保用户来自托管复制目标的计算机的 IP 地址。
我已将用户的权限更改为“全部”,以防存在拒绝访问的权限。
我已确保复制目标服务器没有任何用户可以使用密码登录,以防影响默认行为。
这些都没有改变行为,不幸的是,我可以在网上找到的唯一资源是如果忘记 root 密码如何登录,或者如何在完成全新安装后设置 root 密码。
编辑:这些是我用来尝试将密码传递给 CLI 的命令:
Interactively:
mysql --host={destination IP} --protocol=tcp -u remote_user -p
Inline:
mysql --host={destination IP} --protocol=tcp -u remote_user -p{password}
mysql --host={destination IP} --protocol=tcp --user=remote_user --password={password}
Configuration file:
(Config file {user}@{host}.cnf)
[client]
host={host}
user={user}
password={password}
protocol=tcp
(Command)
mysql --defaults-extra-file=/{user}@{host}.cnf
编辑2:user
我要连接的数据库表包含以下相关行:
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections |
| {-IP address-} | azure_user | {-password_hash-} | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 |
不幸的是,该数据库运行的是 MySQL v.5.1,因此不包含请求的所有字段。识别信息已被删除,但 IP 对于我尝试访问数据库的计算机来说是正确的,用户名也是如此。密码哈希值是使用设置的ALTER USER 'azure_user'@'{-IP address-}' IDENTIFIED BY '{password}'
。
这个问题的根源是 MySQL 的版本差异很大。
远程服务器使用 MySQL 版本 5.1.73,而我尝试登录的客户端使用版本 8.0.35。当我将客户端降级到 5.5 后,我就可以毫无问题地登录了。
感谢@Damien-Layershift 提出了他们使用不匹配的客户端版本的体验!