前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[MYSQL] 记录mysql密码 (临时修改密码, 然后改回原来的密码)

[MYSQL] 记录mysql密码 (临时修改密码, 然后改回原来的密码)

原创
作者头像
大大刺猬
发布2024-07-18 17:40:52
1400
发布2024-07-18 17:40:52
举报
文章被收录于专栏:大大刺猬

导读

有这么一个需求: 我们要临时修改mysql部分账号的密码. 等过一段时间就修改回来.

比如: 我把账号临时给某个人使用, 肯定是修改为一个随机密码给它, 等过一段时间收回来再修改回原来的密码. 我们并不知道原始密码是多少. (mysql.user表中的authentication_string是存储的加密之后的密码)

分析

我们导出数据的时候, 是可能包含mysql.user表的. Mysql的账号只是其中的几行数据而已. 所以最先想到的方法就是 数据导出和导入. 只导mysql.user表. 并且按照每个用户一行数据(参数:--skip-extended-insert)即可, 但是有丢丢麻烦. 就这破事还得重新导入数据. 而且不安全, 毕竟是直接修改mysql.user表的数据.(还可能导致主从1396报错)

那就只能使用官方的ALTER USER来修改密码了. 好在官方的alter密码是支持使用加密后的密码(binlog里面也是记录的这种格式的SQL, 毕竟不能记录明文啊). 比如

代码语言:sql
复制
ALTER USER 'jeffrey'@'localhost'
  IDENTIFIED WITH mysql_native_password
             AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';

那我们可以使用如下命令来得到相关的改密SQL

代码语言:sql
复制
select concat("alter user `",user,"`@`",host,"` identified with mysql_native_password as \"",authentication_string,"\";") from mysql.user where plugin='mysql_native_password' ;

这是mysql_native_password的方式, 那么caching_sha2_password 咋办呢? 那是二进制的方式啊....

带胶布, 我们可以将二进制的密码转为16进制. mysql是能识别16进制的. 所以就可以通过如下的SQL查询出改密SQL

代码语言:sql
复制
select concat("alter user `",user,"`@`",host,"` identified with caching_sha2_password as 0x",hex(authentication_string),";") from mysql.user where plugin='caching_sha2_password' ;

测试一下, 确实是可以的:

参考:

https://dev.mysql.com/doc/refman/8.0/en/alter-user.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 分析
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档