4.2.3 用于连接到服务器的命令选项
本节介绍大多数 MySQLClient 端程序支持的选项,这些选项控制 Client 端程序如何构建与服务器的连接以及连接是否被加密。这些选项可以在命令行或选项文件中给出。
用于构建连接的命令选项
本节介绍控制 Client 端程序如何构建与服务器的连接的选项。有关其他信息以及显示如何使用它们的示例,请参见第 4.2.4 节“使用命令选项连接到 MySQL 服务器”。
table4.3 连接构建选项摘要
Option Name | Description | Deprecated |
---|---|---|
--default-auth | 身份验证插件使用 | |
--host | MySQL 服务器所在的主机 | |
--password | 连接服务器时使用的密码 | |
--pipe | 使用命名管道连接到服务器(仅 Windows) | |
--plugin-dir | 安装插件的目录 | |
--port | 用于连接的 TCP/IP 端口号 | |
--protocol | 使用的传输协议 | |
--secure-auth | 不要以旧(4.1 之前)格式向服务器发送密码 | Yes |
--shared-memory-base-name | 共享内存连接的共享内存名称(仅 Windows) | |
--socket | Unix 套接字文件或 Windows 命名管道使用 | |
--user | 连接服务器时使用的 MySQL 用户名 |
有关使用哪个 Client 端身份验证插件的提示。参见第 6.2.13 节“可插入身份验证”。
- --host=host_name,
-h host_name
运行 MySQL 服务器的主机。该值可以是主机名,IPv4 地址或 IPv6 地址。默认值为localhost
。
- --password[=pass_val],
-p[pass_val]
用于连接服务器的 MySQL 帐户的密码。密码值是可选的。如果未给出,程序将提示您 Importing 一个。如果提供了密码,则--password=或-p
与后面的密码之间必须没有空格。如果未指定密码选项,则默认为不发送密码。
在命令行上指定密码应该被认为是不安全的。为避免在命令行上 Importing 密码,请使用选项文件。参见第 6.1.2.1 节,“最终用户密码安全准则”。
要明确指定没有密码,并且 Client 端程序不应提示 Importing 密码,请使用--skip-password选项。
- --pipe,
-W
在 Windows 上,使用命名管道连接到服务器。仅当服务器在启用了named_pipe系统变量的情况下启动以支持命名管道连接时,此选项才适用。此外,构建连接的用户必须是named_pipe_full_access_group系统变量指定的 Windows 组的成员。
在其中查找插件的目录。如果--default-auth选项用于指定身份验证插件,但 Client 端程序找不到它,请指定此选项。参见第 6.2.13 节“可插入身份验证”。
- --port=port_num,
-P port_num
对于 TCP/IP 连接,使用的端口号。默认端口号是 3306.
该选项显式指定用于连接到服务器的传输协议。当其他连接参数通常导致使用所需协议以外的协议时,此功能很有用。例如,默认情况下,使用 Unix 套接字文件在 Unix 上连接到localhost
:
mysql --host=localhost
要强制使用 TCP/IP 传输,请指定--protocol选项:
mysql --host=localhost --protocol=TCP
下 table 显示了允许的--protocol选项值,并指示每个值的适用平台。这些值不区分大小写。
--protocol Value | 使用的传输协议 | Applicable Platforms |
---|---|---|
TCP |
TCP/IP 传输到本地或远程服务器 | All |
SOCKET |
Unix 套接字文件传输到本地服务器 | Unix 和类 Unix 系统 |
PIPE |
命名管道传输到本地服务器 | Windows |
MEMORY |
共享内存传输到本地服务器 | Windows |
不要以旧(4.1 之前)格式向服务器发送密码。这样可以防止除使用较新密码格式的服务器以外的其他连接。
从 MySQL 5.7.5 开始,此选项已被弃用,并将在以后的 MySQL 版本中删除。它始终处于启用状态,尝试禁用它(--skip-secure-auth,--secure-auth=0)会产生错误。在 MySQL 5.7.5 之前,此选项默认为启用,但可以禁用。
Note
使用 4.1 之前的哈希方法的密码比使用本地密码哈希方法的密码安全性较低,应避免使用。不建议使用 4.1 之前的密码,并在 MySQL 5.7.5 中删除了对它们的支持。有关帐户升级的说明,请参阅第 6.4.1.3 节“迁移到 4.1 版之前的密码哈希和 mysql_old_password 插件”。
在 Windows 上,共享内存名称,用于使用共享内存与本地服务器构建的连接。默认值为MYSQL
。共享内存名称区分大小写。
仅当在启用了shared_memory系统变量以支持共享内存连接的情况下启动服务器时,此选项才适用。
- --socket=path,
-S path
在 Unix 上,Unix 套接字文件的名称,该文件用于通过命名管道与本地服务器构建的连接。缺省的 Unix 套接字文件名是/tmp/mysql.sock
。
在 Windows 上,用于连接到本地服务器的命名管道的名称。 Windows 的默认管道名称为MySQL
。管道名称不区分大小写。
在 Windows 上,仅当在启用了named_pipe系统变量以支持命名管道连接的情况下启动服务器时,此选项才适用。此外,构建连接的用户必须是named_pipe_full_access_group系统变量指定的 Windows 组的成员。
- --user=user_name,
-u user_name
用于连接到服务器的 MySQL 帐户的用户名。在 Windows 上,默认用户名是ODBC
,在 Unix 上,您的 Unix 登录名是默认值。
加密连接的命令选项
本节介绍了 Client 端程序的选项,这些选项指定是否使用到服务器的加密连接,证书和密钥文件的名称以及与加密连接支持有关的其他参数。有关建议用法以及如何检查连接是否加密的示例,请参见第 6.3.1 节“配置 MySQL 以使用加密连接”。
Note
这些选项仅对使用受加密的传输协议的连接有效。即 TCP/IP 和 Unix 套接字文件连接。见第 4.2.5 节“连接传输协议”
有关使用 MySQL C API 中的加密连接的信息,请参见第 27.7.14 节“加密连接的 C API 支持”。
table4.4 连接加密选项摘要
Option Name | Description | Introduced |
---|---|---|
--get-server-public-key | 从服务器请求 RSA 公钥 | 5.7.23 |
--server-public-key-path | 包含 RSA 公钥的文件的路径名 | |
--skip-ssl | 禁用连接加密 | |
--ssl | 启用连接加密 | |
--ssl-ca | 包含受信任的 SSL 证书颁发机构列 table 的文件 | |
--ssl-capath | 包含受信任的 SSL 证书颁发机构证书文件的目录 | |
--ssl-cert | 包含 X.509 证书的文件 | |
--ssl-cipher | 连接加密的允许密码 | |
--ssl-crl | 包含证书吊销列 table 的文件 | |
--ssl-crlpath | 包含证书吊销列 table 文件的目录 | |
--ssl-key | 包含 X.509 密钥的文件 | |
--ssl-mode | 与服务器连接的所需安全状态 | 5.7.11 |
--ssl-verify-server-cert | 根据服务器证书的通用名身份验证主机名 | |
--tls-version | 允许的 TLS 协议进行加密连接 | 5.7.10 |
从服务器请求基于 RSA 密钥对的密码交换所需的公共密钥。此选项适用于使用caching_sha2_password
身份验证插件进行身份验证的 Client 端。对于该插件,除非请求,否则服务器不会发送公钥。对于未使用该插件进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,也将被忽略,例如 Client 端使用安全连接连接到服务器时。
如果给出了--server-public-key-path=file_name并指定了有效的公共密钥文件,则它优先于--get-server-public-key。
有关caching_sha2_password
插件的信息,请参见第 6.4.1.4 节“缓存 SHA-2 可插入身份验证”。
--get-server-public-key选项已添加到 MySQL 5.7.23 中。
PEM 格式的文件的路径名,其中包含服务器用于基于 RSA 密钥对的密码交换所需的公用密钥的 Client 端副本。此选项适用于使用sha256_password
或caching_sha2_password
身份验证插件进行身份验证的 Client 端。对于未通过这些插件之一进行身份验证的帐户,将忽略此选项。如果不使用基于 RSA 的密码交换,也将被忽略,例如 Client 端使用安全连接连接到服务器时。
仅当使用 OpenSSL 构建 MySQL 时,此选项才可用。
有关sha256_password
和caching_sha2_password
插件的信息,请参见第 6.4.1.5 节“ SHA-256 可插拔身份验证”和第 6.4.1.4 节“缓存 SHA-2 可插入身份验证”。
Note
从 MySQL 5.7.11 开始不推荐使用 Client 端--ssl选项,并且在 MySQL 8.0 中已将其删除。对于 Client 端程序,请改用--ssl-mode:
-
没有明确的--ssl-mode选项等效于没有明确的--ssl选项。
不建议不要使用服务器端--ssl选项。
默认情况下,如果服务器支持加密连接,则 MySQLClient 端程序会尝试构建加密连接,并通过--ssl选项提供进一步的控制:Client 端--ssl选项的工作方式如下:
-
在没有--ssl选项的情况下,Client 端尝试使用加密进行连接,如果无法构建加密连接,则会退回到未加密的连接。
-
显式--ssl选项或同义词(--ssl=1,--enable-ssl)的存在是规定性的:Client 端需要加密的连接,并且如果无法构建则失败。
-
通过--ssl=0选项或同义词(--skip-ssl,--disable-ssl),Client 端可以使用未加密的连接。
-
要要求 MySQL 帐户使用加密连接,请使用CREATE USER创建带有REQUIRE SSL
子句的帐户,或使用ALTER USER为现有帐户添加REQUIRE SSL
子句。除非 MySQL 支持加密连接并且可以构建加密连接,否则使用该帐户的 Client 端的连接尝试将被拒绝。
REQUIRE
子句允许使用其他与加密相关的选项,这些选项可用于实施比REQUIRE SSL
更严格的安全要求。有关使用使用各种REQUIRE
选项配置的帐户进行连接的 Client 端可能指定或必须指定哪些命令选项的更多详细信息,请参阅创建用户 SSL/TLS 选项。
要为加密连接指定其他参数,请考虑至少在服务器端设置ssl_cert和ssl_key系统变量,在 Client 端至少设置--ssl-ca选项。请参见第 6.3.1 节“配置 MySQL 以使用加密连接”,该文档还描述了用于证书和密钥文件自动生成和自动发现的服务器功能。
证书颁发机构(CA)证书文件的路径名,采用 PEM 格式。该文件包含受信任的 SSL 证书颁发机构列 table。
若要告诉 Client 端在与服务器构建加密连接时不对服务器证书进行身份验证,请既不指定--ssl-ca也不指定--ssl-capath。服务器仍然根据为 Client 帐户构建的任何适用要求来验证 Client,并且它仍然使用在服务器端指定的任何ssl_ca或ssl_capath系统变量值。
要为服务器指定 CA 文件,请设置ssl_ca系统变量。
包含 PEM 格式的受信任 SSL 证书颁发机构(CA)证书文件的目录的路径名。对此功能的支持取决于用于编译 MySQL 的 SSL 库。参见第 6.3.4 节“依赖于 SSL 库的功能”。
若要告诉 Client 端在与服务器构建加密连接时不对服务器证书进行身份验证,请既不指定--ssl-ca也不指定--ssl-capath。服务器仍然根据为 Client 帐户构建的任何适用要求来验证 Client,并且它仍然使用在服务器端指定的任何ssl_ca或ssl_capath系统变量值。
要指定服务器的 CA 目录,请设置ssl_capath系统变量。
Client 端 SSL 公钥证书文件的路径名,PEM 格式。
要指定服务器 SSL 公钥证书文件,请设置ssl_cert系统变量。
连接加密的允许密码列 table。如果列 table 中不支持密码,则加密连接将不起作用。
为了获得最大的可移植性,* cipher_list
*应该是一个或多个密码名称的列 table,以冒号分隔。 OpenSSL 和 yaSSL 都可以理解这种格式。例子:
--ssl-cipher=AES128-SHA
--ssl-cipher=DHE-RSA-AES128-GCM-SHA256:AES128-SHA
OpenSSL 支持更灵活的语法来指定密码,如 OpenSSL 文档https://www.openssl.org/docs/manmaster/man1/ciphers.html中所述。 yaSSL 不会,因此对于使用 yaSSL 编译的 MySQL 发行版,尝试使用扩展语法失败。
有关 MySQL 支持的加密密码的信息,请参见第 6.3.2 节“加密的连接 TLS 协议和密码”。
要指定服务器的加密密码,请设置ssl_cipher系统变量。
包含 PEM 格式的证书吊销列 table 的文件的路径名。对吊销列 table 功能的支持取决于用于编译 MySQL 的 SSL 库。参见第 6.3.4 节“依赖于 SSL 库的功能”。
如果--ssl-crl和--ssl-crlpath均未给出,则即使 CA 路径包含证书吊销列 table,也不会执行 CRL 检查。
要指定服务器的吊销列 table 文件,请设置ssl_crl系统变量。
包含 PEM 格式的证书吊销列 table 文件的目录的路径名。对吊销列 table 功能的支持取决于用于编译 MySQL 的 SSL 库。参见第 6.3.4 节“依赖于 SSL 库的功能”。
如果--ssl-crl和--ssl-crlpath均未给出,则即使 CA 路径包含证书吊销列 table,也不会执行 CRL 检查。
要指定服务器的吊销列 table 目录,请设置ssl_crlpath系统变量。
Client 端 SSL 私钥文件的路径名(PEM 格式)。为了提高安全性,请使用 RSA 密钥大小至少为 2048 位的证书。
如果密钥文件受密码保护,则 Client 端程序会提示用户 Importing 密码。密码必须以交互方式提供;它不能存储在文件中。如果密码不正确,程序将 continue 运行,好像无法读取密钥。
要指定服务器 SSL 私钥文件,请设置ssl_key系统变量。
此选项指定与服务器的连接的所需安全状态。按照严格性从高到低的 Sequences,这些模式值是允许的:
-
DISABLED
:构建未加密的连接。这就像旧版--ssl=0选项或其同义词(--skip-ssl,--disable-ssl)。PREFERRED
:如果服务器支持加密连接,则构建加密连接;如果无法构建加密连接,则退回到未加密连接。如果未指定--ssl-mode,则为默认设置。
Unix 套接字文件上的连接未使用PREFERRED
加密。要对 Unix 套接字文件连接强制加密,请使用REQUIRED
或更严格的模式。 (但是,默认情况下套接字文件传输是安全的,因此加密套接字文件连接将使其不再安全并增加 CPU 负载.)
-
REQUIRED
:如果服务器支持加密连接,则构建加密连接。如果无法构建加密连接,则连接尝试将失败。 -
VERIFY_CA
:与REQUIRED
相似,但还要对照配置的 CA 证书验证服务器证书颁发机构(CA)证书。如果找不到有效的匹配 CA 证书,则连接尝试将失败。 -
VERIFY_IDENTITY
:与VERIFY_CA
类似,但还通过对照服务器发送给 Client 端的证书中的身份检查 Client 端用于连接到服务器的主机名来执行主机名身份验证: -
从 MySQL 5.7.23 开始,如果 Client 端使用 OpenSSL 1.0.2 或更高版本,则 Client 端将检查其用于连接的主机名是否与服务器证书中的“使用者备用名称”值或“通用名称”值匹配。
- 否则,Client 端将检查其用于连接的主机名是否与服务器证书中的“公用名”值匹配。
如果不匹配,连接将失败。对于加密连接,此选项有助于防止中间人攻击。就像旧版--ssl-verify-server-cert选项一样。
Note
使用VERIFY_IDENTITY
进行的主机名身份验证不适用于服务器自动创建的或使用mysql_ssl_rsa_setup手动创建的自签名证书(请参阅第 6.3.3.1 节“使用 MySQL 创建 SSL 和 RSA 证书和密钥”)。此类自签名证书不包含服务器名称作为“通用名称”值。
主机名身份验证也不适用于使用通配符指定“公用名”的证书,因为该名会与服务器名进行逐字比较。
--ssl-mode选项与 CA 证书选项进行交互,如下所示:
-
如果未明确设置--ssl-mode,则使用--ssl-ca或--ssl-capathtable 示--ssl-mode=VERIFY_CA。
-
对于
VERIFY_CA
或VERIFY_IDENTITY
的--ssl-mode值,还需要--ssl-ca或--ssl-capath来提供与服务器使用的证书匹配的 CA 证书。 -
一个显式--ssl-mode选项(其值为
VERIFY_CA
或VERIFY_IDENTITY
以外的值)以及一个显式--ssl-ca或--ssl-capath选项将产生警告,即使指定了 CA 证书选项,也不会对服务器证书进行验证。
-
--ssl-mode选项已添加到 MySQL 5.7.11 中。
要要求 MySQL 帐户使用加密连接,请使用CREATE USER创建带有REQUIRE SSL
子句的帐户,或使用ALTER USER为现有帐户添加REQUIRE SSL
子句。除非 MySQL 支持加密连接并且可以构建加密连接,否则使用该帐户的 Client 端的连接尝试将被拒绝。
REQUIRE
子句允许使用其他与加密相关的选项,这些选项可用于实施比REQUIRE SSL
更严格的安全要求。有关使用使用各种REQUIRE
选项配置的帐户进行连接的 Client 端可能指定或必须指定哪些命令选项的更多详细信息,请参阅创建用户 SSL/TLS 选项。
Note
从 MySQL 5.7.11 开始不推荐使用--ssl-verify-server-cert选项,并在 MySQL 8.0 中将其删除。请改用--ssl-mode=VERIFY_IDENTITY。
此选项使 Client 机通过对照服务器发送给 Client 机的证书中的身份检查 Client 机用于连接到服务器的主机名来执行主机名身份验证:
-
从 MySQL 5.7.23 开始,如果 Client 端使用 OpenSSL 1.0.2 或更高版本,则 Client 端将检查其用于连接的主机名是否与服务器证书中的“使用者备用名称”值或“通用名称”值匹配。
- 否则,Client 端将检查其用于连接的主机名是否与服务器证书中的“公用名”值匹配。
如果不匹配,连接将失败。对于加密连接,此选项有助于防止中间人攻击。主机名身份验证默认为禁用。
Note
主机名身份验证不适用于服务器自动创建的或使用mysql_ssl_rsa_setup手动创建的自签名证书(请参阅第 6.3.3.1 节“使用 MySQL 创建 SSL 和 RSA 证书和密钥”)。此类自签名证书不包含服务器名称作为“通用名称”值。
主机名身份验证也不适用于使用通配符指定“公用名”的证书,因为该名会与服务器名进行逐字比较。
此选项指定 Client 端允许进行加密连接的 TLS 协议。该值是一个或多个逗号分隔的协议版本的列 table。例如:
mysql --tls-version="TLSv1.1,TLSv1.2"
可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。应该选择允许的协议,以免在列 table 中留下“漏洞”。例如,这些值没有孔:
--tls-version="TLSv1,TLSv1.1,TLSv1.2"
--tls-version="TLSv1.1,TLSv1.2"
--tls-version="TLSv1.2"
该值确实有孔,不应使用:
--tls-version="TLSv1,TLSv1.2"
有关详细信息,请参见第 6.3.2 节“加密的连接 TLS 协议和密码”。
MySQL 5.7.10 中添加了此选项。
要指定服务器允许的 TLS 协议,请设置tls_version系统变量。