mysql远程登录权限如何控制_mysql网络安全设置

发布时间 - 2025-12-31 00:00:00    点击率:
远程MySQL连接需三步:创建指定认证插件的专用用户(如mysql_native_password)、修改bind-address=0.0.0.0并重启服务、同步开放防火墙与云安全组3306端口。

远程用户必须显式创建,不能只改 host 字段

很多人以为只要 UPDATE mysql.user SET host='%' WHERE user='root' 就能远程登录,其实这步只是“开了门缝”,但 MySQL 8.0+ 默认用 caching_sha2_password 认证插件,老客户端(如 Navicat 旧版、某些 Python 驱动)根本连不上——会报错 ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded

正确做法是:先创建专用用户(不碰 root),再指定认证方式:

CREATE USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass123!';
GRANT SELECT, INSERT ON myapp.* TO 'app_user'@'%';
FLUSH PRIVILEGES;
  • ✅ 创建时就用 mysql_native_password,兼容性拉满
  • ✅ 权限精确到 myapp.*,不给 *.*(生产环境严禁)
  • ❌ 避免直接 UPDATE user 改 root 的 host——MySQL 8.0+ 的 user 表结构更严格,可能触发校验失败

bind-address 不设为 0.0.0.0,远程连接必失败

MySQL 默认配置是 bind-address = 127.0.0.1,意味着它只监听本地回环地址。哪怕用户权限全开、防火墙也放行,外部请求根本进不来,客户端会卡在 Connecting to MySQL server... 或直接报 ERROR 2003 (HY000): Can't connect to MySQL server

必须修改配置文件并重启服务:

  • Linux 路径:/etc/mysql/mysql.conf.d/mysqld.cnf
  • Windows 路径:my.ini(MySQL 安装目录下)
  • 找到 bind-address 行,改为:bind-address = 0.0.0.0(或指定内网 IP,如 192.168.1.100
  • 重启服务:sudo systemctl restart mysql(Linux)或服务管理器中重启(Windows)

⚠️ 注意:改完不重启 = 白改;改了但没注释掉原有 bind-address 行(配置文件里出现两行)= 以第一行为准,可能仍为 127.0.0.1。

防火墙和云平台安全组是双重关卡

本地测试通 ≠ 外网能连。Linux 防火墙(firewalld / ufw)和云厂商安全组(阿里云/腾讯云/AWS)必须都放行 3306/tcp

常见漏点:

  • 只开了防火墙,忘了在阿里云控制台配安全组入方向规则
  • 开了 3306,但协议选了 UDP(MySQL 只走 TCP)
  • 安全组规则目标 IP 写成 0.0.0.0/0 却没加描述,后续审计难追溯

推荐最小化开放:

# 仅允许公司办公网段访问(示例)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" port port="3306" protocol="tcp" accept'

远程权限的本质是 “用户 + 主机” 组合唯一匹配

MySQL 认证时,不是只看用户名,而是查 user@host 这个完整组合。比如:

  • 'admin'@'localhost''admin'@'%' 是两个完全独立的账号,密码、权限互不影响
  • 客户端从 192.168.1.50 连接,MySQL 会优先匹配 'admin'@'192.168.1.50''admin'@'192.168.1.%''admin'@'%',按最精确匹配生效
  • 所以不要用 'root'@'%',而应建 'deploy'@'192.168.10.%' 这类带子网限制的账号

查当前所有远程可登录账号:

SELECT User, Host FROM mysql.user WHERE Host != 'localhost';

网络环境越复杂,越要靠 Host 字段做第一道隔离——这是比应用层 IP 黑白名单更底层、更可靠的控制点。


# mysql  # linux  # word  # python  # windows  # navicat  # 防火墙  # app  # 端口  # 腾讯  # 网络安全 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  如何在橙子建站中快速调整背景颜色?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  油猴 教程,油猴搜脚本为什么会网页无法显示?  香港服务器租用费用高吗?如何避免常见误区?  在线制作视频的网站有哪些,电脑如何制作视频短片?  教学论文网站制作软件有哪些,写论文用什么软件 ?  Java遍历集合的三种方式  Laravel如何使用Service Container和依赖注入?(代码示例)  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Python面向对象测试方法_mock解析【教程】  Laravel如何处理CORS跨域请求?(配置示例)  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel如何为API生成Swagger或OpenAPI文档  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  WEB开发之注册页面验证码倒计时代码的实现  如何快速搭建支持数据库操作的智能建站平台?  在Oracle关闭情况下如何修改spfile的参数  如何彻底删除建站之星生成的Banner?  如何在Tomcat中配置并部署网站项目?  手机软键盘弹出时影响布局的解决方法  如何快速登录WAP自助建站平台?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  网站制作壁纸教程视频,电脑壁纸网站?  LinuxShell函数封装方法_脚本复用设计思路【教程】  公司门户网站制作流程,华为官网怎么做?  JavaScript如何操作视频_媒体API怎么控制播放  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  jQuery中的100个技巧汇总  如何快速搭建二级域名独立网站?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  微信小程序 input输入框控件详解及实例(多种示例)  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  IOS倒计时设置UIButton标题title的抖动问题  文字头像制作网站推荐软件,醒图能自动配文字吗?  Linux系统运维自动化项目教程_Ansible批量管理实战  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel distinct去重查询_Laravel Eloquent去重方法  详解Oracle修改字段类型方法总结  Java垃圾回收器的方法和原理总结