简介
从可用性角度来看,在各种主机上维护不同用户和数据库的凭证可能具有挑战性。如果您定期登录到多个 MySQL 服务器,或者您的项目出于安全原因拥有具有独特权限的独立用户帐户,您可能会很容易忘记如何连接到所需的帐户。
幸运的是,MySQL 提供了一个名为 mysql_config_editor
的小型实用程序,专门用于存储和管理 MySQL 凭证,以便您可以使用 MySQL 客户端和工具轻松进行身份验证。在本指南中,我们将介绍 mysql_config_editor
的工作原理、如何安全地管理多个凭证以及如何让其他 MySQL 工具利用配置对您的服务器进行身份验证。
mysql_config_editor
如何工作?
mysql_config_editor
实用程序是 MySQL 安装中包含的一个小型程序,用于管理连接到不同 MySQL 服务器或不同帐户的凭证。它将凭证信息加密并存储在您主目录中名为 .mylogin.cnf
的文件中。
每组描述如何登录 MySQL 帐户的凭证都称为“登录路径”(login path)。这些通常指定帐户的用户名和密码,还可以额外存储有关如何连接到相应 MySQL 服务器的相关信息,例如 MySQL 监听的主机名和端口。
MySQL 客户端和工具会自动配置为使用 .mylogin.cnf
文件中的信息来帮助登录 MySQL 服务器。您可以在 MySQL 工具(如 mysql
客户端)上使用 --login-path=
参数来指定应使用哪个登录详细信息。如果未提供登录路径,工具将使用与默认登录路径(称为 client
)关联的凭证(如果已定义)。
如果登录路径未定义某些值,MySQL 客户端和工具将改用其配置的默认值。例如,如果在使用 mysql_config_editor
创建登录路径时未指定主机,mysql
客户端将自动假定为 localhost
,就像您在命令行上手动提供凭证时省略 --host=
选项一样。
通过创建新的登录路径定义凭证
我们可以使用 mysql_config_editor
工具来设置一个新的登录路径。
定义新登录路径的一般语法如下
mysql_config_editor set [options]
通常,您会包含以下一些选项
--login-path=
:您希望用于这些凭证的标签--user=
:帐户用户名--password
:一个标志,用于指示mysql_config_editor
提示输入帐户密码。密码提示允许您安全地输入密码,这样它就不会像直接在命令行中提供那样被记录到 shell 历史文件中。--host=
:托管 MySQL 服务器的主机名或 IP 地址。--port=
:MySQL 服务器监听的端口号。--socket=
:如果您通过 Unix 套接字连接到本地服务器,则为本地套接字文件的路径。
您只需提供与 MySQL 实用程序默认选项不同的信息。
创建条目时,请记住 mysql_config_editor
不提供编辑登录路径创建后与其关联的详细信息的方式。要更改任何详细信息,您需要再次重新指定所有相应的连接信息以覆盖以前的条目。
为本地帐户设置连接信息
例如,要在本地 MySQL 服务器上为名为 salesadmin
的用户创建登录,您可以输入
mysql_config_editor set --login-path=sales --user=salesadmin --password
您将收到帐户密码提示,新的连接信息将保存到 .mylogin.cnf
文件中,标签名为 sales
。我们通过 --user=salesadmin
提供帐户名,并通过包含 --password
标志来指示 mysql_config_editor
提示输入密码。
由于这是本地帐户,如果在类 Unix 系统上运行,它将通过本地套接字文件连接。但是,如果您没有修改 MySQL 以使其运行方式不同,MySQL 工具将知道如何操作,您无需在配置时提供这些详细信息。
为远程帐户设置连接信息
要在监听端口 5555 的主机 dev.example.com
上的 MySQL 服务器上保存远程用户 testuser
的连接信息,您可以输入
mysql_config_editor set --login-path=testing --user=testuser --password --host=dev.example.com --port=5555
testing
登录路径的条目将包含自动连接到 dev.example.com
上托管的 MySQL 数据库所需的所有信息,使用用户帐户 testuser
。
设置默认连接信息
MySQL 工具设计为在没有明确连接信息的情况下调用时使用合理的默认值。例如,在类 Unix 系统上,如果未被覆盖,它们将尝试使用以下详细信息进行连接
- 用户:您的操作系统用户名
- 密码:无密码
- 主机:
localhost
,默认情况下表示您将通过 Unix 套接字连接到平台的默认位置。
如果这些选项不适用于您的用例,您可以使用 mysql_config_editor
更改默认连接信息。为此,请提供您希望默认使用的连接信息,而无需指定登录路径。
例如
mysql_config_editor set --user=root --password
这会将连接信息存储在通用 client
登录路径下,当未提供其他登录路径时,MySQL 工具会读取此路径。
使用登录路径登录
要使用您已配置的连接信息,请在命令行上使用 MySQL 客户端和工具指定 --login-path=
。
例如,要登录到之前配置的本地 salesadmin
帐户,我们可以告诉 mysql
使用 sales
登录路径
mysql --login-path=sales
要使用 testuser
帐户登录到 dev.example.com
服务器,我们可以改为指定 testing
登录路径
mysql --login-path=testing
如果您调用 mysql
时不带 --login-path=
,它将检查您配置的 client
登录路径,并尝试使用 root
帐户将您登录到本地数据库
mysql
在每种情况下,您都将登录到相应的帐户,而无需提供任何额外详细信息。
您可以通过输入以下命令来验证您连接的用户身份
SELECT user();
+----------------------+| user() |+----------------------+| salesadmin@localhost |+----------------------+1 row in set (0.00 sec)
如果您想验证用户和连接方法,可以改用 status
命令
status
--------------mysql Ver 8.0.27-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))Connection id: 28Current database:Current user: sammy@localhostSSL: Not in useCurrent pager: stdoutUsing outfile: ''Using delimiter: ;Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)Protocol version: 10Connection: Localhost via UNIX socketServer characterset: utf8mb4Db characterset: utf8mb4Client characterset: utf8mb4Conn. characterset: utf8mb4UNIX socket: /var/run/mysqld/mysqld.sockBinary data as: HexadecimalUptime: 1 day 21 hours 37 min 49 secThreads: 2 Questions: 66 Slow queries: 0 Opens: 186 Flush tables: 3 Open tables: 105 Queries per second avg: 0.000--------------
您可以在 Current user
下查看当前用户,但也可以通过查看 Connection
和 UNIX socket
条目来查看您如何连接到服务器的详细信息。
显示可用登录路径
虽然您定义的连接详细信息存储在主目录中名为 .mylogin.cnf
的文件中,但内容是加密的以确保安全。要查看配置的信息,您需要再次使用 mysql_config_editor
。
要查看您已配置的默认登录信息(存储在 client
登录路径下),您可以使用 print
子命令,无需任何额外选项
mysql_config_editor print
[client]user = "root"password = *****
MySQL 使用 INI 样式文件格式在相应的登录路径标签下分组连接详细信息。您可能还会注意到密码被遮掩了。这再次是一种安全措施,以防泄露保存的密码。
要查看不同的登录路径,您可以像往常一样提供 --login-path=
选项
mysql_config_editor print --login-path=testing
[testing]user = "testuser"password = *****host = "dev.example.com"port = 5555
要显示所有已配置的登录路径,您可以改为添加 --all
标志
mysql_config_editor print --all
[sales]user = "salesadmin"password = *****[testing]user = "testuser"password = *****host = "dev.example.com"port = 5555[client]user = "root"password = *****
移除连接信息
您可以使用 remove
子命令移除与登录路径关联的连接信息。提供 --login-path
将允许 mysql_config_editor
定位到相应的条目。
例如,要移除 sales
登录路径的连接信息,您可以输入
mysql_config_editor remove --login-path=sales
如果您检查配置的条目,您会发现 sales
登录路径已被移除
mysql_config_editor print --all
[testing]user = "testuser"password = *****host = "dev.example.com"port = 5555[client]user = "root"password = *****
您还可以从登录路径的连接信息中移除特定参数。例如,如果 "dev.example.com" 上的 MySQL 服务器已重新配置为现在在默认的 3306 端口上运行,您可以移除端口信息。为此,您需要提供 --port
标志以及 --login-path=
mysql_config_editor remove --login-path=testing --port
您可以通过再次打印条目来验证端口规范已从 testing
登录路径中移除
mysql_config_editor print --all
[testing]user = "testuser"password = *****host = "dev.example.com"[client]user = "root"password = *****
您还可以通过输入以下命令删除所有登录路径并创建一个新的空白 .mylogin.cnf
文件
mysql_config_editor reset
这会移除所有已配置的登录路径。
总结
在本指南中,我们探讨了 mysql_config_editor
,它是 MySQL 的小型实用程序之一,旨在通过管理连接信息来改善用户体验。我们介绍了如何使用登录路径配置连接信息,以及如何使用我们配置的凭证调用 MySQL 工具。我们还讨论了如何覆盖默认值以及管理现有登录路径信息。
通过利用 mysql_config_editor
和 MySQL 项目提供的其他工具,您可以消除从单个位置管理多个项目时可能出现的一些挫败感。它是一个相对简单的工具的良好范例,旨在简化重复、易出错的任务,帮助您专注于更重要的工作。
如果您正在使用 Prisma,可以在配置 MySQL 数据库连接器时设置 MySQL 数据库的连接信息。