MySQL远程连接免密登录且输入密码报错的问题求助
MySQL远程连接权限异常问题分析
问题现象
已在MySQL 8.0.32(Oracle Linux 8环境)中创建全局管理员用户myuser,配置远程访问权限并修改bind-address=0.0.0.0,但出现以下异常:
- 执行远程连接命令
mysql -u $MYUSER -h $HOST -P 3306 -D $MYDB时,无需输入密码即可自动登录,不符合安全要求 - 尝试指定密码连接时触发权限拒绝错误:
REMOTECLIENT# mysql -u $MYUSER -h $HOST -P 3306 -D $MYDB --password 'mypass' Enter password: ERROR 1045 (28000): Access denied for user '$MYUSER@$HOST' (using password: YES)
异常原因
1. 密码参数语法错误(核心报错原因)
你使用的--password 'mypass'写法不符合MySQL客户端语法规范:
--password(或缩写-p)后面直接跟密码值时不能有空格,正确写法为--password='mypass'或-pmypass(-p与密码间无空格)- 若保留空格,MySQL会将
'mypass'识别为目标数据库名,而非密码值,此时客户端仍会提示输入密码,你输入的内容会被当作密码传递,但与服务端存储的mypass不匹配,最终触发权限拒绝。
2. 无密码自动登录的原因
大概率是远程客户端的配置文件预存了登录凭证:
- 检查客户端用户目录下的
~/.my.cnf(或~/.mylogin.cnf),查看是否存在[client]段配置了user和password参数,示例:
[client] user=myuser password=mypass
- 该配置会让客户端自动读取凭证完成登录,无需手动输入密码。
3. 额外排查点(非直接原因)
MySQL 8.0默认使用caching_sha2_password认证插件,部分旧版客户端可能存在兼容问题,但你的场景中无密码能正常登录,说明认证通路正常,此点优先级较低。可通过以下语句确认用户的认证插件:
SELECT user, host, plugin FROM mysql.user WHERE user='myuser';
解决步骤
- 修正远程连接命令的密码参数写法:
# 写法1:使用--password=xxx格式 mysql -u $MYUSER -h $HOST -P 3306 -D $MYDB --password='mypass' # 写法2:使用-p缩写(无空格) mysql -u $MYUSER -h $HOST -P 3306 -D $MYDB -pmypass # 写法3:仅加-p,手动输入密码(更安全) mysql -u $MYUSER -h $HOST -P 3306 -D $MYDB -p - 取消客户端自动登录配置:
编辑客户端的~/.my.cnf,删除或注释[client]段中的user和password配置项:[client] # user=myuser # password=mypass - 确认权限生效(可选):
若修改用户权限后未同步,可执行以下语句确保权限生效:FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者fah81
相关产品推荐
相关产品推荐

