文档首页
MySQL 8.4 参考手册
相关文档 下载此手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  MySQL 8.4 常见问题解答  /  MySQL 8.4 常见问题解答:安全

A.9 MySQL 8.4 常见问题解答:安全

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 文档的其他部分包括以下内容

还有 安全部署指南,它提供了用于部署具有管理 MySQL 安装安全性的功能的 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 8.0 之前版本中的默认插件)更安全的密码加密。有关此默认插件更改对服务器操作以及服务器与客户端和连接器的兼容性的影响的信息,请参见 caching_sha2_password 作为首选身份验证插件.

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

A.9.3.

MySQL 是否原生支持 SSL?

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

您还可以使用 SSH 隧道连接,例如,如果客户端应用程序不支持 SSL 连接。有关示例,请参见 第 8.3.4 节,“使用 SSH 从 Windows 远程连接到 MySQL”.

A.9.4.

SSL 支持是否内置于 MySQL 二进制文件中,或者我必须自己重新编译二进制文件才能启用它?

是的,二进制文件已为安全的、经过身份验证的或同时安全的和经过身份验证的客户端/服务器连接启用了 SSL。请参见 第 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 Community Server 在 2019 年将社区服务器切换到 OpenSSL 用于 MySQL 5.6、5.7 和 8.0 时添加了对 TLS 1.2 的支持。对于 MySQL 企业版,OpenSSL 在 2015 年的 MySQL 服务器 5.7.10 中添加了对 TLS 1.2 的支持。

如何查看哪些 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。