为何使用-h指定主机时MySQL仍要求用户以<username@hostname>格式登录?
MySQL连接需指定username@hostname的原因分析
当执行命令 mysql -h <hostname> -u<user_name> -P 3306 -p<password> 时,系统报错要求以username@hostname格式指定用户;改用 mysql -h <hostname> -u<user_name>@<hostname> -P 3306 -p<password> 就能正常连接,但同事仅指定用户名即可连接——核心原因出在MySQL的用户权限机制上:
- MySQL的用户身份是用户名+主机地址的组合,比如
user_name@localhost和user_name@192.168.1.100是两个完全独立的用户,对应不同的权限配置。 - 你的同事能仅用
-u<user_name>连接,说明他的账号是user_name@%(允许任意主机访问)或者user_name@<他的客户端主机IP/hostname>,而你的账号是严格绑定了目标数据库主机的user_name@<hostname>,必须明确指定完整的用户标识才能匹配到对应的权限条目。 -h参数只是指定要连接的MySQL服务器地址,但MySQL验证身份时,会用你提供的用户名+当前客户端的主机名/IP去匹配权限表中的用户条目。如果你只给用户名,系统默认拼接的组合在权限表中不存在,因此报错要求你指定完整的username@hostname格式。
验证方法
登录MySQL后执行以下命令,查看所有用户的主机绑定情况,就能直观看到你和同事账号的host字段差异:
SELECT user, host FROM mysql.user;
内容的提问来源于stack exchange,提问作者borjaperez
相关产品推荐
相关产品推荐

