公钥检索不允许(Public Key Retrieval is not allowed)
在 MySQL 8.0 及更高版本中,默认启用了更严格的安全设置。当客户端尝试使用 caching_sha2_password 插件进行密码验证时,MySQL 服务器会要求客户端提供公钥来加密密码。然而,许多旧版本的客户端库或驱动程序并不支持这种公钥检索机制,因此会抛出“Public Key Retrieval is not allowed”错误。
MySQL 8.0 默认使用了 SHA-256 密码加密方式,这种加密方式基于公钥/私钥体系。在连接数据库时,服务器需要客户端提供公钥来加密密码,以确保密码传输的安全性。
然而,许多旧版本的客户端库或应用程序并未实现公钥检索的功能,因此无法提供公钥,导致连接失败。
如果不设置 allowPublicKeyRetrieval=true,客户端将无法连接到使用 caching_sha2_password 插件的 MySQL 服务器,因为服务器要求公钥而客户端无法提供。
设置 allowPublicKeyRetrieval=true 后,客户端将允许检索服务器的公钥,并使用该公钥加密密码。这可以解决连接问题,但也可能使连接对中间人攻击更为敏感。
注意事项:
启用 allowPublicKeyRetrieval=true 可能会降低连接的安全性,因为它允许客户端从不受信任的源检索公钥。因此,在生产环境中使用时,应确保连接的安全性,例如通过使用 SSL/TLS 加密连接。
useSSL=true
在网络传输过程中,数据可能会被窃听或篡改。为了确保数据的安全性,许多数据库系统都支持使用 SSL/TLS 加密连接。
MySQL 也提供了 SSL/TLS 支持,可以在客户端和服务器之间建立加密连接,防止数据在传输过程中被窃取或篡改。
设置 useSSL=true 后,客户端将尝试与服务器建立 SSL/TLS 加密连接。如果服务器配置了 SSL/TLS,并且客户端有权访问相关的 SSL 证书,则连接将成功建立并加密。
加密连接可以提高数据的安全性,防止数据在传输过程中被窃取或篡改。但也可能增加连接的开销和延迟。
注意事项:
在使用 SSL/TLS 加密连接时,应确保客户端和服务器都配置了正确的 SSL 证书和密钥。
如果客户端或服务器没有正确配置 SSL/TLS,或者证书已过期或不受信任,则连接可能会失败。
综上所述,allowPublicKeyRetrieval=true 和 useSSL=true 都是用于增强 MySQL 连接安全性的参数。但在使用时需要注意它们可能带来的安全风险和性能影响。