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 认证插件,老客户端(如 Navicat 旧版、某些 Python 驱动)根本连不上——会报错
_sha2_passwordERROR 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垃圾回收器的方法和原理总结

