auth_socket
的验证方式是:客户端通过启用SO_PEERCRED
选项的socket连接到mysql服务端,服务端从该socket检测运行该客户端的系统用户名是否为要登录的mysql用户名。若用户名相同,则登录,若不同,则拒绝。若用户名使用未启用SO_PEERCRED
选项的socket连接,也会拒绝。
SO_PEERCRED
是一个Unix域socket才能启用的选项,而Unix域socket只在本机通信时才会使用。所以,配置了auth_socket
的mysql用户无法通过mysql客户端远程登录,因为远程登录会启用TCP/IP socket。当然,既然叫Unix域,能使用这种socket的当然只有Linux和其他类Unix操作系统。启用该选项的socket,会向目标发送连接者的凭据信息(包括用户名)。mysql服务端获取该凭据并比对用户名是否相等以此决定是否允许登录。