Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


A.9 MySQL 8.4 FAQ: 安全性

A.9.1. 我可以在哪里找到解决 MySQL 安全问题的文档?
A.9.2. MySQL 8.4 中的默认身份验证插件是什么?
A.9.3. MySQL 是否具有原生 SSL 支持?
A.9.4. SSL 支持是否内置于 MySQL 二进制文件中,还是我需要自己重新编译二进制文件以启用它?
A.9.5. MySQL 是否具有内置的 LDAP 目录身份验证?
A.9.6. MySQL 是否包括基于角色的访问控制(RBAC)支持?
A.9.7. MySQL 是否支持 TLS 1.0 和 1.1?

A.9.1.

我可以在哪里找到关于 MySQL 安全问题的文档?

开始的地方是 第 8 章,安全

MySQL 文档的其他部分可能对特定的安全问题有帮助,包括以下内容:

还有 安全部署指南

A.9.2.

MySQL 8.4 中的默认身份验证插件是什么?

从 MySQL 8.0 开始,默认身份验证插件是 caching_sha2_password。有关该插件的信息,请参阅 第 8.4.1.2 节,“缓存 SHA-2 可插拔身份验证”

caching_sha2_password 插件提供了比弃用的 mysql_native_password 插件(MySQL 版本之前的默认插件)更安全的密码加密。有关该更改对服务器操作和客户端兼容性的影响,请参阅 caching_sha2_password 作为首选身份验证插件

有关可插拔身份验证和其他可用身份验证插件的常规信息,请参阅 第 8.2.17 节,“可插拔身份验证”第 8.4.1 节,“身份验证插件”

A.9.3.

MySQL 是否原生支持 SSL?

是的,二进制文件支持客户端和服务器之间的 SSL 连接。请参阅 第 8.3 节,“使用加密连接”

你也可以使用 SSH 隧道连接,如果(例如)客户端应用程序不支持 SSL 连接。例如,请参阅 第 8.3.4 节,“从 Windows 远程连接到 MySQL 服务器使用 SSH”

A.9.4.

SSL 支持是否内置在 MySQL 二进制文件中,还是我需要重新编译二进制文件以启用它?

是的,二进制文件支持安全的客户端/服务器连接。请参阅 第 8.3 节,“使用加密连接”

A.9.5.

MySQL 是否内置了对 LDAP 目录的身份验证支持?

企业版包括一个 PAM 身份验证插件,它支持对 LDAP 目录的身份验证。

A.9.6.

MySQL 是否支持基于角色的访问控制(RBAC)?

目前不支持。

A.9.7.

MySQL 是否支持 TLS 1.0 和 1.1?

从 MySQL 8.0.28 开始,不再支持 TLSv1 和 TLSv1.1 连接协议。这些协议从 MySQL 8.0.26 开始被弃用。有关该删除的后果,请参阅 TLSv1 和 TLSv1.1 协议的删除

TLS 版本 1.0 和 1.1 被删除,因为这些协议版本很旧,分别发布于 1996 年和 2006 年。使用的算法也很弱和过时。

除非您使用非常旧的 MySQL 服务器或连接器,否则您不太可能使用 TLS 1.0 或 1.1 连接。MySQL 连接器和客户端默认选择最高的 TLS 版本。

何时添加了对 TLS 1.2 的支持到 MySQL 服务器? MySQL 社区服务器在 2019 年添加了 TLS 1.2 支持,当社区服务器切换到 OpenSSL 时,适用于 MySQL 5.6、5.7 和 8.0。对于 MySQL Enterprise Edition,OpenSSL 在 2015 年添加了 TLS 1.2 支持,在 MySQL 服务器 5.7.10 中。

如何查看哪些 TLS 版本正在使用中? 对于 MySQL 5.7 或 8.0,通过运行以下查询来查看 TLS 1.0 或 1.1 是否在使用中:

SELECT
  `session_ssl_status`.`thread_id`, `session_ssl_status`.`ssl_version`,
  `session_ssl_status`.`ssl_cipher`, `session_ssl_status`.`ssl_sessions_reused`
FROM `sys`.`session_ssl_status` 
WHERE ssl_version NOT IN ('TLSv1.3','TLSv1.2');

如果列出了使用 TLSv1.0 或 TLSv1.1 的线程,可以通过运行以下查询来确定连接来自哪里:

SELECT thd_id,conn_id, user, db, current_statement, program_name 
FROM sys.processlist
WHERE thd_id IN (
                  SELECT `session_ssl_status`.`thread_id`
                  FROM `sys`.`session_ssl_status` 
                  WHERE ssl_version NOT IN ('TLSv1.3','TLSv1.2')
                );

或者,可以运行以下查询:

SELECT * 
FROM sys.session 
WHERE thd_id IN (
                  SELECT `session_ssl_status`.`thread_id`
                  FROM `sys`.`session_ssl_status` 
                  WHERE ssl_version NOT IN ('TLSv1.3','TLSv1.2')
                );

这些查询提供了确定哪些应用程序不支持 TLS 1.2 或 1.3,并目标升级这些应用程序所需的详细信息。

是否有其他选项来测试 TLS 1.0 或 1.1? 是的,可以在升级服务器到新版本之前禁用这些版本。明确指定要使用的版本,例如在 mysql.cnf(或 mysql.ini)中,或者使用 SET PERSIST,例如:--tls-version=TLSv12

所有 MySQL 连接器(5.7 和 8.0)是否支持 TLS 1.2 及更高版本?关于使用 libmysql 的 C 和 C++ 应用程序呢? 对于使用社区 libmysqlclient 库的 C 和 C++ 应用程序,请使用基于 OpenSSL 的库(即,不使用 YaSSL)。OpenSSL 的使用在 2018 年统一(在 MySQL 8.0.4 和 5.7.28 中)。同样适用于 Connector/ODBC 和 Connector/C++。要确定使用了哪些库依赖项,请运行以下命令以查看 OpenSSL 是否在列表中。在 Linux 上,使用以下命令:

$> sudo ldd usr/local/mysql/lib/libmysqlclient.a | grep -i openssl

在 MacOS 上,使用以下命令:

$> sudo otool -l /usr/local/mysql/lib/libmysqlclient.a | grep -i openssl

请查看每个连接器的文档,但它们都支持 TLS 1.2 和 TLS 1.3。