如何为所有远程用户要求 SSL

Posted

技术标签:

【中文标题】如何为所有远程用户要求 SSL【英文标题】:How to require SSL for all remote users 【发布时间】:2013-04-13 19:19:33 【问题描述】:

给定一个具有多个远程用户('joecool'@'192.168.1.2' 形式的用户)的 mysql 系统;有没有我可以为所有远程用户使用REQUIRE SSL 的 SQL 语句?

单用户命令是:

GRANT USAGE ON *.* TO 'joecool'@'192.168.1.2' REQUIRE SSL;

拥有“所有用户”版本会特别有用,因为phpMyAdmin 在创建或修改用户时不支持 REQUIRE SSL 标志。

【问题讨论】:

我注意到我可以通过SELECT * FROM mysql.user WHERE host like '192.168.%' AND ssl_type != 'ANY'; 找到没有REQUIRE SSL 的人——我可以直接修改mysql.user 表吗? 今天访问者的注意事项:phpMyAdmin 在创建或修改用户时在底部有一个 SSL 部分。 【参考方案1】:

是的,你可以直接修改mysql.user表(小心)。然后您只需发出 FLUSH PRIVILEGES 语句即可将更改应用到正在运行的服务器。

【讨论】:

需要修改的字段是ssl_type,类型为enum('', 'ANY', 'X509', 'SPECIFIED')。因此,要模拟REQUIRE SSL,您将执行UPDATE mysql.user SET ssl_type='ANY' WHERE user='are you sure?'。请注意,设置此标志(设置为非空值)在以someuser@localhost 连接时似乎没有效果。 (至少没有阻止我以somuser@localhost 登录,但它确实对远程连接强制执行 SSL) @DimitryK 它可能不会影响 localhost 连接,因为这些连接通常(至少使用 MySQL CLI)使用 UNIX 套接字(或 Windows 上的命名管道)完成,因此不需要 TLS。我想如果您尝试使用mysql -h 127.0.0.1 进行连接,则需要使用 SSL。 @ChristopherSchultz,SSL 确实会影响 UNIX 套接字连接,因此如果您需要高性能本地传输,最好确保在客户端上禁用 ssl。您可以使用\s 命令查看 SSL 状态。请记住,SSL/TLS 只是流式套接字之上的一层,因此它可以在任何类型的流式套接字上运行。也可能有用例,例如。使用远程服务器的套接字代理。 @ThomasGuyot-Sionnest 您是正确的,可以在 UNIX 套接字(不是 TCP/IP 套接字)上使用 TLS,但这样做通常是愚蠢的。由客户端决定连接是否支持 TLS(并且服务器可以拒绝非加密连接),但拒绝来自localhost 的非加密连接同样愚蠢。 @ChristopherSchultz,我的观点是,如果您将 MySQL 客户端配置为使用 SSL,那么无论您何时连接到本地套接字或远程主机,它都会使用它。【参考方案2】:

Honza(以前)接受的答案似乎不正确,请参阅其 cmets。自MySQL does not support wildcards for user names 以来,似乎不可能使用GRANT 查询同时更改多个用户。

按照您自己的建议,您可以使用 UPDATE 查询直接更改 mysql.user 表中的记录,并且按照 Marc Delisle 的建议,然后使用以下命令刷新权限:

FLUSH PRIVILEGES;

另见dba.stackexchange.com > How to grant multiple users privileges。

【讨论】:

【参考方案3】:

您可以将mysqld 配置为require_secure_transport。

[mysqld]
...
ssl-ca = ...
ssl-cert = ...
ssl-key = ...
...
require-secure-transport = ON

此功能补充了每个帐户的 SSL 要求,这需要 优先级。例如,如果一个帐户是使用 REQUIRE SSL 定义的, 启用 require_secure_transport 无法使用 使用 Unix 套接字文件连接的帐户。

【讨论】:

这只适用于mysql5.7,不支持以后或mariadb。 @JamesMV mysql8.0 也支持该选项:dev.mysql.com/doc/refman/8.0/en/… MariaDB 在 10.5.2 中添加了这个 - jira.mariadb.org/browse/MDEV-13362

以上是关于如何为所有远程用户要求 SSL的主要内容,如果未能解决你的问题,请参考以下文章

如何为远程oracle服务器配置监听

远程机器未运行时如何为远程 JMS 队列初始化 ConnectionFactory?

如何为MySQL服务器和客户机启用SSL

带有 HTML 5 的混合 iOS 应用程序,如何为远程服务器提供凭据

如何为詹金斯参数化远程触发插件设置远程主机

如何为 Eclipse 应用程序启用远程调试?