0

0

mysql中创建用户时限制IP与主机访问权限

P粉602998670

P粉602998670

发布时间:2026-01-15 11:25:08

|

230人浏览过

|

来源于php中文网

原创

MySQL创建用户时必须显式指定host部分,如'username'@'192.168.1.100'或'username'@'%',host决定允许连接的IP或主机名,且CREATE USER与GRANT中的host必须完全一致。

mysql中创建用户时限制ip与主机访问权限

MySQL 创建用户时如何指定允许连接的 IP 或主机名

MySQL 用户名由 'user'@'host' 两部分组成,其中 host 部分直接决定该用户能从哪些客户端发起连接。它不是“额外配置项”,而是创建用户时必须显式声明的核心组成部分。

常见误区是先用 CREATE USER 'u1'@'localhost' 创建,再试图用 GRANT ... ON *.* TO 'u1' 改权限——这不会改变 host 值,只会报错或静默失败。

  • 'localhost':仅允许本机 Unix socket 或 127.0.0.1(取决于 MySQL 配置),不等价于 '127.0.0.1'(后者走 TCP)
  • '192.168.1.100':只允许来自该 IP 的 TCP 连接
  • '192.168.1.%':匹配 192.168.1 网段所有 IPv4 地址(注意:不匹配 IPv6)
  • '%.example.com':匹配所有以 .example.com 结尾的主机名(需 DNS 可解析)
  • '%':允许任意主机连接(含公网),生产环境应避免

使用 CREATE USER 时必须写全 host 部分

不能省略 @'host',也不能只写用户名。MySQL 5.7+ 默认不允许空 host,且 CREATE USER 'u1' 会被解释为 'u1'@'%',这是高危行为。

正确写法示例:

CREATE USER 'app_user'@'10.20.30.40' IDENTIFIED BY 's3cur3_p@ss';

如果想允许多个固定 IP,需分别创建多个用户(MySQL 不支持单用户绑定多个 host):

CREATE USER 'app_user'@'10.20.30.40' IDENTIFIED BY 's3cur3_p@ss';
CREATE USER 'app_user'@'10.20.30.41' IDENTIFIED BY 's3cur3_p@ss';

注意:IDENTIFIED BY 在 MySQL 8.0+ 中仍有效,但推荐用 IDENTIFIED WITH caching_sha2_password BY '...' 显式指定认证插件。

GRANT 语句中的 host 必须与 CREATE USER 一致

GRANT 不会修改用户定义的 host,它只是给某个已存在的 'user'@'host' 授权。若执行:

CREATE USER 'api'@'192.168.5.0/24';
GRANT SELECT ON mydb.* TO 'api'@'%';

第二行会报错:ERROR 1396 (HY000): Operation GRANT failed for 'api'@'%',因为用户实际是 'api'@'192.168.5.0/24'(MySQL 8.0+ 支持 CIDR 写法,但仍是完整 host 字符串)。

ECTouch移动商城系统
ECTouch移动商城系统

ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有

下载

正确做法是:

CREATE USER 'api'@'192.168.5.0/24' IDENTIFIED BY 'p@ss';
GRANT SELECT ON mydb.* TO 'api'@'192.168.5.0/24';

另外,host 匹配是**精确字符串匹配**,不支持通配符嵌套(如 '192.168.*.100' 无效)。

验证用户 host 是否生效及常见连不上原因

连不上最常被忽略的是:MySQL 服务是否监听了对应网卡、防火墙是否放行 3306 端口、客户端是否用了正确的 host 参数(例如用 mysql -h 127.0.0.1 -u u1mysql -h localhost -u u1 可能命中不同用户)。

检查当前所有用户及其 host:

SELECT User, Host FROM mysql.user;

查看某用户具体权限(确认 host 完全一致):

SHOW GRANTS FOR 'webapp'@'172.16.0.5';

特别注意:MySQL 8.0+ 默认启用 skip_name_resolve = ON,此时 host 部分不会做 DNS 反查,'user'@'host.example.com' 只匹配客户端 TCP 连接时声明的 hostname(通常不可靠),建议一律用 IP 或 '%' + 网络层控制。

host 字符串一旦写错(比如多一个空格、大小写不一致、用了中文引号),用户就无法匹配,且错误提示往往模糊(如 Access denied for user),排查时务必逐字符核对 UserHost 输出结果。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

662

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

245

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

514

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

253

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

528

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

599

2023.08.14

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

0

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.8万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 793人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号