为了使使用 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.savePasswords
和 credentialStore.excludeFilters
进行的。
当执行以下操作时,将执行自动密码存储和检索
使用任何连接选项调用 mysqlsh,在建立第一个会话时
使用内置的
\connect
命令使用
shell.connect()
方法使用任何需要连接的 AdminAPI 方法