MySQL如何查看/监控/处理账号密码过期问题

这篇具有很好参考价值的文章主要介绍了MySQL如何查看/监控/处理账号密码过期问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySQL 8.0.x中,我们如果按安全规范配置了账号密码过期策略的话,那么如何查看账号密码还有多长时间就会过期;如何做好账号密码过期监控;以及提前及时处理账号密码过期问题就是DBA必须处理的一些事情。这里简单讨论一下这些事情。个人经验仅供参考,如有不足或错误的地方,敬请指正一二。这篇文章的具体测试环境为MySQL 8.0.35.

设置账号密码过期

一般系统变量default_password_lifetime控制着全局范围的账号密码过期时间。

mysql> show variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 180   |
+---------------------------+-------+
1 row in set (0.02 sec)

mysql> 

这个系统系统变量可以在my.cnf中设置。也可以在MySQL运行时设置并持久化。

SET PERSIST default_password_lifetime = 365;

你创建账号时可以指定账号密码过期使用默认的全局策略,也可以不指定,它也会使用全局的密码过期策略,如下所示, 下面两个SQL其实是等价的。

create user test2@'%' identified by random password ;
create user test2@'%' identified by random password password expire default;

另外,你也可以在创建账号时设置账号密码过期时间,如下所示,那么此过期时间会覆盖系统变量default_password_lifetime的值(优先级高于全局变量)。这个值也会记录到系统表mysql.user中password_lifetime中,如果创建用户时没有指定账号密码过期期限,而是使用全局策略,那么此时password_lifetime的值为NULL。

CREATE USER 'test'@'%' IDENTIFIED BY RANDOM PASSWORD PASSWORD EXPIRE INTERVAL 20 DAY;

手动设置账号密码过期

我们也可以手工设置账号密码过期,如下所示:

ALTER USER 'USER_NAME'@'HOSTNAME' PASSWORD EXPIRE;
ALTER USER 'USER_NAME'@'HOSTNAME' PASSWORD EXPIRE INTERVAL 90 DAY;

如果手工将一个账号手工设置为账号密码过期,那么系统表mysql.user中的password_expired会变为Y,而密码全局过期策略下过期的账号的字段password_expired则永远为N。这些细节不知你有没有注意过。

查询账号密码过期期限

根据MySQL密码过期策略,密码过期是自动的,并基于密码期限,对于给定帐户,密码期限是从其最近一次密码更改的日期和时间开始评估的。系统表为每个帐户指示上次更改其密码的时间(mysql.user表的password_last_changed字段值),如果密码的期限大于其允许的生存期,服务器会自动将密码视为在客户端连接时已过期。这适用于没有明确的手动设置密码过期的账户。

查看数据库中账号密码还有多久即将过期,可以使用下面这个SQL:

select user
     , host
     , plugin
     , password_expired
     , password_last_changed
     , if(ifnull(password_lifetime, CAST(@@default_password_lifetime as signed))<1,'NEVER',
       concat(
            cast(   ifnull(password_lifetime, @@default_password_lifetime) as signed)
          + cast(datediff(password_last_changed, now()) as signed), " days")) as 
       days_till_expires
from mysql.user;

或者使用下面优化调整过的SQL

--如果使用ALTER USER 'test'@'%' PASSWORD EXPIRE命令使账号密码过期,但是days_till_expires依然显示账号密码还有N天才过期。
select user
     , host
     , plugin
     , password_expired
     , password_last_changed
     , if(password_expired='Y','password_expired',
          if(ifnull(password_lifetime, CAST(@@default_password_lifetime as signed))<1,'NEVER',
          concat(
               cast(   ifnull(password_lifetime, @@default_password_lifetime) as signed)
             + cast(datediff(password_last_changed, now()) as signed), " days")))  
       as days_till_expires
from mysql.user;

监控账号密码过期

监控账号密码过期,我们可以使用python脚本监控MySQL账号密码过期问题,如果密码小于N(N可以是30,60)天即将过期,那么发出下面告警邮件:

处理即将密码过期账号

对于即将过期的账号密码,分两种情况:

1:password_lifetime为null,default_password_lifetime不为null的情况,重置密码后,它的过期期限变为default_password_lifetime的值。

mysql> alter user zbx_monitor@'localhost' identified by "*******";
Query OK, 0 rows affected (0.04 sec)

2:password_lifetime不为null的情况(手工设置密码过期期限的情况),那么你可以有以下几种方式来处理

mysql> alter user test@'%' identified by "******";
Query OK, 0 rows affected (0.01 sec)

此时password_lifetime会变为之前指定的过期期限,当然,你也可以在修改账号密码时指定过期期限。

#不修改账号密码

mysql> alter user test@'%'  password expire interval 180 day;
Query OK, 0 rows affected (0.01 sec)

#修改账号密码

mysql> alter user test@'%' identified by "******" password expire interval 190 day;
Query OK, 0 rows affected (0.06 sec)

账号密码过期后,依然能连接上MySQL,但是此时做任何操操作都会报ERROR 1820(HY000)错误,如下所示:

mysql> select * from dual;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> 

从 MySQL 8.0.14 开始,允许用户帐户拥有双重密码,指定为主密码和辅助密码。双密码功能可以在以下场景中无缝执行凭据更改:

  • 一个系统有大量的MySQL服务器,可能涉及复制。

  • 多个应用程序连接到不同的 MySQL 服务器。

  • 必须对应用程序用来连接服务器的一个或多个帐户定期更改凭据。

