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

第十一章启用认证

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

此部署使用caching_sha2_passwordauth_socket.用于用户身份验证的身份验证插件。

缓存SHA-2身份验证

在mysql 8.0中,caching_sha2_password是默认的身份验证插件而不是mysql_native_password.,这是MySQL 5.7的默认设置。

服务器端caching_sha2_password插件内置于服务器中,它不需要明确加载。因此,不需要服务器端配置来使用它。

客户端插件内置于libmysqlclient图书馆(MySQL 8.0.4及更高版本),可用于与之相关的任何程序libmysqlclient。有关兼容客户端和连接器的列表,请参阅caching_sha2_password兼容客户端和连接器

caching_sha2_password插件使用SHA-2算法提供256位密码加密。密码在应用SHA-256转换之前,用随机数据盐。生成的哈希值存储在mysql.user桌子。使用盐有助于防御存储密码哈希值的字典攻击。

caching_sha2_password插件需要一个安全连接(使用TLS凭据、Unix套接字文件或共享内存)或支持使用RSA密钥对进行密码交换的未加密连接。但是,与安全连接相关的性能成本可以通过插件的缓存功能来降低。一旦散列密码被缓存到内存中,就可以使用基于sha256的质询-响应机制在一个未加密的通道上执行身份验证,这意味着对于以前连接过的用户来说,身份验证速度更快。

笔记

更改密码,重命名用户和齐平特权操作无效缓存密码哈希值。当缓存的密码哈希值无效时,再次需要安全连接进行密码交换。

稍后在此部署中创建的用户帐户将使用caching_sha2_password验证。看第13章,创建用户帐户。展示了TLS和RSA密钥对连接方法第14章,连接到服务器

有关该的其​​他信息caching_sha2_password插件,看到缓存SHA-2可插拔身份验证

套接字同行凭证身份验证

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

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

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

创建用户“valerie”@“localhost”

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

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

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

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

    plugin-load-add = auth_socket.soauth_socket = force_plus_permanent.
    • plugin-load-add = auth_socket.so

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

    • auth_socket = force_plus_permanent.

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

  2. 要验证插件安装,请重新启动服务器并检查INFORMATION_SCHEMA。插件表或使用显示插件声明:

    Shell > systemctl restart 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.Plugin Works,登录MySQL Server主机作为操作系统root用户,然后当本地连接到MySQL root用户身份。您应该能够在不指定密码的情况下连接。

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

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