通过 MySQL 客户端和服务器之间的未加密连接,有权访问网络的人可以监视您的所有流量并检查客户端和服务器之间发送或接收的数据。
当您必须以安全的方式在网络上移动信息时,未加密的连接是不可接受的。要使任何类型的数据不可读,请使用加密。加密算法必须包含安全元素以抵御多种已知攻击,例如更改加密消息的顺序或重放数据两次。
MySQL 支持使用 TLS(传输层安全)协议在客户端和服务器之间进行加密连接。TLS 有时被称为 SSL(安全套接字层),但 MySQL 实际上并不使用 SSL 协议进行加密连接,因为它的加密很弱(请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”)。
TLS 使用加密算法来确保通过公共网络接收的数据是可信的。它具有检测数据更改、丢失或重放的机制。TLS 还包含使用 X.509 标准提供身份验证的算法。
X.509 使在 Internet 上识别某人成为可能。简而言之,应该有一些称为“证书颁发机构”(或 CA)的实体将电子证书分配给需要它们的任何人。证书依赖于具有两个加密密钥(公钥和秘密密钥)的非对称加密算法。证书所有者可以将证书作为身份证明提供给另一方。证书由其所有者的公钥组成。使用此公钥加密的任何数据只能使用证书所有者持有的相应密钥进行解密。
可以使用 OpenSSL 或 yaSSL 编译 MySQL 以支持加密连接。有关这两个包的比较,请参阅 第 6.3.4 节,“SSL 库相关功能”。有关每个包支持的加密协议和密码的信息,请参阅 第 6.3.2 节,“加密连接 TLS 协议和密码”。
仅在 MySQL 5.6.46 之前,可以使用 yaSSL 作为 OpenSSL 的替代方案来编译 MySQL。从 MySQL 5.6.46 开始,删除了对 yaSSL 的支持,所有 MySQL 构建都使用 OpenSSL。
如果提供了正确的选项并且服务器支持加密连接,则 MySQL 程序会尝试使用加密进行连接。有关影响加密连接使用的选项的信息,请参阅第 6.3.1 节,“配置 MySQL 以使用加密连接”和 加密连接的命令选项。
MySQL 在每个连接的基础上执行加密,并且对给定用户使用加密可以是可选的或强制的。这使您能够根据各个应用程序的要求选择加密或未加密的连接。有关如何要求用户使用加密连接的信息,请参阅第 13.7.1.4 节,“GRANT 语句”中语句
的REQUIRE
子句的
讨论。
GRANT
默认情况下不使用加密连接。对于需要加密连接提供的安全性的应用程序,加密数据的额外计算是值得的。
可以在源复制服务器和副本复制服务器之间使用加密连接。请参阅 第 17.3.8 节,“设置复制以使用加密连接”。
有关从 MySQL C API 使用加密连接的信息,请参阅支持加密连接。
也可以使用 SSH 连接中的加密连接到 MySQL 服务器主机。有关示例,请参阅 第 6.3.5 节,“使用 SSH 从 Windows 远程连接到 MySQL”。