连接到服务器的命令选项:修订间差异

来自泡泡学习笔记
跳到导航 跳到搜索
无编辑摘要
无编辑摘要
 
第287行: 第287行:


要指定服务器允许的密码套件,设置tls_ciphersuites系统变量。
要指定服务器允许的密码套件,设置tls_ciphersuites系统变量。
====--tls-version=protocol_list====
这个选项指定了客户端允许用于加密连接的TLS协议。该值是一个由一个或多个逗号分隔的协议版本组成的列表。例如:
mysql --tls-version="TLSv1.2,TLSv1.3"
可以为该选项命名的协议取决于用于编译MySQL的SSL库以及MySQL Server的版本。
重要提示:
从MySQL 8.0.28开始,MySQL Server不再支持TLSv1和TLSv1.1连接协议。这些协议从MySQL 8.0.26开始被弃用,尽管MySQL Server客户端在使用弃用的TLS协议版本时不会向用户返回警告。从MySQL 8.0.28开始,包括MySQL Shell在内支持--tls-version选项的客户端不能使用TLSv1或TLSv1.1设置进行TLS/SSL连接。如果客户端尝试使用这些协议进行连接,对于TCP连接,连接将失败,并向客户端返回错误。对于套接字连接,如果--ssl-mode被设置为REQUIRED,则连接失败,否则连接将被建立,但TLS/SSL将被禁用。
从MySQL 8.0.16开始,MySQL Server支持TLSv1.3协议,前提是MySQL Server使用的是OpenSSL 1.1.1或更高版本进行编译。服务器在启动时检查OpenSSL的版本,如果低于1.1.1,则从与TLS版本相关的服务器系统变量(如tls_version系统变量)的默认值中删除TLSv1.3。
应选择适当的允许协议,以避免在列表中留下“空洞”。例如,以下值没有空洞:
--tls-version="TLSv1,TLSv1.1,TLSv1.2,TLSv1.3"
--tls-version="TLSv1.1,TLSv1.2,TLSv1.3"
--tls-version="TLSv1.2,TLSv1.3"
--tls-version="TLSv1.3"
从MySQL 8.0.28开始,只有最后两个值是合适的。
以下值有空洞,不应使用:
--tls-version="TLSv1,TLSv1.2"
--tls-version="TLSv1.1,TLSv1.3"
要指定服务器允许的TLS协议,请设置tls_version系统变量。
===连接压缩的命令选项===
本节描述了启用客户端程序控制与服务器的连接压缩的选项。
====--compress,-C====
如果可能的话,压缩客户端和服务器之间发送的所有信息。
从MySQL 8.0.18开始,此选项已被弃用。预计在将来的MySQL版本中将被移除。
====--compression-algorithms=value====
连接到服务器的允许压缩算法。可用的算法与protocol_compression_algorithms系统变量相同。默认值为未压缩。
此选项在MySQL 8.0.18中添加。
====--zstd-compression-level=level====
用于使用zstd压缩算法连接到服务器的压缩级别。允许的级别为1到22,较大的值表示更高级别的压缩。默认的zstd压缩级别为3。压缩级别设置对不使用zstd压缩的连接没有影响。
此选项在MySQL 8.0.18中添加。

2023年7月3日 (一) 07:35的最新版本

本节介绍了大多数MySQL客户端程序支持的选项,用于控制客户端程序如何建立与服务器的连接,连接是否加密以及连接是否压缩。这些选项可以在命令行或选项文件中指定。


连接建立的命令选项

本节介绍了控制客户端程序如何建立与服务器的连接的选项。


--default-auth=plugin

一个关于使用哪个客户端身份验证插件的提示。


--host=host_name, -h host_name

MySQL服务器所在的主机。该值可以是主机名、IPv4地址或IPv6地址。默认值是localhost。


--password[=pass_val], -p[pass_val]

用于连接到服务器的MySQL账户的密码。密码值是可选的。如果没有提供,客户端程序会提示输入密码。如果提供了密码,则--password=或-p后面不能有空格。如果未指定密码选项,则默认发送无密码。


