当前位置: 首页 > news >正文

MySQL 设置远程 IP 连接方式(含自动检测授权脚本)

MySQL 设置远程 IP 连接方式(含自动检测授权脚本)


🧩 MySQL 设置远程 IP 连接方式


1️⃣ 查看 MySQL 版本

SELECT VERSION();

2️⃣ 查看 root 用户的授权情况

密码我设置的是 123456

SELECT host, user, plugin, authentication_string 
FROM mysql.user 
WHERE user = 'root';

📘 下面是 MySQL 5.xMySQL 8.x 两个版本中,
创建 root 用户远程访问权限的正确写法对比 👇


3️⃣ MySQL 5.x 版本(如 5.6 / 5.7)

✅ 特点:GRANT 命令中可以直接使用 IDENTIFIED BY 设置密码。

-- 1️⃣ 给 root 用户赋予所有库的全部权限,并允许远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;-- 2️⃣ 刷新权限
FLUSH PRIVILEGES;

📘 说明:

  • 'root'@'%' 表示允许任意主机访问。

  • IDENTIFIED BY '123456' 设置密码。

  • WITH GRANT OPTION 允许该用户再授权给其他用户。

  • 如果只想允许指定 IP(如 192.168.1.%),可改为:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    

4️⃣ MySQL 8.x 版本(如 8.0+)

⚠️ MySQL 8.x 不再支持在 GRANT 命令里设置密码,
必须分两步执行:先创建用户,再授权。

-- 1️⃣ 创建 root 用户(如果不存在)
CREATE USER 'root'@'%' IDENTIFIED BY '123456';-- 2️⃣ 赋予权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;-- 3️⃣ 刷新权限
FLUSH PRIVILEGES;

📘 说明:

  • 如果 root@'%' 已存在,可用以下方式改密码:

    ALTER USER 'root'@'%' IDENTIFIED BY '123456';
    
  • MySQL 8 默认使用 caching_sha2_password 插件认证。
    如果使用旧版客户端(如 Navicat、旧驱动)连接失败,可切换为:

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    

5️⃣ 检查 root 用户远程访问是否生效

SELECT host, user, plugin, authentication_string 
FROM mysql.user WHERE user='root';

✅ 如果 root 对应的 host%,说明远程访问已启用。


⚙️ 6️⃣ 自动判断版本并使用变量授权(通用版)

🧩 功能说明

  • ✅ 自动检测 MySQL 版本(5.x / 8.x)
  • ✅ 检查用户是否存在
  • ✅ 自动创建或更新密码
  • ✅ 自动授权远程访问
  • ✅ 使用变量设置用户、主机、密码

📜 通用授权脚本

