文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (美国信纸) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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

A.9.1. 我在哪里可以找到解决 MySQL 安全问题的文档?
A.9.2. MySQL 9.0 中的默认身份验证插件是什么?
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 9.0 中的默认身份验证插件是什么?

从 MySQL 8.0 开始,默认身份验证插件是 caching_sha2_password。有关此插件的信息,请参阅 第 8.4.1.1 节,“缓存 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 版本。

MySQL 服务器何时添加了对 TLS 1.2 的支持? 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。