如何为所有远程用户要求 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的主要内容,如果未能解决你的问题,请参考以下文章
远程机器未运行时如何为远程 JMS 队列初始化 ConnectionFactory?