mysql验证机制整理

MySQL 认证机制学习笔记

一、认证插件基本概念

  1. MySQL 使用认证插件决定用户登录验证方式
  2. 常见插件类型:
    • auth_socket (unix_socket)
    • mysql_native_password
    • caching_sha2_password (MySQL 8.0+)

二、auth_socket 插件

特点

  • 使用系统用户权限认证
  • 无需密码
  • 仅限本地访问
  • Ubuntu/Debian 系统默认

检查方法

1
SELECT user, plugin FROM mysql.user WHERE user = 'root';

输出含 auth_socketunix_socket 即使用该方式

登录方式

1
sudo mysql  # 直接登录

三、mysql_native_password 插件

特点

  • 传统密码认证
  • 支持远程连接
  • 兼容性好

设置方法

1
2
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
FLUSH PRIVILEGES;

登录方式

1
mysql -u root -p

四、caching_sha2_password 插件

特点

  • MySQL 8.0+ 默认
  • SHA-256 加密
  • 安全性更高
  • 部分旧客户端不兼容

设置方法

1
2
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '密码';
FLUSH PRIVILEGES;

五、认证方式切换

切换到密码认证

1
2
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
FLUSH PRIVILEGES;

切换回 socket 认证

1
2
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
FLUSH PRIVILEGES;

六、常见问题解决方案

问题1:mysql -u root -p 无法登录

原因:使用 auth_socket 认证
解决方案:

  1. 使用 sudo mysql 登录
  2. 或改为密码认证:
    1
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

问题2:启用远程访问

  1. 改为密码认证
  2. 创建远程用户:
    1
    2
    3
    CREATE USER 'root'@'%' IDENTIFIED BY '密码';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
    FLUSH PRIVILEGES;
  3. 修改配置文件:
    1
    bind-address = 0.0.0.0
  4. 重启服务:
    1
    sudo systemctl restart mysql

七、认证方式对比表

特性 auth_socket mysql_native_password caching_sha2_password
需要密码
本地访问 支持 支持 支持
远程访问 不支持 支持 支持
安全性 最高
兼容性 Ubuntu 默认 全版本兼容 MySQL 8.0+

八、最佳实践建议

  1. 开发环境:保持 auth_socket,使用 sudo mysql
  2. 生产环境:使用 caching_sha2_password (MySQL 8.0+)
  3. 传统应用:使用 mysql_native_password 确保兼容性

九、常用命令速查

  1. 查看用户认证方式:
    1
    SELECT user, plugin FROM mysql.user;
  2. 修改密码:
    1
    ALTER USER '用户名'@'主机' IDENTIFIED BY '新密码';
  3. 刷新权限:
    1
    FLUSH PRIVILEGES;

十、一个神奇的东西

问:为什么我输入mysql时不行,但是输入sudo mysql的时候可以呢?难道不都是用的auth_socket验证的吗?

答:测试了一下,发现直接输入mysql的时候,其实是用当前用户登录(平时在终端打开的时候,都不是root用户),所以相当于验证的用户出现问题了,如果你先输入sudo su,进入root用户后,在输入mysql后就OK了hh


mysql验证机制整理
https://zhangqi.online/2025/06/17/mysql验证机制整理/
作者
张琦
发布于
2025年6月17日
许可协议