MYSQL数据库误赋权引发的血案

赋权操作是DB最常规操作,只增加一个赋权,这都有坑吗?

帮同事处理mysql赋权引发的故障案例,有代表性,避坑!!!

11:03 接到求助,系统完全打不开了。

信息获取。

Q1:哪个系统?

xxx系统。

Q2:什么报错?

Access denied by for user ‘pqc_doa_up’@’172.26.154.68’(using password:YES)

Q3:功能之前可以吗?

功能之前一直都可以

Q4:什么时候出现异常?

大概今天早上11:00

Q5:做了哪些变更或者操作?

没有做变更,…就早上给用户赋了一个权限

grant select on help_topic to 'pqc_doa_up'@'172.26.154.%';

 定位根本原因,删除异常用户,系统恢复正常!

排查过程回顾:

#查看报错用户

# 查看报错用户权限

# 把同名账号 pqc_doa_up@'172.26.154.%' 删除 (这里用户删除后,系统本应立即恢复正常,但怕权限遗漏,又把删除的用户权限全部重新赋权给保留用户,这导致又一次触发bug,GRANT SELECT ON `mysql`.`help_topic` TO 'pqc_doa_up'@'172.26.154.%' 

mysql> drop user pqc_doa_up@'172.26.154.%';Query OK, 0 rows affected (0.13 sec)

#怕权限可能遗漏,把提前备份的同名账号 pqc_doa_up@'172.26.154.%'备份的权限赋权给'pqc_doa_up'@'%'。(居然隐藏着一条 GRANT SELECT ON `mysql`.`help_topic` TO 'pqc_doa_up'@'172.26.154.%'

#至此,第一次通知检点,系统依旧无法访问,相同报错

# 再次查看pqc_doa_up用户的情况(奇怪之前明明删除了 pqc_doa_up@'172.26.154.%',这个用户怎么又出现了,思考片刻后,再次删除pqc_doa_up@'172.26.154.%')

mysql> drop user pqc_doa_up@'172.26.154.%';

Query OK, 0 rows affected (0.01 sec)

# 再次确认用户情况,确认删除成功,再次通知系统检点,反馈系统恢复正常

mysql> select User,Host,authentication_string,password from mysql.user where user='pqc_doa_up';

异常原因

原理扩展

总结 

   1、mysql版本8.x以下在用户新增授权时,需明确授权对象(user,host),不可出现对不存在的用户(user,host)授权,否则可能出现系统业务用户无法通过登录认证,引发异常。

   2、不同版本mysql对于赋权不存在在用户(user,host)处理机制不同

   5.6版本赋权执行成功,默认创建密码为空在用户(user,host)

   5.7版本赋权执行成功,默认创建密码为空在用户(user,host),抛出告警

   8.x版本授权执行失败,不会创建用户(user,host)

猜你喜欢

转载自blog.csdn.net/zhang123456456/article/details/129999864