症状
连接以 Access denied for user 失败,消息给出 MySQL 实际评估的用户与主机。MySQL 按用户与主机两者匹配账户,因此为 localhost 创建的账户无法满足来自容器网络的连接。或者密码与客户端发送的不同,或该用户使用的认证插件不被旧客户端库支持。
诊断
读取错误中的用户与主机;查看 mysql.user 的 host 与 plugin;用 mysql 客户端以相同凭据直接测试。
mysql -e "select user, host, plugin from mysql.user"
根因
所提供的凭据与针对该用户和主机的授权不匹配,原因是账户缺少匹配的主机条目、密码不同,或客户端不支持其认证插件。
修复
为实际连接来源的主机创建或授权账户;设置正确密码;选择客户端支持的认证插件;修改后执行 flush privileges。
验证
从应用再次连接确认成功,并确认账户权限足以完成其操作。连接成功且权限充分即证明修复。
常见陷阱
用 ‘%’ 通配主机虽然方便但扩大暴露面;应尽量限定来源网段。