mysql 允许远程IP访问配置

本文深入探讨了MySQL远程访问授权的详细步骤,包括如何使用grant语法进行授权,以及如何确保数据库服务器的安全性。通过实例展示了本地访问、远程访问和任意访问的不同授权方式,并强调了取消授权的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

MySQL远程访问,也就是通过ip访问MySQL服务,MySQL对于安全的要求是非常严格的,需要授权。 

 

 

grant语法

grant 权限名(所有的权限用all) on 库名(*全部).表名(*全部) to ‘要授权的用户名’@’%’(%表示所有的IP,可以只些一个IP) identified by “密码”;

身份检查使用user表(Host, User和Password)3个范围列执行。服务器只有在user表记录的Host和User列匹配客户端主机名和用户名并且提供了正确的密码时才接受连接。

在user表Host值的指定方法:

* Host值可以是主机名或IP号,或’localhost’指出本地主机。

* 你可以在Host列值使用通配符字符“%”和“_”。

* Host值’%’匹配任何主机名,空Host值等价于’%’。它们的含义与LIKE操作符的模式匹配操作相同。例如,’%’的Host值与所有主机名匹配,而’%.mysql.com’匹配mysql.com域的所有主机。

 

 

1.本地访问 

Sql代码    收藏代码
  1. GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'admin' WITH GRANT OPTION;   
  2. FLUSH PRIVILEGES;  



上述命令的意思是为admin用户授权,以localhost方式访问数据库,密码为admin,这是我们推荐的访问方式,不直接暴露IP,提高数据库服务器的安全性。 

2.远程访问 
如果数据库服务器与应用服务器物理层面分割,也就是不在同一台服务器的时候,我们需要通过ip方式访问,这个ip就是数据库服务器主机IP。 

Sql代码    收藏代码
  1. GRANT ALL PRIVILEGES ON *.* TO admin@X.Y.Z.W IDENTIFIED BY 'admin' WITH GRANT OPTION;   
  2. FLUSH PRIVILEGES;  



当然,这里授予admin用户WITH GRANT OPTION权限,欠稳妥!如果一个用户从远程登录修改了数据库表结构等等,是非常有风险的! 

通常不建议授予授予其他用户权限权力,即: 

Sql代码    收藏代码
  1. GRANT ALL PRIVILEGES ON *.* TO admin@X.Y.Z.W IDENTIFIED BY 'admin';   
  2. FLUSH PRIVILEGES;  



3.任意访问 
如果不限制ip访问,授权某个用户可以以任意ip访问该服务,可以这样写: 

Sql代码    收藏代码
  1. GRANT ALL PRIVILEGES ON *.* TO admin@'%' IDENTIFIED BY 'admin';   
  2. FLUSH PRIVILEGES;  



注意单引号! 

3.取消授权 
当然,有授权,就一定有取消授权: 

Sql代码    收藏代码
  1. REVOKE ALL ON *.* FROM admin@X.Y.Z.W;   
  2. FLUSH PRIVILEGES;  

 

 




OK,现在我们可以开始部署我们的应用了! 

<think>好的,用户需要配置MySQL允许远程IP连接访问。我需要先回忆相关的步骤,然后按照用户的要求组织答案。 首先,用户的问题是关于MySQL远程连接的设置,根据提供的引用内容,特别是引用[2]和[3],里面有提到两种方法:授权法和改表法。但要注意MySQL版本的不同,比如MySQL 8.0可能有不同的操作步骤。 首先,我应该确认用户使用的是哪个版本的MySQL,但用户没有说明,所以需要涵盖通用的步骤,并指出版本差异。比如,在MySQL 8.0中,授权的方式可能有所不同,可能需要先创建用户再授权,或者修改认证插件。 然后,按照引用中的步骤,授权法是用GRANT命令,而改表法是直接修改user表的host字段。同时,还需要注意修改配置文件,比如注释掉bind-address或者确保其值为0.0.0.0,以允许外部连接。这部分在引用中没有提到,可能需要补充,因为有时候即使设置了用户权限,如果MySQL只绑定本地IP,还是无法远程访问。 接下来是防火墙的设置,需要开放3306端口,或者关闭防火墙测试。这也是关键步骤,否则可能被防火墙阻挡。 另外,在MySQL 8.0中,使用GRANT命令可能需要先创建用户,因为旧版的GRANT语法在8.0中可能不再适用。例如,在8.0中,可能需要分开创建用户和授权两步,或者使用新的身份验证方式,比如caching_sha2_password,而旧版本可能是mysql_native_password。这里可能需要提醒用户注意,如果遇到身份验证错误,可能需要更改用户的插件或者密码加密方式。 然后,按照步骤来组织:登录MySQL,选择mysql数据库,执行授权或改表操作,刷新权限,检查配置,修改配置文件,重启服务,防火墙设置,测试连接。 需要注意每一步的具体命令是否正确,比如在引用[3]中提到的update语句是否正确,以及是否在MySQL 8.0中适用。比如,在8.0中直接修改user表是否足够,或者是否需要其他步骤。 另外,要提醒用户关于安全性的问题,比如开放%可能会带来风险,建议使用更严格的IP限制,或者使用SSH隧道等其他方法。同时,密码的安全性也很重要,避免使用简单密码。 最后生成相关问题,可能涉及其他数据库的远程配置,性能优化,安全措施,或者不同版本的区别等。</think>以下是配置 MySQL 允许远程 IP 连接的步骤说明: ### 一、修改用户权限 1. **登录 MySQL 控制台** ```bash mysql -u root -p ``` 2. **选择系统数据库** ```sql USE mysql; ``` 3. **授权远程访问(两种方法)** - **方法一:授权法(推荐)** 为 root 用户授予所有 IP访问权限: ```sql CREATE USER 'root'@'%' IDENTIFIED BY '你的密码'; -- MySQL 8.0 需要显式创建用户 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; ``` [^2][^3] - **方法二:改表法** 修改用户表的 host 字段: ```sql UPDATE user SET host='%' WHERE user='root'; ``` 4. **刷新权限** ```sql FLUSH PRIVILEGES; ``` 5. **验证配置** ```sql SELECT user, host FROM user; -- 确认 host 列显示 % ``` --- ### 二、修改 MySQL 配置文件 1. **编辑配置文件** ```bash sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # 路径可能因系统而异 ``` 2. **注释绑定地址** 找到 `bind-address` 并修改为: ```ini bind-address = 0.0.0.0 # 或直接注释此行 ``` 3. **重启 MySQL 服务** ```bash sudo systemctl restart mysql # 或 mysqld ``` --- ### 三、配置防火墙 - **开放 3306 端口** ```bash sudo ufw allow 3306/tcp # Ubuntu sudo firewall-cmd --add-port=3306/tcp --permanent # CentOS ``` --- ### 四、远程连接测试 ```bash mysql -h <服务器IP> -u root -p # 从其他设备执行 ``` --- ### 注意 1. **安全性建议** - 避免直接开放 `root@%`,建议创建专用用户并限制权限[^
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值