MySQL开启远程访问权限的方法与高版本注意事项

林舟
林舟
发布时间:2026-10-15 | 6人浏览过
原创

解决MySQL默认仅允许本地连接的问题,通过修改用户主机限制或使用GRANT语句赋予远程访问权限。针对MySQL 8.0及以上版本,需注意分离用户创建与授权步骤以避免语法错误。

MySQL开启远程权限的核心方法

MySQL默认安装后通常只允许 localhost(本地)连接,外部IP无法直接访问数据库。要实现远程管理或应用程序连接,需要调整用户表的访问策略或重新分配权限。

第1步:改表法(修改Host字段)

目的:直接修改底层权限表,将特定用户的允许登录主机从 localhost 改为通配符 %(代表任意IP)。

  1. 入口:SSH连接到服务器,进入MySQL命令行。
    • 执行命令:mysql -u root -p
  2. 动作:切换至系统数据库并查询当前用户的主机限制。
    USE mysql;
    SELECT Host, User FROM user WHERE User = 'root';
    
  3. 操作:更新记录,将 Host 设为 %。
    UPDATE user SET Host = '%' WHERE User = 'root' AND Host = 'localhost';
    
  4. 完成状态:再次执行 SELECT 确认 Host 列显示为 %。

第2步:标准授权法(GRANT语句)

目的:通过SQL权限管理语句,显式授予用户特定范围的操作权限,包括远程连接能力。

  1. 入口:登录到拥有管理员权限的账户(如 root)。
    mysql -u root -p
    
  2. 动作:执行 GRANT 语句。
    示例:允许用户 user 从任意地址连接,密码为 mypwd。
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
FLUSH PRIVILEGES;
  • ALL PRIVILEGES:表示所有数据库操作权限。
  • *.*:第一颗星代表所有数据库,第二颗代表所有表。可替换为 db_name.* 限定特定库。
  • 'user'@'%':用户名及允许连接的主机模式,%即允许所有IP。
  • WITH GRANT OPTION:允许该用户将其拥有的权限转授给其他用户。

注意:授权后立即执行 FLUSH PRIVILEGES; 刷新系统权限缓存,使更改立即生效。

第3步:指定特定IP远程访问

目的:出于安全考虑,仅允许特定的开发机或应用服务器IP进行连接。

  1. 动作:将 @'%' 替换为具体的IP地址字符串。
GRANT ALL PRIVILEGES ON *.* TO 'user'@'192.168.1.4' IDENTIFIED BY 'mypwd' WITH GRANT OPTION;
FLUSH PRIVILEGES;

MySQL 8.0+ 高版本注意事项

在MySQL 8.0及以上版本中,出于安全性增强,原来的 IDENTIFIED BY 语法在 GRANT 语句中可能被禁用或行为改变。如果直接使用上述GRANT语句报错,需采用“先创建用户,后授权”的标准流程。

第4步:高版本专用操作流程

  1. 检查版本:确认当前版本是否为 8.0+。
    SELECT @@VERSION;
    
  2. 入口:MySQL控制台。
  3. 动作A:创建用户。使用 CREATE USER 独立创建账号并设置密码。
CREATE USER 'root'@'%' IDENTIFIED BY 'password';

如果用户已存在但无远程权限,应先删除该用户记录或在低版本授权方式基础上补充此步骤。

  1. 动作B:授予权限。使用 GRANT 分配权限(注意此时不再带 IDENTIFIED BY)。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
  1. 动作C:刷新并验证。
FLUSH PRIVILEGES;
SELECT User, Host FROM user;

输出结果中应能看到 root 用户对应的 Host 列为 %。

常见操作命令参考

除了开启远程权限,以下命令常用于MySQL用户管理的日常维护:

查看与删除用户

  • 查看用户:SELECT user, host FROM mysql.user;
  • 安全删除用户:推荐使用 DROP USER,这会彻底清理与该用户相关的权限表和元数据。而 DELETE FROM user WHERE user='jack' 仅清除表记录,可能残留孤立数据。
DROP USER 'username'@'%';

刷新权限解释

FLUSH PRIVILEGES; 强制服务端重新加载权限表到内存。在执行了直接的 INSERT/UPDATE(改表法)或 GRANT/DROP 等操作后,必须执行此步确保即时生效,否则客户端连接可能会报 “Access denied”。

总结

以上为MySQL开启远程连接及权限分配的详细内容,更多关于资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表