在命令行上指定密码应被视为不安全。为了避免在命令行上输入密码,请使用选项文件。


为了明确指定没有密码,并且客户端程序不应提示输入密码,请使用--skip-password选项。


--password1[=pass_val]

用于连接到服务器的MySQL账户的多因素身份验证因素1的密码。密码值是可选的。如果没有提供,客户端程序会提示输入密码。如果提供了密码,则--password1=后面不能有空格。如果未指定密码选项,则默认发送无密码。


在命令行上指定密码应被视为不安全。为了避免在命令行上输入密码,请使用选项文件。


为了明确指定没有密码,并且客户端程序不应提示输入密码,请使用--skip-password1选项。


--password1和--password是同义词,--skip-password1和--skip-password也是同义词。


--password2[=pass_val]

用于连接到服务器的MySQL账户的多因素身份验证因素2的密码。该选项的语义与--password1的语义类似;请参阅该选项的描述以获取详细信息。


--password3[=pass_val]

用于连接到服务器的MySQL账户的多因素身份验证因素3的密码。该选项的语义与--password1的语义类似;请参阅该选项的描述以获取详细信息。


--pipe, -W

在Windows上,使用命名管道连接到服务器。此选项仅适用于启用了named_pipe系统变量以支持命名管道连接的服务器。此外,进行连接的用户必须是由named_pipe_full_access_group系统变量指定的Windows组的成员。


--plugin-dir=dir_name

查找插件的目录。如果使用--default-auth选项指定了身份验证插件但客户端程序找不到它,请指定此选项。


--port=port_num, -P port_num

对于TCP/IP连接,要使用的端口号。默认端口号是3306。


--protocol={TCP|SOCKET|PIPE|MEMORY}

此选项明确指定用于连接到服务器的传输协议。当其他连接参数通常导致使用不同于所需协议的协议时,这将很有用。例如,默认情况下,在Unix上连接到localhost时会使用Unix套接字文件:

mysql --host=localhost

要强制使用TCP/IP传输,可以指定--protocol选项:

mysql --host=localhost --protocol=TCP

以下表显示了允许的--protocol选项值,并指示每个值适用的平台。这些值不区分大小写。

--protocol Value Transport Protocol Used Applicable Platforms
TCP TCP/IP transport to local or remote server All
SOCKET Unix socket-file transport to local server Unix and Unix-like systems
PIPE Named-pipe transport to local server Windows
MEMORY Shared-memory transport to local server Windows


--shared-memory-base-name=name

在Windows上,使用共享内存连接到本地服务器时要使用的共享内存名称。默认值为MYSQL。共享内存名称区分大小写。

只有在启用了shared_memory系统变量以支持共享内存连接的情况下,此选项才适用。


--socket=path, -S path

在Unix上,用于通过命名管道连接到本地服务器的Unix套接字文件的名称。默认的Unix套接字文件名为/tmp/mysql.sock。

在Windows上,用于连接到本地服务器的命名管道的名称。默认的Windows管道名称为MySQL。管道名称不区分大小写。

只有在启用了named_pipe系统变量以支持命名管道连接的情况下,此选项才适用于Windows。此外,进行连接的用户必须是由named_pipe_full_access_group系统变量指定的Windows组的成员。


--user=user_name, -u user_name

用于连接到服务器的MySQL帐户的用户名。默认用户名为Windows上的ODBC,Unix上的登录名。


加密连接的命令选项

本节介绍了客户端程序的选项,用于指定是否使用加密连接到服务器,证书和密钥文件的名称以及与加密连接支持相关的其他参数。

注意
这些选项仅对使用受加密协议传输的连接(即TCP/IP和Unix套接字文件连接)产生影响。


--get-server-public-key

从服务器请求用于RSA密钥对密码交换所需的公钥。此选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端。对于该插件,除非请求,否则服务器不会发送公钥。对于不使用该插件进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),也会被忽略。

如果给出了--server-public-key-path=file_name并指定了有效的公钥文件,则优先于--get-server-public-key。


--server-public-key-path=file_name