-- ==========================================
-- 🧩 MySQL 自动检测版本并执行正确授权(通用版)
-- ==========================================-- 把整个块一次性复制到你的 MySQL 客户端并执行DROP PROCEDURE IF EXISTS grant_remote_user;
DELIMITER $$
CREATE PROCEDURE grant_remote_user(IN in_user VARCHAR(64),IN in_host VARCHAR(255),IN in_pwd  VARCHAR(255)
)
BEGINDECLARE ver VARCHAR(64);DECLARE is8 INT DEFAULT 0;DECLARE user_exists INT DEFAULT 0;-- 版本检测SET ver = VERSION();SELECT CONCAT('当前 MySQL 版本:', ver) AS Version_Info;SET is8 = IF(LEFT(ver,1) = '8', 1, 0);-- 检查用户是否存在SELECT COUNT(*) INTO user_existsFROM mysql.userWHERE user = in_user AND host = in_host;SELECT CONCAT('检测结果:用户是否存在 -> ', user_exists) AS User_Exist_Status;IF is8 = 1 THEN-- MySQL 8.x 流程IF user_exists = 0 THENSET @sql_create = CONCAT('CREATE USER \'', in_user, '\'@\'', in_host, '\' IDENTIFIED BY \'', in_pwd, '\';');PREPARE ps FROM @sql_create; EXECUTE ps; DEALLOCATE PREPARE ps;SELECT '🆕 用户不存在 → 已创建用户' AS Action;ELSESET @sql_alter = CONCAT('ALTER USER \'', in_user, '\'@\'', in_host, '\' IDENTIFIED WITH mysql_native_password BY \'', in_pwd, '\';');PREPARE ps FROM @sql_alter; EXECUTE ps; DEALLOCATE PREPARE ps;SELECT '🔁 用户已存在 → 已更新密码' AS Action;END IF;SET @sql_grant = CONCAT('GRANT ALL PRIVILEGES ON *.* TO \'', in_user, '\'@\'', in_host, '\' WITH GRANT OPTION;');PREPARE ps FROM @sql_grant; EXECUTE ps; DEALLOCATE PREPARE ps;FLUSH PRIVILEGES;SELECT '✅ MySQL 8.x 授权完成。' AS Result;ELSE-- MySQL 5.x 流程IF user_exists = 0 THENSET @sql_grant = CONCAT('GRANT ALL PRIVILEGES ON *.* TO \'', in_user, '\'@\'', in_host, '\' IDENTIFIED BY \'', in_pwd, '\' WITH GRANT OPTION;');PREPARE ps FROM @sql_grant; EXECUTE ps; DEALLOCATE PREPARE ps;SELECT '🆕 用户不存在 → 已创建并授权' AS Action;ELSESET @sql_update_pwd = CONCAT('SET PASSWORD FOR \'', in_user, '\'@\'', in_host, '\' = PASSWORD(\'', in_pwd, '\');');PREPARE ps FROM @sql_update_pwd; EXECUTE ps; DEALLOCATE PREPARE ps;SELECT '🔁 用户已存在 → 已更新密码' AS Action;SET @sql_grant = CONCAT('GRANT ALL PRIVILEGES ON *.* TO \'', in_user, '\'@\'', in_host, '\' WITH GRANT OPTION;');PREPARE ps FROM @sql_grant; EXECUTE ps; DEALLOCATE PREPARE ps;END IF;FLUSH PRIVILEGES;SELECT '✅ MySQL 5.x 授权完成。' AS Result;END IF;
END$$
DELIMITER ;-- 调用示例(把密码改为你要的)
CALL grant_remote_user('root', '%', '123456');

🪄 使用方法

步骤操作说明
登录 MySQL 控制台(mysql -u root -p
复制上方整个脚本
修改变量:SET @pwd := '你的密码';
执行后输出结果:版本号 → 用户是否存在 → 创建/更新状态 → 授权结果 ✅

🧩 输出示例

▶️ MySQL 8.x:
当前 MySQL 版本:8.0.39
检测结果:用户是否存在 -> 0
🆕 用户不存在 → 已创建用户
✅ MySQL 8.x 授权完成。
▶️ MySQL 5.x:
当前 MySQL 版本:5.7.44
检测结果:用户是否存在 -> 1
🔁 用户已存在 → 已更新密码
✅ MySQL 5.x 授权完成。

http://www.dtcms.com/a/477702.html

相关文章:

  • flash型网站网址高校思政课网站建设
  • 网站建设费做什么会计科目硬件开发外包平台
  • 【SpringBoot从初学者到专家的成长15】MVC、Spring MVC与Spring Boot:理解其差异与联系
  • Docker 存储与数据共享
  • k8s storageclasses nfs-provisioner 部署
  • Linux(Samba服务)
  • 电商智能客服进化论:多轮对话+意图识别+知识推荐系统开发
  • 算法198. 打家劫舍
  • 刚学做网站怎么划算全栈网站开发工程师
  • 长春网站优化公司wordpress目录遍历漏洞
  • 华为OD-23届考研-Java面经
  • 10.9 鸿蒙创建和运行项目
  • delphi调用C#编写的DLL
  • 从API调用到智能体编排:GPT-5时代的AI开发新模式
  • C++学习录(1):C++入门简介,从零开始
  • 电力专用多功能微气象监测装置在电网安全运维中的核心价值是什么?
  • 科研快报 |声波“听”见火灾温度:混合深度学习重构三维温度场
  • 从超级大脑到智能毛细血管:四大技术重构智慧园区生态版图
  • 旅游网站建设方案书制作一个网站平台需要多少钱
  • SQL入门:集合运算实战指南
  • Docker 网络类型与容器通信
  • Oracle 21C 部署ogg踩过的坑
  • vue3 中播放.flv视频
  • Oracle AWR报告中Load Profile源码
  • 电子商务网站开发的任务书企业文化心得体会
  • 溧阳网站开发kindeditor代码高亮 wordpress
  • CSS常见问题
  • nginx 负载均衡配置
  • 原生 iOS 开发全流程实战,Swift 技术栈、工程结构、自动化上传与上架发布指南
  • Apache开源许可证:深度解析与实践指南