恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

MySQL root密码重置:跳过权限表与认证插件兼容指南

  • 首页
  • 资讯中心
  • /
  • MySQL root密码重置:跳过权限表与认证插件兼容指南

相关资讯

【Springboot毕设全套源码+文档】基于Java+spring boot的粮库设备管理系统设计与实现(丰富项目+远程调试+讲解+定制) 2026/9/18 23:12:33
scikit-learn 缺失值插补完全指南:SimpleImputer / IterativeImputer / KNNImputer 与 MissingIndicator 实战与原理 2026/9/18 23:12:33
CSDN Markdown表情包大全:HTML实体插入与避坑指南 2026/9/18 23:12:33

最新资讯

ITIL第5版人文转向:从流程管理到价值共创
External test recommendation
通信企业资产全生命周期管理数智化路径与落地实践
STM32+emWin+Modbus RTU打造工业HMI:界面与通信协作实战
一文搞懂Linux静态库与动态库:从原理到实战
PixiJS v8 遮罩(Masking)完全指南:AlphaMask、StencilMask、ScissorMask 与 ColorMask

今日推荐

oh-my-hermes:打造跨工具的命令编排与插件化工作流
OpenClaw.NET 用 /goal start 跑长任务,模型 Base URL 改到 TaoToken
SYB创业计划书财务逻辑拆解:从销售收入预测到现金流量计划

本周热门

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化
Flutter应用改名全指南:从Android到iOS的配置与工具实践

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

MySQL root密码重置:跳过权限表与认证插件兼容指南

