MySQL 外壳 8.0  / 第 4 章 MySQL Shell 入门  /  4.4 可插拔密码存储

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 打开会话时,它都会从配置的 Secret Store Helper 中检索密码以登录到服务器,而无需以交互方式输入密码。这同样适用于由 MySQL Shell 执行的脚本。如果没有配置 Secret Store Helper,则以交互方式请求密码。

重要的

MySQL Shell 仅通过 Secret Store 的方式持久化服务器 URL 和密码,并不会自行持久化密码。

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

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

MySQL Shell 为以下 Secret Stores 提供内置支持:

  • MySQL 登录路径,在 MySQL 服务器支持的所有平台上都可用。它由mysql_config_editor 提供持久存储的 MySQL 配置实用程序提供。请参阅 mysql_config_editor — MySQL 配置实用程序。在 MySQL Shell 8.0.30 之前 mysql_config_editor的版本中,只要系统上安装了 MySQL 客户端包就可用。从 MySQL Shell 8.0.30 开始,Linux 构建了 MySQL Shell 捆绑包 mysql_config_editor,以便在系统上未安装 MySQL 客户端包时可以使用该功能。

  • macOS 钥匙串,请参见 此处

  • Windows API,请参见 此处

当 MySQL Shell 以交互模式运行时,每当启动新会话并提示用户输入密码时,都会执行密码检索。在提示之前,使用会话的 URL 向 Secret Store Helper 查询密码。如果找到匹配项,则使用此密码打开会话。如果检索到的密码无效,则会在日志中添加一条消息,密码会从 Secret Store 中删除,并且 MySQL Shell 会提示您输入密码。

如果 MySQL Shell 在非交互模式下运行(例如 --no-wizard使用过),则密码检索的执行方式与交互模式下相同。但在这种情况下,如果 Secret Store Helper 没有找到有效密码,MySQL Shell 会尝试打开一个没有密码的会话。

只要成功连接到 MySQL 服务器并且密码未被 Secret Store Helper 检索到,就可以存储服务器 URL 的密码。存储密码的决定是根据此处描述的 credentialStore.savePasswords和 做出的credentialStore.excludeFilters

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

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

  • 你使用内置\connect命令

  • 你用的shell.connect()方法

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