以PEM格式包含服务器所需的公钥的文件的路径名。此选项适用于使用sha256_password或caching_sha2_password身份验证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA的密码交换(例如客户端使用安全连接连接到服务器时),也会被忽略。

如果给出了--server-public-key-path=file_name并指定了有效的公钥文件,则优先于--get-server-public-key。

只有在使用OpenSSL构建MySQL时才可用此选项。


--ssl-ca=file_name

以PEM格式包含证书授权机构(CA)证书文件的路径名。该文件包含一系列可信任的SSL证书颁发机构。

当与服务器建立加密连接时,如果不指定--ssl-ca或--ssl-capath,则告知客户端不要对服务器证书进行身份验证。服务器仍然根据客户端帐户的任何适用要求对客户端进行验证,并且仍然使用在服务器端指定的任何ssl_ca或ssl_capath系统变量值。

要为服务器指定CA文件,请设置ssl_ca系统变量。


--ssl-capath=dir_name

包含以PEM格式的可信任SSL证书颁发机构(CA)证书文件的目录的路径名。

当与服务器建立加密连接时,如果不指定--ssl-ca或--ssl-capath,则告知客户端不要对服务器证书进行身份验证。服务器仍然根据客户端帐户的任何适用要求对客户端进行验证,并且仍然使用在服务器端指定的任何ssl_ca或ssl_capath系统变量值。

要为服务器指定CA目录,请设置ssl_capath系统变量。


--ssl-cert=file_name

以PEM格式包含客户端SSL公钥证书文件的路径名。

要指定服务器SSL公钥证书文件,请设置ssl_cert系统变量。

注意
链式SSL证书支持从v8.0.30开始添加;以前只读取第一个证书。


--ssl-cipher=cipher_list

用于使用TLS协议直至TLSv1.2的连接的可允许加密密码列表。如果列表中没有支持的密码,使用这些TLS协议的加密连接将无法工作。

为了最大的可移植性,cipher_list应该是一个由一个或多个密码名称组成的列表,用冒号分隔。例如:

--ssl-cipher=AES128-SHA
--ssl-cipher=DHE-RSA-AES128-GCM-SHA256:AES128-SHA