发布时间:2026/9/18 23:17:33
MySQL root密码重置:跳过权限表与认证插件兼容指南 接手一台跑了三年的测试库交接清单上 root 密码那一栏写着见运维群公告而那条公告早被后来的消息刷没了。这种事在中小团队里太常见了一台机器换过两三个负责人密码改过四五次最后一次改完还没人记下来。这时候你能靠的不是问人而是自己把 MySQL 的 root 密码重置掉。可真动手才会发现这件事看起来只有一行命令实际操作里能卡住人的地方多得离谱——5.7 和 8.0 的语句不一样Ubuntu 上用 apt 装的 MySQL 默认根本走的是 socket 认证不是密码认证容器里的 root 密码只在初始化那一次生效改完之后老版本的 Navicat 又报认证插件加载不了。这篇内容就是把MySQL 修改 root 用户密码这件事按真实场景拆开讲清楚你还能连上数据库时怎么改、连不上了怎么救、不同部署形态下命令差在哪里、密码明明改对了却登不上是什么原因、重置完之后的收尾和长期治理该怎么做。写给谁看刚接手服务器的新人、被密码问题卡过半夜的运维、以及想搞明白为什么这条命令在别人的机器上能跑在我这儿不行的后端同学。全文的命令我都标注了适用版本遇到版本强相关的地方会明确说出来照着抄之前先确认一下自己的 MySQL 版本号。1. root 密码的三类场景先分清你落在哪一档动手之前最忌讳的就是直接复制一条网上搜来的命令粘进去。改 root 密码这件事有三种完全不同的处境对应的操作链路差别很大而且第三种情况下你要是用错了方法可能把本来还能救的库彻底搞成起不来的状态。所以第一步不是敲命令是判断自己现在处于哪一档。1.1 第一档能正常连上只是想换个密码这是最舒服的情况。你能用旧密码登录进去无论是通过mysql -uroot -p还是sudo mysql只要会话建立成功剩下的就是一条ALTER USER的事。这种场景下不需要重启服务、不需要动配置文件、不需要考虑跳过授权表改完立即生效最长不超过一秒钟。需要提醒的是改完密码之后你自己当前这个会话并不会被踢掉还是能继续操作。这一点经常让人产生误判——以为没生效其实只是当前连接还活着。想验证一定要另开一个终端重新连一次这是我最建议的验证方式。1.2 第二档连不上但 MySQL 服务本身是活的典型表现是ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)但你去systemctl status mysql一看服务运行得好好的端口也在监听。这种情况下数据库本身没问题是认证环节过不去实际原因往往有三种密码真的记错了、密码过期了、或者你连的主机和账号定义的主机对不上。这一档有个很重要的判断技巧换几种连法试一遍。用mysql -uroot -p走 socket 试一次用mysql -h127.0.0.1 -uroot -p走 TCP 试一次再用sudo mysql试一次。三种结果不同基本就能定位到是认证插件问题还是账号主机匹配问题后面第 5 章会展开讲。1.3 第三档服务根本起不来连 socket 都连不上看到Cant connect to local MySQL server through socket /var/run/mysqld/mysqld.sock或者systemctl status里明确显示 failed那就不是密码问题了得先让服务能起来。常见原因是磁盘写满、配置文件被改坏、数据目录权限不对、或者 InnoDB 的 redo 日志损坏。这种时候硬去改密码是没意义的服务起不来的情况下任何密码都连不上。判断方法很简单看错误日志tail -n 100 /var/log/mysql/error.logDebian 系在/var/log/mysql/error.log源码编译或者 RPM 装的通常在数据目录下的hostname.err。日志里如果全是 InnoDB 相关的报错那就先修服务等能用--skip-grant-tables起起来之后再回到密码重置的流程。下面这张表是我自己排查时会走的判断路径你可以对照一下现象大概率原因第一步动作能连上只想换密码无直接ALTER USER报 1045服务正常密码错 / 主机不匹配 / 插件不对换 socket、TCP、sudo 三种连法对比报 1820服务正常密码过期用ALTER USER重设密码报 2059客户端报插件加载失败客户端太老不认caching_sha2_password改认证插件服务 failedsocket 连不上不是密码问题先看 error log把这三档分清楚后面就不会出现明明照着教程做了却越弄越乱的情况。2. 还记得密码时三种改法的取舍与坑能连上的情况下改密码本身不难难的是选对写法并且知道每种写法背后发生了什么。我见过太多人把 5.6 时代的SET PASSWORD PASSWORD(xxx)粘到 8.0 上然后对着FUNCTION mysql.PASSWORD does not exist的报错发愣。这一章把常用写法和它们的边界讲清楚。2.1 ALTER USER 是现在唯一值得背下来的写法从 MySQL 5.7.6 开始官方就明确推荐用ALTER USER来管理账号密码8.0 之后这就是标准答案。语法很简单ALTER USER rootlocalhost IDENTIFIED BY YourNewPass_2024!;如果你明确想让这个账号用某个特定认证插件可以写成ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY YourNewPass_2024!;这里IDENTIFIED BY和IDENTIFIED WITH ... BY的区别很关键。前者用的是账号当前认证插件或者系统默认插件8.0 默认是caching_sha2_password后者强制指定插件8.0 里写mysql_native_password会有个副作用——这个插件在 8.0 是内置但可禁用的到 8.4 默认就是关闭状态你得先在配置里把它打开才能用。所以除非你的老客户端确实连不上否则我不建议养成随手指定mysql_native_password的习惯这是给自己埋版本升级的债。还有一点ALTER USER里的主机部分必须写全。rootlocalhost和root%是两个完全不同的账号改错了账号就等于没改。怎么确认用SELECT user, host, plugin FROM mysql.user WHERE userroot;看一眼有几个就改几个别猜。2.2 SET PASSWORD 和 mysqladmin 什么时候还能用SET PASSWORD FOR rootlocalhost YourNewPass_2024!;在 5.7.6 到 8.0 之间都还能用本质上是ALTER USER的简写形式。它的好处是短坏处是只改密码不碰插件也没有IDENTIFIED WITH那种精细控制。我一般在临时脚本里用它日常改密码还是用ALTER USER。mysqladmin是另一条路mysqladmin -uroot -p password这条命令会先让你输旧密码然后提示你输两遍新密码。好处是新密码不会出现在 shell 历史里也不容易出现在ps的进程列表里。缺点是它会弹一条Warning: Using a password on the command line interface can be insecure的提示如果你把旧密码写在命令行里而且不同版本对它的处理有细微差别。如果只是想快速改一下这条命令是可以用的但我不会把它写进自动化脚本。顺便说一句如果你非要图省事绝对不要把密码直接写在命令行参数里比如mysql -uroot -pMyPass123。密码会出现在history里也会被同机器上的其他用户通过ps aux看到。我在一次内部安全自查里就见过生产机器上history里躺着 root 明文密码的情况那台机器上还有三个外包账号。2.3 改完立刻又登不上三个高频原因第一种当前会话没断误以为没生效。前面提过重新开终端验证。第二种改的是root%你连的却是 localhost。MySQL 的主机匹配规则是就近匹配localhost走 socket 并且优先匹配rootlocalhost-h127.0.0.1走 TCP 匹配127.0.0.1或%-h真实IP匹配对应 IP 或%。所以你把root%的密码改了用mysql -uroot -p无 -h走 socket连的时候用的还是rootlocalhost那一条记录密码当然还是旧的。这个坑非常隐蔽我第一次遇到的时候排查了快一个小时。第三种你上一秒改了密码下一面应用侧报Access denied。这不是数据库的问题是连接池还持有旧密码建立的连接或者应用的配置文件里写的是旧密码没更新。数据库侧改密码不会主动断掉已有连接所以现象是新连接失败、老连接还能用看着特别迷惑。处理办法要么改完配置重启应用要么在数据库侧主动 kill 掉旧连接。3. 忘记密码跳过授权表这条路的完整链路忘了密码就得走跳过权限表这条路。网上教程一大堆但大部分只给了命令没给理由遇到 8.0 就直接失效。这一章把原理和两个版本的操作链路都讲清楚。3.1 skip-grant-tables 到底跳过了什么--skip-grant-tables的作用是让 MySQL 启动时不加载权限表也就是mysql.user、mysql.db这些表里的授权信息在启动阶段不被读取。后果是任何人、任何密码都能以任意账号连进来权限校验形同虚设。正因为如此你必须同时加上--skip-networking把网络监听关掉只允许本机 socket 连接否则重置的这十几分钟里整个数据库是对外裸奔的。这里有个 8.0 的变化要注意官方文档里提到启用跳过权限表的时候网络监听可能被一并关闭不同小版本行为略有差异。我自己的做法是无论如何都显式加上--skip-networking不依赖默认行为这样跨版本都稳。还有一个容易被忽略的点跳过权限表模式下连接进来的是匿名的超级权限但权限系统没有加载所以像GRANT这类语句是不能用的。这也是为什么必须先执行一次FLUSH PRIVILEGES;才能继续用ALTER USER——这条命令会让服务器重新加载权限表把权限系统激活。3.2 5.7 和 8.0 的重置链路差异先停服务。Debian/Ubuntu 系sudo systemctl stop mysqlRHEL/CentOS 系服务名可能是mysqldsudo systemctl stop mysqld然后手动启动并跳过权限表注意不要用 systemctl 加参数直接跑 mysqld 二进制sudo mysqld_safe --skip-grant-tables --skip-networking 或者更干净的做法用 mysqld 直接跑日志重定向到文件方便排错sudo mysqld --skip-grant-tables --skip-networking --usermysql 起来之后另开终端连进去mysql -urootMySQL 5.7 的写法FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY YourNewPass_2024!;如果你的 5.7 版本比较老5.7.5 之前authentication_string字段的逻辑不一样可以直接更新表UPDATE mysql.user SET authentication_string PASSWORD(YourNewPass_2024!) WHERE User root AND Host localhost; FLUSH PRIVILEGES;MySQL 8.0 的写法FLUSH PRIVILEGES; ALTER USER rootlocalhost IDENTIFIED BY YourNewPass_2024!;注意 8.0 里PASSWORD()函数已经被移除了mysql.user表也换成了视图UPDATE mysql.user这条路在 8.0 上走不通。如果你在网上看到有人让你在 8.0 里UPDATE mysql.user SET password...直接跳过那是 5.5 时代的写法。改完之后杀掉刚才手工启动的 mysqld 进程再用正常方式启动服务sudo mysqladmin -uroot -p shutdown sudo systemctl start mysql3.3 init-file 这条更稳的路--skip-grant-tables这条路能走通但它有个毛病整个过程中权限校验是关闭的你多敲错一条语句就可能把权限表改乱。更稳妥的做法是用--init-file参数让 MySQL 在启动阶段就执行一个 SQL 文件文件里放明文的重置语句。准备一个文件比如/tmp/reset.sql内容只有一行ALTER USER rootlocalhost IDENTIFIED BY YourNewPass_2024!;然后这样启动sudo mysqld --init-file/tmp/reset.sql --usermysql 服务器启动完成后这个文件里的语句已经执行过了root 密码就是新的。这条路的优点是全程权限系统正常工作不需要FLUSH PRIVILEGES也不会出现权限表被中间环节改乱的风险。我用在自动化脚本里做密码轮换时基本都是走这条。几个必须注意的细节文件必须能被 mysql 运行用户读到权限设成600并 chown 给 mysql文件里除了这条 SQL 不要写别的东西MySQL 8.0 读这个文件时不接受 BOM 头所以用编辑器保存时确认编码是纯 UTF-8 无 BOMWindows 上用记事本存过再传到服务器最容易出这个问题症状是文件看起来没毛病但密码就是没改。改完之后记得把文件删掉里面是明文密码。3.4 收尾动作别漏重置完成之后有几个动作是老手会做、新手经常漏的。第一确认临时启动的进程已经被杀掉用ps aux | grep mysqld看一眼别出现两个 mysqld 抢同一个数据目录的情况那种情况下的报错信息非常误导人。第二确认服务是正常方式启动的systemctl status mysql显示 active 且没有加载多余参数。第三把reset.sql删掉。第四立刻用新密码登录验证一次并且顺手检查一下mysql.user里 root 的 host 记录是不是你预期的那些。4. 部署形态不同命令能差出一条街同样叫MySQL 改 root 密码Linux 包管理装的、Windows 上跑的、容器里起的操作方式完全不一样。这一章按部署形态分别说。4.1 Linux 包安装先搞清楚是不是 socket 认证这是最容易让人迷惑的一种情况。用apt install mysql-server装出来的 MySQLroot 账号默认用的是auth_socket认证插件意思是数据库直接拿操作系统的用户名来判断身份。所以你在 Ubuntu 上sudo mysql能直接进去一行密码都不用输但你换成mysql -uroot -p随便输个密码就是进不去。这时候你会发现网上所有的改密码教程对你都没用因为你的账号压根没有密码。正确做法是先以sudo mysql进去然后明确把认证插件换掉ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY YourNewPass_2024!; FLUSH PRIVILEGES;执行完之后mysql -uroot -p才能用密码登录。要提醒的是在 8.0 上这个做法的副作用是 root 从此走密码认证sudo mysql免密登录就没了。如果你更看重免密登录的便利性可以反过来把插件设回 socketALTER USER rootlocalhost IDENTIFIED WITH auth_socket;我个人在本地开发机上倾向于保留 socket 认证因为本地没有暴露风险而且不用记密码在服务器上一律改成密码认证并且改完之后立刻做一轮权限收敛。至于 systemd 环境下的服务控制主要是记住不同发行版的服务名差异Debian 系是mysqlRHEL 系是mysqldsystemctl restart之前先用systemctl list-units | grep -i mysql确认一下名字能省掉很多命令没错但服务找不到的困惑。4.2 Windows服务名、my.ini 和 init-file 的路径问题Windows 上重置密码的思路和 Linux 一致但细节上有三个容易踩的地方。第一是服务控制用管理员权限的 CMDnet stop MySQL80 net start MySQL80服务名不一定是MySQL80用sc query state all | findstr /I mysql查一下实际的名称。第二是通过--init-file启动时路径里的反斜杠和空格要处理最稳的写法是把 SQL 文件放在没有空格的短路径下比如C:\mysqlreset\reset.sql启动命令写成C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe --init-fileC:\mysqlreset\reset.sql --console--console是让日志输出到当前窗口方便看有没有报错。第三点也是最坑的一点Windows 上启动 mysqld 时如果没指定--defaults-file它会去按内置顺序查找 my.ini可能读到的配置文件和你以为的那个不是同一个导致加上去的参数被忽略。排查这个问题的方法是启动时带上--verbose --help | findstr defaults-file之类的方式确认它读了哪个配置文件或者干脆在命令行里显式指定--defaults-fileC:\ProgramData\MySQL\MySQL Server 8.0\my.ini。4.3 容器环境变量只在初始化那一次算数用 Docker 起 MySQL 的人最容易踩的坑就是这个。MYSQL_ROOT_PASSWORD这个环境变量只在数据目录为空、容器第一次初始化的时候生效。如果你的容器已经跑了一段时间你把 compose 文件里的密码改了然后docker-compose up -d密码是绝对不会变的因为初始化流程不会重跑。正确的改法是进容器操作docker exec -it mysql8 mysql -uroot -p输旧密码进去之后正常执行ALTER USERALTER USER rootlocalhost IDENTIFIED BY YourNewPass_2024!;如果你连旧密码也忘了就要先改配置加--skip-grant-tables或者挂一个 init-file 进去重启容器改完再改回来。还有一种情况是你希望 root 允许从容器外部连接那需要MYSQL_ROOT_HOST%这个环境变量——同样它也只在初始化时生效。已经初始化过的容器要开放远程访问得手动建账号或者改 host 记录。这里有个小经验容器化的 MySQL 我一般会在初始化脚本的目录里额外放一个02-alter-root.sql把密码以环境变量的方式引用进去这样每次重建环境都是同一套逻辑不会出现我这台环境能连、他那台连不上的问题。5. 密码明明改对了为什么还是登不上这一章是我认为最有价值的部分因为这类问题最耗时间而且报错信息往往指向错误的方向。5.1 validate_password 插件把你的新密码拦下来了执行ALTER USER时如果报ERROR 1819 (HY000): Your password does not satisfy the current policy requirements那不是命令写错了是你的新密码太弱。MySQL 的密码强度校验由validate_password组件负责它有一组策略参数长度、大小写、数字、特殊字符。默认中等策略下密码至少得 8 位还得包含数字、大小写字母和特殊字符。查看当前策略SHOW VARIABLES LIKE validate_password%;如果确实要临时放宽比如内网测试环境可以这样调SET GLOBAL validate_password.policy LOW; SET GLOBAL validate_password.length 6;注意这里的参数名在不同版本里有差别5.7 里是validate_password_policy这种下划线风格8.0 之后改成了validate_password.policy这种点号风格。另外 MySQL 8.4 把validate_password组件默认开启了所以从 8.0 升级到 8.4 之后原来能用的简单密码会突然报错这个变化值得提前知道。我的建议是生产环境别去关它老老实实设一个强密码只有当你在批量初始化一堆临时实例、脚本里用统一简单密码的时候才考虑临时关掉改完立刻改回来。5.2 caching_sha2_password 和老客户端的兼容问题这是 8.0 之后最常见的一类密码对了但登不上。现象是命令行mysql客户端能连上但 Navicat、老版本 JDBC 驱动、老版本 PHP 的 mysqli 报类似Authentication plugin caching_sha2_password cannot be loaded或者Unable to load authentication plugin的错。原因很直白MySQL 8.0 把默认认证插件从mysql_native_password换成了caching_sha2_password而这个新插件需要客户端支持对应的握手流程老客户端不认。解决办法有两个选哪个取决于你能不能升级客户端。能升级客户端的话优先升级这是长期正确的路。不能升级的话只能把账号的插件换回老的ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY YourNewPass_2024!; FLUSH PRIVILEGES;这里要说清楚一个版本变化mysql_native_password插件在 8.0 里是内置的但到了 8.4 默认被禁用你必须在配置文件里显式加mysql_native_passwordON才能用。也就是说为了兼容老客户端而改用这个插件的做法本质上是在给未来的版本升级制造障碍。如果条件允许我倾向于只在必要的账号上用老插件其他账号保持默认。5.3 密码过期引发的 1820 报错ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.这个报错的意思是账号密码过期了在你重设之前不允许执行任何语句。触发它的情况有两种一是有人显式设置了PASSWORD EXPIRE二是系统变量default_password_lifetime设置了自动过期天数。排查方法SELECT user, host, password_expired, password_lifetime FROM mysql.user WHERE userroot; SHOW VARIABLES LIKE default_password_lifetime;password_expired显示Y就是这个原因。解决办法就是按提示执行ALTER USER rootlocalhost IDENTIFIED BY YourNewPass_2024!;改完之后这个标志位会自动清掉。如果你想彻底关掉自动过期可以改全局变量SET GLOBAL default_password_lifetime 0;顺便提醒在做初始化脚本的时候如果脚本里设了密码但没设PASSWORD EXPIRE是不会有过期问题的反过来如果你接手的是一个被安全加固过的环境root 密码大概率是设了过期的这一点要提前有数。5.4 引号、特殊字符和文件名里的坑这类问题不算常见但一旦遇到特别浪费时间。密码里带$、!、反引号、单引号的时候在 shell 里执行的 SQL 语句会被 shell 先解释一遍。比如你的密码是Pass$123!写在双引号里!可能被历史扩展吃掉$1可能被当成变量。最稳的做法是密码里只用字母、数字和#%^*_-这类安全字符或者把 SQL 写进文件用mysql file.sql执行绕开 shell 的转义。还有一个跟第 3 章呼应的坑--init-file指定的文件里如果 SQL 语句末尾少了分号MySQL 会报语法错误然后启动失败但错误信息可能只写在你没注意的日志里你看到的现象就是服务起不来。所以手工启动 mysqld 的时候日志一定要盯着看。6. 重置完成之后验证、收尾和长期治理密码改完不等于事情结束。我见过太多人改完就关窗口结果第二天应用挂掉回头查才发现改的是错误的账号或者改完密码写进了配置文件权限是 644。6.1 一套五步自检清单第一重新开终端用新密码登录一次。走 socket 和走 TCP 各试一次命令分别是mysql -uroot -p和mysql -h127.0.0.1 -uroot -p两次都成功才算真的没问题。第二确认账号信息符合预期SELECT user, host, plugin, password_expired FROM mysql.user WHERE userroot;第三用应用侧实际使用的连接方式验证一次——很多时候 root 能连不代表应用用的那个账号能连。第四检查mysql.user里有没有不该存在的匿名账号或者空用户名的记录SELECT user, host FROM mysql.user WHERE user;如果查出东西来那是安全隐患应该删掉。第五确认没有把明文密码留在history、临时文件或者配置文件里。6.2 把密码写进配置文件这件事得算账应用连数据库当然需要密码但把密码硬编码进代码或者明文配置文件是很常见的坏习惯。几个相对稳妥的做法把密码放在环境变量里通过容器编排或者服务管理工具注入或者给配置文件单独设权限chmod 600并且属主是运行服务的用户虽然明文但至少不是全员可读再或者用--defaults-extra-file指定一个只有运行用户能读的凭据文件来跑客户端命令mysql --defaults-extra-file/etc/mysql/backup.cnf -e SHOW DATABASES;这个backup.cnf里写[client]段的user和password权限 600。做备份脚本的时候我基本都这么干比在命令行里传密码干净得多。6.3 长期看别让所有东西都依赖 root 一个账号这是我最想强调的一点也是很多人做完密码重置之后就忘了的事。整个系统所有脚本、所有应用、所有备份任务都用 root 连数据库后果是想换密码的时候要同步改十几个地方漏一个就挂一个出了问题没法追责日志里全是 root一旦密码泄露等于整个数据库连同所有库表的权限全部交出去。正确的做法是按用途拆账号。备份任务给一个只有SELECT, LOCK TABLES, SHOW VIEW, TRIGGER权限的账号应用给一个只对特定库有增删改查权限的账号运维自己的个人账号单独建需要什么权限给什么权限。root 只在真正需要改结构、调参数的时候从本机 socket 登录使用。这么拆完之后改 root 密码就变成一件只在极少数场景下才需要做的事风险面一下就小了很多。建账号的时候记得顺手限制来源主机CREATE USER app_user10.0.1.% IDENTIFIED BY StrongPass_2024!; GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO app_user10.0.1.%; FLUSH PRIVILEGES;把%换成具体的网段比用app_user%安全得多而且以后查哪个账号从哪来的时候一眼就清楚。最后分享一个我自己用了很久的小习惯每次改完数据库密码我会在团队的密码管理工具里同时更新三条记录——数据库密码本身、密码最后修改时间、以及这次改动的触发原因是定期轮换还是应急重置。看起来是多余的仪式感但等到半年后有人问这个密码什么时候换过、为什么换你能在三秒内答上来而不是翻一堆聊天记录。密码这东西改一次不难难的是三个月后还有人知道它为什么是现在这个值。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号