MySQL Shell 8.4  /  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 方法