Mysql config editor - MySQL配置工具
mysql_config_editor工具允许您将身份验证凭据存储在名为.mylogin.cnf的混淆登录路径文件中。该文件的位置是Windows上的%APPDATA%MySQL目录和非Windows系统上当前用户的主目录。稍后,MySQL客户端程序可以读取该文件以获取连接到MySQL服务器的身份验证凭据。
.mylogin.cnf登录路径文件的未混淆格式由选项组组成,类似于其他选项文件。.mylogin.cnf中的每个选项组称为“登录路径”,它是一个只允许某些选项的组:主机、用户、密码、端口和套接字。可以将登录路径选项组视为一组指定要连接到哪个MySQL服务器以及使用哪个帐户进行身份验证的选项。以下是未混淆的示例:
[client] user = mydefaultname password = mydefaultpass host = 127.0.0.1 [mypath] user = myothername password = myotherpass host = localhost
当你调用客户端程序连接到服务器时,客户端使用.mylogin.cnf与其他选项文件一起。它的优先级高于其他选项文件,但低于在客户端命令行上明确指定的选项。
要指定备用登录路径文件名,设置MYSQL_TEST_LOGIN_FILE环境变量。此变量由mysql_config_editor、标准MySQL客户端(如mysql、mysqladmin等)和mysql-test-run.pl测试实用程序识别。
程序使用登录路径文件中的组如下:
mysql_config_editor默认情况下,如果在指定–login-path=name选项以明确指示要使用哪个登录路径时操作客户端登录路径,则对客户端进行操作。
如果没有–login-path选项,客户端程序将从登录路径文件中读取与从其他选项文件中读取相同的选项组。考虑以下命令:
mysql
默认情况下,mysql客户端从其他选项文件中读取[client]和[mysql]组,因此它也从登录路径文件中读取它们。
有–login-path选项时,客户端程序还从登录路径文件中读取指定的登录路径。从其他选项文件中读取的选项组保持不变。考虑以下命令:
mysql --login-path=mypath
mysql客户端从其他选项文件中读取[client]和[mysql],并从登录路径文件中读取[client]、[mysql]和[mypath]。
即使使用–no-defaults选项,客户端程序也会读取登录路径文件,除非设置了–no-login-paths。这允许在存在–no-defaults的情况下以更安全的方式指定密码。
mysql_config_editor对.mylogin.cnf文件进行混淆,使其无法作为明文读取,并且当客户端程序将其内容解混淆时,其内容仅在内存中使用。这样,密码可以以非明文格式存储在文件中,并在以后的任何时候无需在命令行或环境变量中暴露即可使用。mysql_config_editor提供了一个显示登录路径文件内容的打印命令,但即使在这种情况下,密码值也进行了掩码处理,以防止其他人看到它们。
mysql_config_editor使用的混淆防止了密码在.mylogin.cnf中以明文形式出现,并提供了防止意外密码暴露的安全措施。例如,如果你在屏幕上显示一个未混淆的常规my.cnf选项文件,其中包含的任何密码都对任何人都可见。但是,对于.mylogin.cnf,情况并非如此,但使用的混淆不太可能阻止决心的攻击者,因此你不应该认为它是不可破解的。能够在你的机器上获得系统管理权限的用户可能会以某种努力解开.mylogin.cnf文件。
登录路径文件必须对当前用户可读且可写,对其他用户不可访问。否则,mysql_config_editor会忽略它,客户端程序也不会使用它。
像这样调用mysql_config_editor:
mysql_config_editor [program_options] command [command_options]
如果登录路径文件不存在,mysql_config_editor将创建它。
命令参数如下所示: - program_options包括general mysql_config_editor选项。
- command指示要对.mylogin.cnf登录路径文件执行的操作。例如,set将登录路径写入文件,remove将删除登录路径,print显示登录路径内容。
- command_options指示特定于命令的任何附加选项,例如登录路径名称和登录路径中的值。
命令名称在程序参数集合中的位置很重要。例如,这些命令行具有相同的参数,但产生不同的结果: mysql_config_editor –help set mysql_config_editor set –help
第一个命令行显示一般mysql_config_editor帮助消息,并忽略set命令。第二个命令行显示针对set命令的帮助消息。
假设你想要建立一个客户端登录路径,该登录路径定义了默认的连接参数,以及一个名为remote的额外登录路径,用于连接到远程主机remote.example.com上的MySQL服务器。你想要按照以下方式登录:
默认情况下,连接到本地服务器,用户名和密码分别为localuser和localpass
连接到远程服务器,用户名和密码分别为remoteuser和remotepass
要在.mylogin.cnf文件中设置登录路径,请使用以下set命令。每行输入一个命令,并在提示输入密码时输入适当的密码:
$> mysql_config_editor set --login-path=client --host=localhost --user=localuser --password Enter password: enter password "localpass" here $> mysql_config_editor set --login-path=remote --host=remote.example.com --user=remoteuser --password Enter password: enter password "remotepass" here
mysql_config_editor 默认使用客户端登录路径,因此可以在第一个命令中省略 –login-mysql_config_editor 默认使用客户端登录路径,因此可以在第一个命令中省略 –login-path=client 选项而不改变其效果。
要查看 mysql_config_editor 写入 .mylogin.cnf 文件的内容,请使用 print 命令:
$> mysql_config_editor print --all [client] user = localuser password = ***** host = localhost [remote] user = remoteuser password = ***** host = remote.example.com
print 命令将每个登录路径显示为一组以方括号内的登录路径名称开头的行,后面是登录路径的选项值。密码值被掩码,不会以明文形式出现。
如果您不指定 –all 以显示所有登录路径或 –login-path=name 以显示指定名称的登录路径,则 print 命令默认显示客户端登录路径(如果有)。
如前所示,登录路径文件可以包含多个登录路径。这样,mysql_config_editor 使设置多个“个性”连接到不同的 MySQL 服务器变得容易,或者连接到给定服务器时使用不同的帐户。稍后可以使用 –login-path 选项按名称选择这些中的任何一个。例如,要连接到远程服务器,请使用此命令:
mysql --login-path=remote
在这里,mysql 从其他选项文件中读取 [client] 和 [mysql] 选项组,并从登录路径文件中读取 [client]、[mysql] 和 [remote] 组。
要连接到本地服务器,请使用此命令:
mysql --login-path=client
因为 mysql 默认读取客户端和 mysql 登录路径,所以在这种情况下 –login-path 选项不会添加任何内容。这个命令等同于这个:
mysql
从登录路径文件中读取的选项优先于从其他选项文件中读取的选项。从登录路径文件中出现的较晚的组中的选项优先于文件中较早的组中的选项。
mysql_config_editor 将按照创建顺序将登录路径添加到登录路径文件中,因此您应该首先创建更通用的登录路径,然后创建更具体的路径。如果需要移动登录路径文件中的登录路径,可以将其删除,然后重新创建以将其添加到末尾。例如,客户端登录路径更一般,因为它被所有客户端程序读取,而 mysqldump 登录路径仅被 mysqldump 读取。后面的选项覆盖前面的选项,因此将登录路径放在 client 和 mysqldump 的顺序下,可以使 mysqldump 特定的选项覆盖客户端选项。
当使用 mysql_config_editor 的 set 命令创建登录路径时,不需要指定所有可能的选项值(主机名、用户名、密码、端口、套接字)。只有给定的值才会写入路径。以后需要的任何缺失值都可以在调用客户端路径以连接到 MySQL 服务器时指定,无论是在其他选项文件中还是在命令行上。命令行上指定的任何选项都会覆盖登录路径文件或其他选项文件中指定的选项。例如,如果远程登录路径中的凭据也适用于 remote2.example.com 主机,那么像这样连接到该主机上的服务器:
mysql --login-path=remote --host=remote2.example.com