从输入任何密码都可以直接登录 MySQL 的 root 用户谈 auth_socket 验证插件---发表到爱可生开源社区

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 一线的工程师反映了一个奇怪的现象,刚刚从 MySQL 官网上下载了一个 MySQL 5.7.31,安装完成后,发现使用任何密码都能登陆 MySQL,修改密码也不管用,重新启动 MySQL 也不能解决。

现象

一线的工程师反映了一个奇怪的现象,刚刚从 MySQL 官网上下载了一个 MySQL 5.7.31,安装完成后,发现使用任何密码都能登陆 MySQL,修改密码也不管用,重新启动 MySQL 也不能解决。


分析

怀疑使用了 --skip-grant-tables, 使用 mysqld --print-defaults 检查,没有发现。

检查登陆用户,都是 root@localhost,说明和 proxy user 没有关系。


mysql> select user(),current_user();
+----------------+----------------+
| user()         | current_user() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.01 sec)


使用 mysql --print-defaults 检查客户端是否设置默认的用户和密码,没有发现。

检查数据库中的用户和密码的相关字段:


mysql> select user,host,authentication_string from mysql.user;
+------------------+-----------+------------------------------------------------------------------------+
| user             | host      | authentication_string                                                  |
+------------------+-----------+------------------------------------------------------------------------+
| lisi             | %         | *52BCD17AD903BEC378139B11966C9B91AC4DED7C |
| mysql.session    | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys        | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root             | localhost | *1840214DE27E4E262F5D981E13317691BA886B76 |
+------------------+-----------+------------------------------------------------------------------------+
5 rows in set (0.01 sec)


发现一切都正常,再检查 plugin 字段,发现只有 root 用户是 auth_socket ,其它的用户都是 mysql_native_password,问题可能就出在这儿。


mysql> select user,host,plugin  from mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| lisi             | %         | mysql_native_password |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| root             | localhost | auth_socket           |
+------------------+-----------+-----------------------+
5 rows in set (0.02 sec)


问题解决

对 auth_socket 验证插件不了解,感觉是这个插件不安全,使用下面的命令修改后,问题解决:


update user set plugin="mysql_native_password" where user='root';


auth_socket 验证插件的使用场景

问题解决后,又仔细研究了一下 auth_socket 这个插件,发现这种验证方式有以下特点:


首先,这种验证方式不要求输入密码,即使输入了密码也不验证。这个特点让很多人觉得很不安全,实际仔细研究一下这种方式,发现还是相当安全的,因为它有另外两个限制;

只能用 UNIX 的 socket 方式登陆,这就保证了只能本地登陆,用户在使用这种登陆方式时已经通过了操作系统的安全验证;

操作系统的用户和 MySQL 数据库的用户名必须一致,例如你要登陆 MySQL 的 root 用户,必须用操作系统的 root

用户登陆。

auth_socket 这个插件因为有这些特点,它很适合我们在系统投产前进行安装调试的时候使用,而且也有相当的安全性,因为系统投产前通常经常同时使用操作系统的 root 用户和 MySQL 的 root 用户。当我们在系统投产后,操作系统的 root 用户和 MySQL 的 root 用户就不能随便使用了,这时可以换成其它的验证方式,可以使用下面的命令进行切换:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
canal 关系型数据库 MySQL
MySQL 自动同步开源工具
本文介绍了几种开源工具用于实现 MySQL 数据库的自动同步。
|
10月前
|
关系型数据库 MySQL Linux
CentOS 7系统下详细安装MySQL 5.7的步骤:包括密码配置、字符集配置、远程连接配置
以上就是在CentOS 7系统下安装MySQL 5.7的详细步骤。希望这个指南能帮助你顺利完成安装。
2520 26
|
9月前
|
Ubuntu 关系型数据库 MySQL
mysql8.0安装初始化不需要设定root密码?
uubntu 的mysql安装完成后无法设定root密码
515 10
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
460 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
691 4
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
278 2
zabbix agent集成percona监控MySQL的插件实战案例
|
SQL JSON 关系型数据库
MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
【10月更文挑战第3天】MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
700 5
|
存储 关系型数据库 MySQL
【赵渝强老师】解决MySQL丢失root用户密码
本文介绍了MySQL数据库中用户密码存储的变化,以及如何通过特殊方法重置root用户的密码。从MySQL 5.7版本开始,密码字段由“password”改为“authentication_string”。文章详细列出了重置密码的步骤,并提供了相关代码示例和视频教程。
429 0

推荐镜像

更多