MySQL 8.0 参考手册  / 第 6 章 安全  /  6.3 使用加密连接

6.3 使用加密连接

通过 MySQL 客户端和服务器之间的未加密连接,有权访问网络的人可以监视您的所有流量并检查客户端和服务器之间发送或接收的数据。

当您必须以安全的方式在网络上移动信息时,未加密的连接是不可接受的。要使任何类型的数据不可读,请使用加密。加密算法必须包含安全元素以抵御多种已知攻击,例如更改加密消息的顺序或重放数据两次。

MySQL 支持使用 TLS(传输层安全)协议在客户端和服务器之间进行加密连接。TLS 有时被称为 SSL(安全套接字层),但 MySQL 实际上并不使用 SSL 协议进行加密连接,因为它的加密很弱(请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”)。

TLS 使用加密算法来确保通过公共网络接收的数据是可信的。它具有检测数据更改、丢失或重放的机制。TLS 还包含使用 X.509 标准提供身份验证的算法。

X.509 使在 Internet 上识别某人成为可能。简而言之,应该有一些称为证书颁发机构(或 CA)的实体将电子证书分配给需要它们的任何人。证书依赖于具有两个加密密钥(公钥和秘密密钥)的非对称加密算法。证书所有者可以将证书作为身份证明提供给另一方。证书由其所有者的公钥组成。使用此公钥加密的任何数据只能使用证书所有者持有的相应密钥进行解密。

使用 OpenSSL 提供对 MySQL 中加密连接的支持。有关 OpenSSL 支持的加密协议和密码的信息,请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”

默认情况下,MySQL 实例在运行时链接到可用的已安装 OpenSSL 库,以支持加密连接和其他与加密相关的操作。您可以从源代码编译 MySQL 并使用CMake选项指定特定安装的 OpenSSL 版本或替代 OpenSSL 系统包的路径。在这种情况下,MySQL 选择该版本。有关执行此操作的说明,请参阅第 2.9.6 节,“配置 SSL 库支持”WITH_SSL

从 MySQL 8.0.11 到 8.0.17,可以使用 wolfSSL 作为 OpenSSL 的替代来编译 MySQL。从 MySQL 8.0.18 开始,删除了对 wolfSSL 的支持,所有 MySQL 构建都使用 OpenSSL。

您可以使用系统状态变量检查在运行时使用的 OpenSSL 库的版本,该 Tls_library_version变量可从 MySQL 8.0.30 获得。

如果您使用一个版本的 OpenSSL 编译 MySQL 并希望在不重新编译的情况下更改为不同的版本,您可以通过编辑动态库加载器路径(LD_LIBRARY_PATH在 Unix 系统或 PATHWindows 系统上)来实现。删除 OpenSSL 编译版本的路径,并添加替换版本的路径,将其放在路径中任何其他 OpenSSL 库之前。在启动时,当 MySQL 找不到WITH_SSL路径上指定的 OpenSSL 版本时,它会使用路径上指定的第一个版本。

默认情况下,如果服务器支持加密连接,MySQL 程序会尝试使用加密连接,如果无法建立加密连接,则回退到未加密连接。有关影响加密连接使用的选项的信息,请参阅 第 6.3.1 节,“配置 MySQL 以使用加密连接”和 加密连接的命令选项

MySQL 在每个连接的基础上执行加密,并且对给定用户使用加密可以是可选的或强制的。这使您能够根据各个应用程序的要求选择加密或未加密的连接。有关如何要求用户使用加密连接的信息,请参阅第 13.7.1.3 节,“CREATE USER 语句”中语句 的REQUIRE子句的 讨论。另请参阅 第 5.1.8 节“服务器系统变量”中系统变量的说明CREATE USERrequire_secure_transport

可以在源服务器和副本服务器之间使用加密连接。请参阅第 17.3.1 节,“设置复制以使用加密连接”

有关从 MySQL C API 使用加密连接的信息,请参阅支持加密连接

也可以使用 SSH 连接中的加密连接到 MySQL 服务器主机。有关示例,请参阅 第 6.3.4 节,“使用 SSH 从 Windows 远程连接到 MySQL”