DBA如果经历过的,也许都知道有时候修改数据库账号密码是比较麻烦的事情,系统开发人员或系统Support人员会觉得比较麻烦,因为对于复杂系统,一不小心,账号密码配置出了差错或纰漏,可能会导致生产事故,另外,修改账号密码也会影响系统业务的可用性(可能需要短暂的停止应用系统服务...),所以对于定期修改账号密码,很多时候是名存实亡。因此要么不会修改数据库账号密码,要么按规范定期修改账号密码,也是使用相同的账号密码,并不会修改账户密码。

如果使用双密码,就可以更轻松地分阶段修改密码,无需密切合作,也无需停机。确实是一个很了不起的创新。其他数据库暂时还没有这种特性。

#建立新的主密码,保留当前密码作为辅助密码

ALTER USER 'test'@'%' IDENTIFIED BY '****' RETAIN CURRENT PASSWORD;

#等到应用程序切换密码后,丢弃旧密码(辅助密码)文章来源地址https://www.toymoban.com/news/detail-837783.html

ALTER USER 'test'@'%' DISCARD OLD PASSWORD;

到了这里,关于MySQL如何查看/监控/处理账号密码过期问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 查看svn账号密码

    参考他人链接:https://blog.csdn.net/Amnesiac666/article/details/121355958 窝的本地:C:UserslenovoAppDataRoamingSubversionauthsvn.simple 如果找不到直接搜索svn.simple(需要时间) 链接: https://pan.baidu.com/s/1RpSpZp04eSnAkvZXqsakqA 提取码: etng 复制这段内容后打开百度网盘手机App,操作更方便哦 解压将

    2024年02月15日
    浏览(37)
  • docker login 账号密码查看

    docker login 之后,会在 /root/.docker/config.json 中保存base64编码后的用户名和密码信息。 执行 sudo cat /root/.docker/config.json 打印文件内容,如下: 文件中 auth 的值就是账号信息,解码后就可以看到用户名和密码, 格式为 username:password​​ ,冒号前面就是用户名,后面是密码。 bas

    2024年02月11日
    浏览(62)
  • 用漏洞查看附近上网的宽带账号和密码(也适用于密码找回)

    此处略过搜索附件WiFi的IP地址,如果扫描到了IP地址,可以进行如下操作 1、进入CMD模式下, 先用Telnet连接路由器 ,如:键入下面命令:      telnet 192.168.1.1 2、 输入路由器账号和密码 ,这里可以用枚举法,也可以用一些软件和字典试试 3、进入路由器之后,可以输入以下命

    2024年02月06日
    浏览(44)
  • mysql+关掉密码过期

    mysql+关掉密码过期 要在MySQL中关闭密码过期功能,可以按照以下步骤进行操作: 登录到MySQL服务器。 使用管理员账户(如root)连接到数据库。 mysql -uroot -ppassword 运行以下命令来查看当前的密码过期设置: SHOW VARIABLES LIKE \\\'default_password_lifetime\\\'; 这将显示默认密码生存周期的值

    2024年02月02日
    浏览(35)
  • 无线路由器怎么查看宽带上网账号和密码?

    很多人并不会记录自己的宽带账号的密码,一般直接设置在原有的路由器中,此后就可以自动拨号,上网非常方便。但是如果购买新路由器或者我们需要将原有路由器恢复至出厂设置,需要重新设置的时候,就需要用到宽带账号密码。如果忘了宽带密码怎么办,打电话给运营

    2024年02月08日
    浏览(58)
  • 如何查看cookie过期时间

    要查看 cookie 的过期时间,您可以使用浏览器的开发者工具。具体操作步骤如下: 打开浏览器,并转到您希望查看 cookie 的网站。 按 F12 键打开浏览器的开发者工具。 在开发者工具的“调试工具”选项卡中,单击“存储”按钮。 在左侧的“网站数据”列表中,单击“Cookies”

    2024年02月11日
    浏览(48)
  • mysql用户可免密码登录问题处理解决

    参考文章:点击跳转 任意用户可登录MySQL数据库。如下面操作。会发现,此时登录后无法查看到正常的全部数据库,只能看到系统默认的测试数据库test和信息库infomation_schema。 正常登录该数据库,查看用户表,第四列里面,host为localhost,用户为空,密码为空。导致在本地登

    2024年02月13日
    浏览(45)
  • Prometheus监控添加监控mongodb+docker+MySQL8.0+服务器系统进程监控+域名过期时间监控

    环境: 192.168.1.144  Ubuntu系统已经部署好Prometheus监控部署教程请看本人前面的教程  192.168.1.140  centos7系统已安装docker+docker-compose 1、在被监控端以docker-compose方式安装mongodb mkdir /data/mangodb/ #创建mangodb的目录 cd /data/mangodb/ #进入目录下 2,写docker-compose.yaml文件 vim docker-compose.y

    2024年02月02日
    浏览(53)
  • mysql 8 修改账号密码

    cmd 运行(跳过密码), 运行完不要关闭 mysql bin 目录下登录,密码输入时,直接回车 1 关闭第一个cmd窗口,然后运行mysql 服务。 2 密码输入时,直接回车

    2024年03月08日
    浏览(32)
  • 【笔记】Python3|爬虫请求 CSRF-Token 时如何获取Token、Token过期、处理 CSRF-Token 需要注意的问题及示例

      CSRF-Token 机制是 Web 应用程序中常用的安全机制,它可以防止跨站请求伪造攻击,但会给爬虫造成一定的困扰。本文将介绍在使用 Python3 爬虫时, 处理 CSRF-Token 机制需要注意的问题及示例 。   在 Web 开发中,每次发送请求时,服务器都会生成一个 CSRF-Token。当用户访问

    2024年02月04日
    浏览(104)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包