MySQL安全部署指南/启用身份验证

第11章启用身份验证

当客户端连接到MySQL Server时,服务器使用客户端和客户端主机提供的用户名来从中选择来自的帐户行mysql.user桌子。服务器对客户端进行身份验证,从帐户行确定身份验证插件适用于客户端。服务器调用该插件来验证用户,并且插件将状态返回给服务器的状态,指示是否允许用户连接。

默认情况下,MySQL使用内置的mysql_native_password.身份验证插件,使用本机密码散列方法执行身份验证。为了更大的安全性,此部署使用SHA256_PASSWORD.auth_socket.用于用户身份验证的身份验证插件。

sha - 256认证

当用户帐户配置为使用SHA256_PASSWORD.插件,服务器使用SHA256_PASSWORD.插件使用SHA-256密码散列加密用户密码。此加密比使用MySQL本机认证更安全。密码哈希存储在插件中和Authentication_String.栏目mysql.user系统表。

服务器端SHA256_PASSWORD.Plugin内置在服务器中,不需要显式加载。因此,不需要服务器端配置来使用SHA256_PASSWORD.插件。

使用SHA256_PASSWORD.插件,您可以指定SHA256_PASSWORD.插件时创建新的用户帐户或您可以配置SHA256_PASSWORD.属性作为默认的身份验证插件default_authentication_plugin配置选项。在此部署中,SHA256_PASSWORD.创建用户帐户时,请指定插件。看第十三章,创建用户帐户

有关的更多信息SHA256_PASSWORD.插件,参见SHA-256可插拔认证。为讨论的优点和缺点SHA256_PASSWORD.插件,参见MySQL Server博客:使用SHA256_Password插件保护MySQL密码

套接字同行凭证身份验证

本节介绍如何启用服务器端auth_socket.身份验证插件,通过UNIX套接字文件验证从本地主机连接到MySQL Server的客户端。auth_socket.身份验证非常适合于必须严格限制访问的服务器管理用户帐户。

auth_socket.插件检查套接字用户名是否与客户端程序指定的MySQL用户名与服务器匹配。如果名称不匹配,则插件还会检查套接字用户名是否与指定的名称匹配Authentication_String.栏目mysql.user表行。如果匹配,插件允许连接。

例如,假设为命名的用户创建了MySQL帐户瓦莱丽谁将被谁认证auth_socket.通过套接字文件从本地主机的连接插件:

使用auth_socket创建用户'valerie'@'localhost';

如果本地主机上的用户具有登录名斯蒂芬妮调用mysql.用选项--user = valerie.要通过套接字文件连接,服务器使用auth_socket.验证客户端。插件确定了- 用户选项值(瓦莱丽)与客户端用户名不同(斯蒂芬妮)并拒绝连接。如果用户命名瓦莱丽尝试相同的事情,插件发现用户名和MySQL用户名都是瓦莱丽并允许连接。但是,插件即使是拒绝连接瓦莱丽如果连接使用不同的协议,例如TCP / IP。

用户通过身份验证auth_socket.连接到服务器时不需要指定密码。但是,用户通过了认证auth_socket.插件受到远程连接的限制;它们只能通过UNIX套接字文件从本地主机连接。

要安装服务器端auth_socket.插入:

  1. 添加以下选项(mysqld)Option组在MySQL配置文件中(/etc/my.cnf.):

    插件加载-Add = auth_socket.so auth_socket = force_plus_permanent
    • 插件加载-Add = auth_socket.so

      加载auth_socket.so.每次Server启动时插件库都会。

    • auth_socket = FORCE_PLUS_PERMANENT

      控件阻止服务器在没有auth_socket.如果插件没有初始化成功,则服务器启动失败。

  2. 要验证插件安装,请重新启动服务器并检查Information_schema.plugins.表或使用显示插件陈述:

    shell> systemctl重新启动mysqld
    shell> cd / usr / local / mysql shell> bin / mysqladmin -u root -p版本输入密码:(在此处输入root密码)
    mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA。PLUGIN_NAME WHERE PLUGIN_NAME LIKE '%socket%';+-------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS  | +-------------------+---------------+ | auth_socket |活跃  | +-------------------+---------------+
  3. 可选地,修改MySQL root用户帐户以使用auth_socket.用于身份验证的插件:

    MySQL> Alter UseT_Socket标识的用户'root'@'localhost';
  4. 验证root @ localhost.帐户正在使用auth_socket.插件,发出此查询:

    mysql> SELECT user, plugin FROM mysql。用户在用户(“根”)\ G  *************************** 1。行  *************************** 用户:根插件:auth_socket
  5. 验证auth_socket.使用MySQL plugin插件,以操作系统root用户登录MySQL服务器主机,然后以MySQL root用户在本地连接MySQL服务器。您应该能够在不指定密码的情况下连接。

    shell> cd / usr / local / mysql shell> bin / mysql -u root

有关的更多信息auth_socket.插件,参见套接字同行凭据可插拔认证