MySQL限制访问来源的关键是CREATE USER语句中@后的host字段,必须显式指定如'10.0.5.22'或'192.168.1.%',不支持CIDR;GRANT需严格匹配host,修改host须DROP后重建,不可UPDATE。

直接限制访问来源,关键在 CREATE USER 语句里的 @ 后面那个 host 部分——它不是可选注释,而是硬性匹配条件。写成 'user'@'%' 就等于开放所有 IP,毫无限制效果。
创建用户时必须显式指定 host
MySQL 不会默认帮你绑定 IP,必须在创建时就写死来源。比如业务服务器固定 IP 是 10.0.5.22,那就得这么建:
CREATE USER 'app'@'10.0.5.22' IDENTIFIED BY 'pwd123';GRANT SELECT, INSERT ON orders.* TO 'app'@'10.0.5.22';FLUSH PRIVILEGES;
注意:授权语句里的 host 必须和 CREATE USER 完全一致,'app'@'10.0.5.22' 和 'app'@'%' 是两个完全不同的账号,权限不互通。
网段限制只能用 % 通配符,不支持 CIDR
MySQL 的 host 字段只认 % 和 _ 两种通配符,不识别 192.168.1.0/24 这类 CIDR 表达式。想放行整个内网段,得写成:
-
CREATE USER 'monitor'@'192.168.1.%' IDENTIFIED BY 'mon123!';(匹配192.168.1.1到192.168.1.255) -
CREATE USER 'backup'@'10.0.%.%' IDENTIFIED BY 'bak456#';(匹配10.0.10.5、10.0.99.200等)
但要注意:192.168.1.% 无法排除其中某个 IP,比如不能“放行 192.168.1.0/24 但禁掉 192.168.1.100”——这种精细控制必须靠防火墙或云安全组补位。
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
修改已有用户的 host 需重建,不能直接 UPDATE
MySQL 8.0+ 不允许用 UPDATE mysql.user SET Host='10.0.5.22' WHERE User='app' 这种方式改 host。强行执行后不生效,还可能破坏账户状态。正确做法是:
- 先删旧账号:
DROP USER 'app'@'%'; - 再建新账号:
CREATE USER 'app'@'10.0.5.22' IDENTIFIED BY 'pwd123'; - 重新授权:
GRANT SELECT ON mydb.* TO 'app'@'10.0.5.22'; - 最后刷新:
FLUSH PRIVILEGES;
如果忘了删旧账号,新建同名不同 host 的用户会导致登录时出现“Access denied for user 'app'@'xxx'”错误——MySQL 会按 host 匹配优先级选账号,顺序混乱容易误判。
连接失败时先看错误信息里暴露的 host
当客户端连不上,错误提示如 Access denied for user 'app'@'10.0.5.23',说明 MySQL 已收到请求,且匹配到了 'app'@'10.0.5.23' 这个账号(但密码错或没权限);而如果是 Access denied for user 'app'@'%' ,那大概率是你建了 'app'@'10.0.5.22' 却从别的 IP 连,或者根本没建对 host。
真正卡在 TCP 层(比如防火墙拦截、bind-address 绑错网卡)时,错误通常是 “Can’t connect to MySQL server”,不会提 user 或 host ——这时候别折腾权限表,先查网络通路。










