mysql数据库针对特定用户允许所有IP地址进行连接
·
要让 MySQL 5.7 允许所有 IP 地址连接,核心是授权用户远程访问权限 + 解除本地地址绑定(关键配置),以下是完整步骤和 SQL 命令:
一、核心 SQL 命令(授权远程访问)
1. 登录 MySQL 终端
先通过本地登录 MySQL(默认仅允许本地登录):
mysql -u root -p # 输入 root 密码回车
2. 授权用户(支持所有 IP 访问)
场景1:授权 root 用户(最高权限)允许所有 IP 连接
-- 授权 root 所有权限(所有数据库+所有表),允许任意 IP(%)访问,设置密码(替换为你的密码)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的root密码' WITH GRANT OPTION;
场景2:授权普通用户(推荐,更安全)
-- 授权 testuser 用户,允许所有 IP 访问,仅授予 testdb 数据库的权限(按需调整)
GRANT SELECT, INSERT, UPDATE ON testdb.* TO 'testuser'@'%' IDENTIFIED BY 'testuser的密码';
3. 刷新权限(使授权生效)
FLUSH PRIVILEGES;
二、关键配置:解除本地地址绑定(必做)
仅授权还不够!MySQL 5.7 默认绑定 127.0.0.1(仅本地访问),需修改配置文件解除绑定:
1. 找到 MySQL 配置文件
- Linux/Mac:
/etc/my.cnf或/etc/mysql/my.cnf(不同系统路径可能不同) - Windows:
my.ini(通常在 MySQL 安装目录的my.ini或data/my.ini)
2. 修改 bind-address 配置
编辑配置文件,找到 [mysqld] 段落下的 bind-address,修改为:
[mysqld]
bind-address = 0.0.0.0 # 允许所有IP连接
port = 3306 # 确保端口未被修改(默认3306)
3. 重启 MySQL 服务
- Linux(CentOS 6/7/8):
# CentOS 7/8 systemctl restart mysqld # CentOS 6 service mysqld restart - Windows:
右键「此电脑」→「管理」→「服务和应用程序」→「服务」→ 找到「MySQL」→ 重启。
三、注意事项(安全必看)
- 避免直接开放 root 所有 IP:
建议创建专用普通用户(如场景2),仅授予必要权限,降低风险。 - 防火墙放行 3306 端口:
远程连接需确保服务器防火墙(Linux iptables/ufw、Windows 防火墙)放行 3306 端口。 - MySQL 5.7 插件兼容问题:
若授权后仍无法连接,可能是 root 用户默认使用auth_socket插件(仅允许本地 socket 登录),需修改认证方式:-- 切换 root 为 mysql_native_password 插件(兼容远程密码登录) ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的root密码'; FLUSH PRIVILEGES; - 验证是否生效:
从远程机器测试连接:mysql -u root -p -h 你的MySQL服务器IP -P 3306
四、恢复本地仅访问(如需)
若需收回远程权限,执行:
-- 撤销 root 所有 IP 权限
REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%';
FLUSH PRIVILEGES;
-- 删除远程用户(可选)
DROP USER 'root'@'%';
并将 bind-address 改回 127.0.0.1,重启服务。
结合你提供的 Django 数据库配置,以下是创建对应数据库+授权访问的完整 SQL 语句(适配 MySQL 5.7),包含字符集、权限等关键配置:
一、完整执行步骤(登录 MySQL 后执行)
1. 登录 MySQL 终端
mysql -u root -p # 输入 MySQL 本地 root 密码(默认本地登录)
2. 创建数据库(核心语句)
指定数据库名 mushang_shop,并匹配配置中的 utf8mb4 字符集(支持 emoji 等特殊字符):
-- 创建数据库(不存在则创建),指定字符集和排序规则(MySQL 5.7 推荐 utf8mb4_unicode_ci)
CREATE DATABASE IF NOT EXISTS mushang_shop
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
3. 授权 root 用户访问(匹配配置中的 HOST/PASSWORD)
配置中 HOST 是 172.16.40.139、USER 是 root、PASSWORD 是 123456,需授权该 IP 的 root 用户访问此数据库:
-- 方式1:仅授权访问 mushang_shop 数据库(推荐,最小权限原则)
GRANT ALL PRIVILEGES ON mushang_shop.* TO 'root'@'172.16.40.139' IDENTIFIED BY '123456' WITH GRANT OPTION;
-- 方式2:授权 root 从 172.16.40.139 访问所有数据库(兼容配置中可能的全库操作)
-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.40.139' IDENTIFIED BY '123456' WITH GRANT OPTION;
4. 刷新权限(使授权生效)
FLUSH PRIVILEGES;
5. 可选:验证数据库创建结果
-- 查看数据库列表
SHOW DATABASES;
-- 查看指定数据库的字符集
USE mushang_shop;
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
二、关键配置说明(匹配 Django 配置)
- 字符集:
utf8mb4完全匹配配置中OPTIONS['charset'] = 'utf8mb4',解决普通utf8不支持 emoji 的问题; - 授权 IP:精准匹配
HOST: 172.16.40.139,确保 Django 服务能从该 IP 连接 MySQL; - 密码:
IDENTIFIED BY '123456'匹配配置中PASSWORD: 123456; - sql_mode:配置中
init_command是连接时设置sql_mode,无需在创建数据库时配置(Django 连接后自动执行)。
三、补充:若需允许 root 从任意 IP 访问(兼容后续修改 HOST)
如果后续可能修改 Django 的 HOST 为其他地址,可授权 root 从所有 IP 访问(对应之前开放所有地址的配置):
GRANT ALL PRIVILEGES ON mushang_shop.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
四、注意事项
- 执行前确保 MySQL 服务已重启(对应之前开放远程连接的配置);
- 确保 172.16.40.139 所在机器能访问 MySQL 服务器的 3306 端口;
- MySQL 5.7 若提示
authentication plugin 'caching_sha2_password'错误,需切换认证方式:ALTER USER 'root'@'172.16.40.139' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES;
更多推荐
所有评论(0)