OpenSSL支持在OpenSSL文档(https://www.openssl.org/docs/manmaster/man1/ciphers.html)中描述的指定密码的语法。

要为服务器指定加密密码,请设置ssl_cipher系统变量。


--ssl-crl=file_name

以PEM格式包含证书吊销列表的文件的路径名。

如果未给出--ssl-crl或--ssl-crlpath,则不执行CRL检查,即使CA路径包含证书吊销列表。

要为服务器指定吊销列表文件,请设置ssl_crl系统变量。


--ssl-crlpath=dir_name

包含以PEM格式的证书吊销列表文件的目录的路径名。

如果未给出--ssl-crl或--ssl-crlpath,则不执行CRL检查,即使CA路径包含证书吊销列表。

要为服务器指定吊销列表目录,请设置ssl_crlpath系统变量。


--ssl-fips-mode={OFF|ON|STRICT}

控制是否在客户端上启用FIPS模式。--ssl-fips-mode选项与其他--ssl-xxx选项不同,它不用于建立加密连接,而是用于影响允许的加密操作。

允许使用以下--ssl-fips-mode值:

  • OFF:禁用FIPS模式。
  • ON:启用FIPS模式。
  • STRICT:启用“严格”FIPS模式。
注意
如果未安装OpenSSL FIPS对象模块,则--ssl-fips-mode的唯一允许值为OFF。在这种情况下,将--ssl-fips-mode设置为ON或STRICT会导致客户端在启动时产生警告并以非FIPS模式运行。

要为服务器指定FIPS模式,请设置ssl_fips_mode系统变量。


--ssl-key=file_name

客户端SSL私钥文件的路径名,格式为PEM。为了更好的安全性,请使用至少2048位的RSA密钥大小的证书。

如果密钥文件受到密码短语的保护,客户端程序会提示用户输入密码短语。密码必须以交互方式给出,不能存储在文件中。如果密码短语不正确,程序将继续执行,就好像无法读取密钥一样。

要指定服务器SSL私钥文件,请设置ssl_key系统变量。


--ssl-mode=mode

此选项指定与服务器的连接的所需安全状态。这些模式值是允许的,按照严格性递增的顺序:

  • DISABLED:建立一个未加密的连接。
  • PREFERRED:如果服务器支持加密连接,则建立加密连接,如果无法建立加密连接,则回退到未加密连接。如果未指定--ssl-mode,则默认为此选项。
    • 使用Unix套接字文件的连接不会使用PREFERRED模式进行加密。要强制对Unix套接字文件连接进行加密,使用REQUIRED或更严格的模式。(然而,默认情况下,套接字文件传输是安全的,因此对套接字文件连接进行加密并不能增加安全性,反而增加了CPU负载。)
  • REQUIRED:如果服务器支持加密连接,则建立加密连接。如果无法建立加密连接,则连接尝试失败。
  • VERIFY_CA:与REQUIRED类似,但还会根据配置的CA证书验证服务器的证书颁发机构(CA)。如果找不到有效的匹配CA证书,则连接尝试失败。
  • VERIFY_IDENTITY:与VERIFY_CA类似,但还会通过检查客户端用于连接服务器的主机名与服务器发送给客户端的证书中的标识进行主机名身份验证:
    • 从MySQL 8.0.12开始,如果客户端使用OpenSSL 1.0.2或更高版本,客户端将检查其用于连接的主机名是否与服务器证书中的Subject Alternative Name值或Common Name值匹配。主机名身份验证也适用于使用通配符指定Common Name的证书。
    • 否则,客户端将检查其用于连接的主机名是否与服务器证书中的Common Name值匹配。
    • 如果存在不匹配,连接将失败。对于加密连接,此选项有助于防止中间人攻击。
注意
使用VERIFY_IDENTITY进行主机名身份验证无法与由服务器自动创建或使用mysql_ssl_rsa_setup手动创建的自签名证书配合使用。此类自签名证书不包含服务器名称作为Common Name值。
重要提示
默认设置--ssl-mode=PREFERRED在其他默认设置未更改的情况下会产生加密连接。然而,为了防止复杂的中间人攻击,客户端验证服务器的身份非常重要。--ssl-mode=VERIFY_CA和--ssl-mode=VERIFY_IDENTITY设置比默认设置更好,以防止此类攻击。要实施这些设置,首先必须确保服务器的CA证书可靠地提供给在您的环境中使用它的所有客户端,否则将导致可用性问题。因此,它们不是默认设置。


--ssl-mode选项与CA证书选项的交互如下:

  • 如果未明确设置--ssl-mode,使用--ssl-ca或--ssl-capath意味着--ssl-mode=VERIFY_CA。
  • 对于--ssl-mode值为VERIFY_CA或VERIFY_IDENTITY,还需要--ssl-ca或--ssl-capath,以提供与服务器使用的CA证书匹配的CA证书。
  • 使用显式的--ssl-mode选项,其值不是VERIFY_CA或VERIFY_IDENTITY,并且使用显式的--ssl-ca或--ssl-capath选项,将产生警告,表示未执行服务器证书的验证,尽管指定了CA证书选项。

要求MySQL帐户使用加密连接,请使用CREATE USER的REQUIRE SSL子句创建帐户,或者对于现有帐户,使用ALTER USER添加REQUIRE SSL子句。这将导致使用该帐户的客户端的连接尝试被拒绝,除非MySQL支持加密连接并且可以建立加密连接。

REQUIRE子句允许其他与加密相关的选项,可用于强制执行比REQUIRE SSL更严格的安全要求。有关使用各种REQUIRE选项配置的帐户连接时必须指定哪些命令选项的附加详细信息,请参见CREATE USER SSL/TLS选项。


--ssl-session-data=file_name

客户端SSL会话数据文件的路径名,格式为PEM,用于会话重用。

当您使用--ssl-session-data选项调用MySQL客户端程序时,如果提供了文件,则客户端会尝试从文件中反序列化会话数据,然后使用它建立一个新连接。如果提供了文件,但会话未被重用,则连接失败,除非在调用客户端程序时在命令行上还指定了--ssl-session-data-continue-on-failed-reuse选项。

mysql命令ssl_session_data_print生成会话数据文件。


ssl-session-data-continue-on-failed-reuse

控制在尝试重用使用--ssl-session-data命令行选项指定的会话数据的连接失败时是否启动一个新连接。默认情况下,--ssl-session-data-continue-on-failed-reuse命令行选项关闭,这会导致在提供会话数据但未重用时,客户端程序返回连接失败。

为了确保在会话重用失败后打开一个新的无关连接,请使用--ssl-session-data和--ssl-session-data-continue-on-failed-reuse命令行选项同时调用MySQL客户端程序。


--tls-ciphersuites=ciphersuite_list

此选项指定客户端允许用于使用TLSv1.3的加密连接的密码套件。值是一个由零个或多个冒号分隔的密码套件名称组成的列表。例如:

mysql --tls-ciphersuites="suite1:suite2:suite3"

可以为此选项命名的密码套件取决于用于编译MySQL的SSL库。如果未设置此选项,则客户端允许默认的密码套件集。如果将该选项设置为空字符串,则禁用所有密码套件,无法建立加密连接。。

此选项在MySQL 8.0.16中添加。

要指定服务器允许的密码套件,设置tls_ciphersuites系统变量。


--tls-version=protocol_list

这个选项指定了客户端允许用于加密连接的TLS协议。该值是一个由一个或多个逗号分隔的协议版本组成的列表。例如:

mysql --tls-version="TLSv1.2,TLSv1.3"

可以为该选项命名的协议取决于用于编译MySQL的SSL库以及MySQL Server的版本。

重要提示:
从MySQL 8.0.28开始,MySQL Server不再支持TLSv1和TLSv1.1连接协议。这些协议从MySQL 8.0.26开始被弃用,尽管MySQL Server客户端在使用弃用的TLS协议版本时不会向用户返回警告。从MySQL 8.0.28开始,包括MySQL Shell在内支持--tls-version选项的客户端不能使用TLSv1或TLSv1.1设置进行TLS/SSL连接。如果客户端尝试使用这些协议进行连接,对于TCP连接,连接将失败,并向客户端返回错误。对于套接字连接,如果--ssl-mode被设置为REQUIRED,则连接失败,否则连接将被建立,但TLS/SSL将被禁用。

从MySQL 8.0.16开始,MySQL Server支持TLSv1.3协议,前提是MySQL Server使用的是OpenSSL 1.1.1或更高版本进行编译。服务器在启动时检查OpenSSL的版本,如果低于1.1.1,则从与TLS版本相关的服务器系统变量(如tls_version系统变量)的默认值中删除TLSv1.3。

应选择适当的允许协议,以避免在列表中留下“空洞”。例如,以下值没有空洞:

--tls-version="TLSv1,TLSv1.1,TLSv1.2,TLSv1.3"
--tls-version="TLSv1.1,TLSv1.2,TLSv1.3"
--tls-version="TLSv1.2,TLSv1.3"
--tls-version="TLSv1.3"

从MySQL 8.0.28开始,只有最后两个值是合适的。 以下值有空洞,不应使用:

--tls-version="TLSv1,TLSv1.2"
--tls-version="TLSv1.1,TLSv1.3"

要指定服务器允许的TLS协议,请设置tls_version系统变量。


连接压缩的命令选项

本节描述了启用客户端程序控制与服务器的连接压缩的选项。


--compress,-C

如果可能的话,压缩客户端和服务器之间发送的所有信息。

从MySQL 8.0.18开始,此选项已被弃用。预计在将来的MySQL版本中将被移除。


--compression-algorithms=value

连接到服务器的允许压缩算法。可用的算法与protocol_compression_algorithms系统变量相同。默认值为未压缩。

此选项在MySQL 8.0.18中添加。


--zstd-compression-level=level

用于使用zstd压缩算法连接到服务器的压缩级别。允许的级别为1到22,较大的值表示更高级别的压缩。默认的zstd压缩级别为3。压缩级别设置对不使用zstd压缩的连接没有影响。

此选项在MySQL 8.0.18中添加。