讲师中心 微信公众号
AI工具推荐 视频效率加速

如何批量修改MySQL用户的主机限制_通过UPDATE语句更新user表

梦杰姑娘_8841

梦杰姑娘_8841

发布时间:2026-05-19 19:23:57

|

542人浏览过

|

来源于php中文网

原创

直接改 mysql.user 表风险极高,MySQL 5.7+ 中 user 表为视图,裸 UPDATE 会破坏元数据一致性、触发字段校验错误(如 ssl_cipher 缺失默认值),导致登录失败或权限失效;正确做法是用 ALTER USER 安全修改主机、密码及认证插件,并显式刷新权限与验证连接。

如何批量修改mysql用户的主机限制_通过update语句更新user表

直接改 mysql.user 表风险极高,不建议用 UPDATE

MySQL 5.7+ 默认启用 sql_mode=STRICT_TRANS_TABLES,且 user 表是系统表,结构受内部校验约束。直接 UPDATE mysql.user SET host='%' WHERE user='app_user' 极可能触发错误:ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value 或导致用户无法登录、权限失效。这不是语法问题,而是 MySQL 服务端在写入时会校验字段完整性(如 authentication_string、password_expired、account_locked 等),裸 UPDATE 会跳过这些逻辑。

正确做法:用 ALTER USER 修改主机限制

MySQL 5.7.6+ 提供了安全可控的 DDL 方式,自动处理底层字段兼容性与密码哈希同步。关键点在于:必须显式指定原用户名和原主机(即当前完整账号),再用 IDENTIFIED WITH ... BY(如需重设密码)或仅改 REQUIRE/WITH 子句。

  • 把本地用户 'dev'@'localhost' 改成允许任意主机连接:
    ALTER USER 'dev'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpass' REQUIRE NONE;
  • 若只需改主机、不改密码,先查出当前认证插件和密码哈希:
    SELECT plugin, authentication_string FROM mysql.user WHERE user='dev' AND host='localhost';
    再复用:
    ALTER USER 'dev'@'localhost' IDENTIFIED WITH mysql_native_password AS '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
  • 批量操作需写脚本生成语句(不能直接多值 ALTER USER):
    例如导出所有 @'192.168.%' 用户改为 @'%':
    SELECT CONCAT("ALTER USER '", user, "'@'", host, "' IDENTIFIED WITH ", plugin, " AS '", authentication_string, "';") FROM mysql.user WHERE host LIKE '192.168.%';
    执行结果后手动校验并运行

MySQL 5.6 或低版本只能用 GRANT + FLUSH PRIVILEGES

旧版本不支持 ALTER USER,但也不能直接 UPDATE user。必须走授权路径:先创建新主机账号,再删旧账号。因为 GRANT 会自动填充缺失字段(如 ssl_type、x509_issuer),而 DROP USER 才真正清理记录。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 例如迁移 'api'@'10.0.1.5' 到 'api'@'%':
    GRANT SELECT,INSERT ON mydb.* TO 'api'@'%' IDENTIFIED BY 'pwd123';<br>FLUSH PRIVILEGES;<br>DROP USER 'api'@'10.0.1.5';
  • 注意 GRANT 不会复制原账号的全局权限(如 PROCESS、RELOAD),需单独查 mysql.user 补全:
    SELECT column_name FROM information_schema.COLUMNS WHERE table_name='user' AND column_name LIKE '%priv%';
    然后手工拼 GRANT ... ON *.* 语句
  • FLUSH PRIVILEGES 必须执行,否则内存缓存未更新,新账号仍不可用

改完必须验证连接和权限,别信“执行成功”

即使语句没报错,也常出现:新主机能连上但无库权限、密码实际失效、SSL 要求被忽略。最简验证方式是开一个新终端,用目标账号直连:

  • 测试连接:
    mysql -u app_user -p -h 192.168.10.20
  • 进库后立刻查权限是否继承:
    SHOW GRANTS FOR CURRENT_USER();
  • 特别注意 max_connections、max_questions 这类资源限制默认不继承,需在 ALTER USER 中显式指定:
    ALTER USER 'app_user'@'%' WITH MAX_CONNECTIONS_PER_HOUR 100;

跨大版本升级(如 5.7 → 8.0)后,plugin 字段值可能从 mysql_native_password 变为 caching_sha2_password,此时光改 host 不够,客户端驱动不兼容会导致“Access denied”。得同步调整插件和密码哈希格式。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

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

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

2393

2023.06.20

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

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

1439

2023.06.21

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

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

855

2023.07.18

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

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

3352

2023.07.19

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

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

5748

2023.07.25

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

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

1239

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

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

6011

2023.08.11

mysql忘记密码
mysql忘记密码

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

5222

2023.08.14

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

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

精品课程

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

共1课时 | 192人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn