mysql - 免密登录(使用 auth_socket 插件)

理论介绍

auth_socket 是什么

是一种 mysql 的加密方式。允许用户使用系统(Unix/Linux)账号登录 MySQL,而不使用密码

即当 pluginauth_socket 时:

  • MySQL 不管 authentication_string(密码字段)
  • 登录验证依赖于操作系统的当前用户身份(例如,使用 sudo mysqlroot 用户身份,mysql 就是当前用户身份)

使用注意点

  1. auth_socket 工作原理是借助本地套接字与 Mysql 通讯,因此必须在本机上操作。因此 % 这个 host 没有意义,推荐写为 localhost
  2. auth_socket 的使用前提:当前用户与 mysql 用户(用户加密方式用的是 auth_socket)同名
  3. 对于 auth_socket 插件而言,确实几乎没有必要指定 -u(如果你不是那个系统用户,写 -u 没意义,反正一定会拒绝;如果你就是那个系统用户,-u 可省略)

使用方法

需求一:创建一个用户,加密方式使用 auth_socket

1
2
3
4
5
6
7
8
9
10
# 【不推荐host为`%`,因为auth_socket使用unix本地套接字通讯,仅支持`localhost`】但是也不会报错,`%`仅能匹配到`localhost`,不够优雅
# mysql> create user vagrant@'%' identified with auth_socket;
# Query OK, 0 rows affected (0.01 sec)

# 【推荐写法】`host` 指定为 `localhost`
mysql> create user vagrant@'localhost' identified with auth_socket;
Query OK, 0 rows affected (0.01 sec)

# 如何登录?当前登录用户是 `vagrant`
mysql -> 回车即可

需求二:将一个现有用户加密方式改为 auth_socket

1
2
3
4
5
mysql> alter user kay@'%' identified with auth_socket;
Query OK, 0 rows affected (0.01 sec)

# 如何登录?当前登录用户是 `kay`
mysql -> 回车即可

PS. 修改完毕之后,authentication_string 字段会被清空,因为 auth_socket 方式不需要密码。如下图

示意图