MySQL Shell 9.0  /  MySQL Shell 入门  /  可插拔密码存储

4.4 可插拔密码存储

为了使使用 MySQL Shell 更流畅和安全,您可以使用密钥链等秘密存储来持久保存服务器连接的密码。您可以在交互式模式下输入连接密码,并将密码与服务器 URL 存储为连接凭据。例如

mysql-js> \connect user@localhost:3310
Creating a session to 'user@localhost:3310'
Please provide the password for 'user@localhost:3310': ********
Save password for 'user@localhost:3310'? [Y]es/[N]o/Ne[v]er (default No): y

一旦服务器 URL 的密码被存储起来,每当 MySQL Shell 打开一个会话时,它都会从配置的秘密存储帮助器中检索密码,以登录服务器,而无需在交互式模式下输入密码。对于由 MySQL Shell 执行的脚本也是如此。如果没有配置秘密存储帮助器,则会交互式地要求输入密码。

重要

MySQL Shell 仅通过秘密存储方式持久保存服务器 URL 和密码,它本身不会持久保存密码。

只有在手动输入密码时才会持久保存密码。如果使用服务器 URI 类型的连接字符串或在运行 mysqlsh 时在命令行中提供密码,则不会持久保存密码。

连接到 MySQL Shell 的最大密码长度为 128 个字符。

MySQL Shell 为以下秘密存储提供内置支持

  • MySQL 登录路径,可在 MySQL 服务器支持的所有平台上使用。它由 MySQL 配置实用程序 mysql_config_editor 提供,该实用程序提供持久存储。参见 mysql_config_editor — MySQL 配置实用程序。Linux 版本的 MySQL Shell 包含 mysql_config_editor,以便在系统上没有安装 MySQL 客户端软件包的情况下可以使用该功能。

  • macOS 密钥链,请参见 此处

  • Windows API,请参见 此处

当 MySQL Shell 在交互式模式下运行时,每当启动新会话并且系统将提示用户输入密码时,就会执行密码检索。在提示之前,将使用会话的 URL 查询秘密存储帮助器以获取密码。如果找到匹配项,则使用此密码打开会话。如果检索到的密码无效,则会在日志中添加一条消息,密码将从秘密存储中擦除,并且 MySQL Shell 会提示您输入密码。

如果 MySQL Shell 在非交互式模式下运行(例如,使用了 --no-wizard),则密码检索与交互式模式相同。但在这种情况下,如果秘密存储帮助器没有找到有效的密码,MySQL Shell 会尝试在没有密码的情况下打开会话。

每当成功连接到 MySQL 服务器并且秘密存储帮助器没有检索到密码时,都可以存储服务器 URL 的密码。是否存储密码的决定是根据此处描述的 credentialStore.savePasswordscredentialStore.excludeFilters 做出的。

在以下情况下执行自动密码存储和检索

  • 使用任何连接选项调用 mysqlsh,在建立第一个会话时

  • 使用内置的 \connect 命令

  • 使用 shell.connect() 方法

  • 使用任何需要连接的 AdminAPI 方法