在 MySQL 客户端和服务器之间使用未加密连接时,任何有权访问网络的人都可以查看您的所有流量并检查在客户端和服务器之间发送或接收的数据。
当您必须以安全的方式在网络上传输信息时,未加密连接是不可接受的。为了使任何类型的数据不可读,请使用加密。加密算法必须包含安全元素以抵御许多已知的攻击,例如更改加密消息的顺序或重复播放数据两次。
MySQL 支持使用 TLS (传输层安全) 协议在客户端和服务器之间进行加密连接。TLS 有时被称为 SSL (安全套接字层),但 MySQL 实际上并未使用 SSL 协议进行加密连接,因为它的加密很弱(见 第 8.3.2 节,“加密连接 TLS 协议和密码”)。
TLS 使用加密算法来确保可以通过公用网络接收到的数据是可信的。它具有检测数据更改、丢失或重复播放的机制。TLS 还包含提供使用 X.509 标准进行身份验证的算法。
X.509 使在互联网上识别某人成为可能。简而言之,应该存在一个名为 “证书颁发机构”(或 CA)的实体,它为任何需要证书的人分配电子证书。证书依赖于具有两个加密密钥(公钥和私钥)的非对称加密算法。证书所有者可以向另一方出示证书作为身份证明。证书包含其所有者的公钥。使用此公钥加密的任何数据只能使用相应的私钥解密,该私钥由证书所有者持有。
MySQL 中对加密连接的支持是使用 OpenSSL 提供的。有关 OpenSSL 支持的加密协议和密码的信息,请参见 第 8.3.2 节,“加密连接 TLS 协议和密码”。
默认情况下,MySQL 实例在运行时链接到可用的已安装 OpenSSL 库,以支持加密连接和其他与加密相关的操作。您可以从源代码编译 MySQL,并使用 WITH_SSL
CMake 选项指定特定已安装 OpenSSL 版本或替代 OpenSSL 系统包的路径。在这种情况下,MySQL 将选择该版本。有关执行此操作的说明,请参见 第 2.8.6 节,“配置 SSL 库支持”。
您可以使用 Tls_library_version
系统状态变量检查运行时使用的 OpenSSL 库版本。
如果您使用一个版本的 OpenSSL 编译 MySQL,并且想要更改为另一个版本而无需重新编译,您可以通过编辑动态库加载器路径来做到这一点(在 Unix 系统上为 LD_LIBRARY_PATH
或在 Windows 系统上为 PATH
)。删除编译版本 OpenSSL 的路径,并添加替换版本的路径,将其放在路径上的任何其他 OpenSSL 库之前。在启动时,当 MySQL 在路径上找不到使用 WITH_SSL
指定的 OpenSSL 版本时,它将改为使用路径上指定的第一个版本。
默认情况下,MySQL 程序尝试使用加密连接,前提是服务器支持加密连接。如果无法建立加密连接,则会回退到非加密连接。有关影响加密连接使用的选项的信息,请参见第 8.3.1 节,“配置 MySQL 使用加密连接”和加密连接的命令选项。
MySQL 对每个连接执行加密,并且特定用户使用加密连接可以是可选的或强制的。这使您可以根据各个应用程序的要求选择加密或非加密连接。有关如何要求用户使用加密连接的信息,请参见CREATE USER
语句的REQUIRE
子句的说明,位于第 15.7.1.3 节,“CREATE USER 语句”中。另请参阅require_secure_transport
系统变量的描述,位于第 7.1.8 节,“服务器系统变量”中。
可以在源服务器和副本服务器之间使用加密连接。请参见第 19.3.1 节,“设置复制以使用加密连接”。
有关从 MySQL C API 使用加密连接的信息,请参见加密连接支持。
还可以通过 SSH 连接到 MySQL 服务器主机来使用加密连接。有关示例,请参见第 8.3.4 节,“从 Windows 通过 SSH 远程连接到 MySQL”。