Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

A.9 MySQL 8.3 FAQ:安全性

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

A.9.1.

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

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

MySQL 文档中其他可能有助于解决特定安全问题的部分包括以下内容:

还有 安全部署指南,它提供了部署 MySQL Enterprise Edition Server 的安全指南。

A.9.2.

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

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

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

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

A.9.3.

MySQL 8.3 是否原生支持 SSL?

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

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

A.9.4.

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

大多数8.3二进制文件都启用了SSL,以便在客户端/服务器连接中实现安全、身份验证或两者。请参阅第8.3节,“使用加密连接”

A.9.5.

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

Enterprise版包括一个PAM身份验证插件

A.9.6.

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

目前不支持。

A.9.7.

MySQL 8.3是否支持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

关于 Connector/J 呢? Java 8 从 2014 年 1 月开始默认使用 TLS 1.2;TLS 1.2 在此之前已经支持,因此除非您运行非常旧的 Connector/J 版本,否则您已经拥有 TLS 1.2 支持。

关于 Connector/NET 呢? 对于 .NET 应用程序,微软在 2020 年底停止了对 TLS 1.0 和 1.1 的支持。TLS 1.2 的支持从 2012 年开始添加。您需要运行非常旧的 Connector/NET 版本,否则您已经拥有 TLS 1.2 支持。

关于 Connector/Python 呢? 这取决于您运行的 Python 版本。Python 2.6 的 SSL 模块仅支持 TLS 1.0 版本。在这种情况下,您需要升级到 Python 2.7.9 或更高版本,或者 Python 3.x,均支持较新的 TLS 版本。有关详细信息,请参阅 Connector/Python 版本https://www.calazan.com/how-to-check-if-your-python-app-supports-tls-12/

关于 Connector/Node.js 或 Node MySQL2 呢? TLS 随 nodejs 一起提供,所有支持的 Node.js 版本都使用 OpenSSL v1.1.1(截至 2020 年 4 月),这也支持 TLS 1.2 及更高版本。

关于 PHP 呢? 这些 PHP 版本 支持 TLS 1.2 及更高版本。