MySQL mysql_config_editor 设置快速免密登录

文章目录

从 MySQL 5.6 开始,提供了一个新的实用程序:mysql_config_editor,它允许你将身份认证信息存储到一个名为 .mylogin.cnf 的登录路径文件中,该文件的内容进行了混淆加密。对于 Windows 系统,该文件位于 %APPDATA%\MySQL 目录中;对于其他系统,该文件位于当前用户的家目录中。

配置了登录路径文件之后,MySQL 客户端程序连接服务器时可以使用其中的内容进行认证,不需要每次都输入登录信息。

先看没有进行设置之前的情况,我们使用 MySQL 8.0 版本,操作系统为 CentOS 7:

[root@mysql80 ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@mysql80 ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.13 MySQL Community Server - GPL

Copyright (c) 2000,2018,Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

我们在使用 root 登录时,系统提示需要输入密码。接下来使用 mysql_config_editor 进行设置。

[root@mysql80 ~]# mysql_config_editor set --login-path=localroot --host=localhost --port=3306 --user=root --password
Enter password:

其中,set用于设置一个登录路径;--login-path用于指定登录路径名称,随后可以使用该名称进行登录;其他信息和直接登录时一样,执行该命令需要输入一次密码。

执行成功后,就会在当前用户的家目录(此处为 /root)中创建一个隐藏的文件,其中存储了我们设置的登录信息。

[root@mysql80 ~]# ls -l .mylogin.cnf 
-rw-------. 1 root root 156 Dec 20 02:56 .mylogin.cnf

当我们再次登录时,就可以使用登录路径,而不需要输入密码了:

[root@mysql80 ~]# mysql --login-path=localroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.13 MySQL Community Server - GPL

Copyright (c) 2000,Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

就是这么简单。以下为官方文档内容,仅供参考:

文件 .mylogin.cnf 未加密之前的内容和其他的选项文件类似,也是由多个选项组构成。每个选项组称为一个“登录路径”,其中只能包含以下特定的选项信息:hostuserpasswordport 以及 socket。每个选项组就是一系列连接选项,指定了要连接的 MySQL 服务器和账户信息。以下是一个未加密之前的登录文件示例:

[client]
user = mydefaultname
password = mydefaultpass
host = 127.0.0.1
[mypath]
user = myothername
password = myotherpass
host = localhost

当你使用客户端连接服务器时,客户端将会使用 .mylogin.cnf 和其他的选项文件获取相关信息。该文件的优先级比其他选项文件要高,但是比直接在命令行指定的参数优先级低。关于选项文件的优先级,可以参考 第 4.2.7 节,“使用选项文件”

如果想要指定一个非默认的登录路径文件名,可以设置环境变量MYSQL_TEST_LOGIN_FILE。该变量可以被 mysql_config_editor 使用,同时也可以被标准的 MySQL 客户端工具(mysql、mysqladmin 等等)以及测试工具 mysql-test-run.pl 读取。

这些程序按照以下方式使用登录路径中的选项组:

  • 如果没有使用--login-path=name选项明确指定登录路径名,mysql_config_editor 默认使用 client 登录路径。

  • 如果没有指定--login-path选项,客户端程序读取它们在其他选项文件中使用的相同选项组。考虑以下命令:

    shell> mysql
    

    默认情况下,mysql 客户端从其他选项文件中读取 [client] 和 [mysql] 选项组,因此它也会从登录路径文件中读取[client] 和 [mysql] 选项组。

  • 如果指定了--login-path选项,客户端程序还会从登录路径文件中读取指定的登录路径。另外,还是会从其他选项文件中读取默认的选项组。考虑以下命令:

    shell> mysql --login-path=mypath
    

    mysql 客户端从其他选项文件中读取 [client] 和 [mysql] 选项组,并且从登录路径文件中读取 [client]、[mysql] 以及 [mypath] 选项组。

  • 即使指定了--no-defaults选项,客户端程序仍然会读取登录路径文件。这种方式允许即使指定了--no-defaults,仍然可以更安全地使用密码,而不是在命令行中直接输入。

mysql_config_editor 对 .mylogin.cnf 文件进行了混淆加密,因此无法直接明文读取;而且客户端程序对其内容进行解密后只在内存中进使用。通过这种方式,密码可以存储在一个非明文格式的文件中,随后可以使用这些加密密码,而不需要暴露在命令行参数或环境变量中。mysql_config_editor 提供了一个print命令,用于显示登录路径文件的内容,不过即使是这种情况下,密码仍然是加密后的值,因此绝对不会泄露给其他用户。

mysql_config_editor 使用的混淆处理可以防止密码在 .mylogin.cnf 文件中作为明文存储,并且提供了一个防止秘密无意泄露的安全措施。例如,如果将 my.cnf 选项文件中的信息显示在屏幕上,其中包含的密码信息也就显露无遗了。对于 .mylogin.cnf 文件,则不会发生这种情况。 尽管如此,该文件使用的混淆加密并非牢不可破。获取了系统管理权限的用户可以通过某些方式解密 .mylogin.cnf 文件中的内容。

登录路径文件必须是当前用可读写的,同时其他用户无法访问该文件。否则,mysql_config_editor 将会忽略该文件,客户端程序也不会使用。

[root@mysql80 ~]# ls .mylogin.cnf -l
-rw-------. 1 root root 156 Dec 20 02:56 .mylogin.cnf

调用 mysql_config_editor 的命令如下:

shell> mysql_config_editor [program_options] command [command_options]

如果登录路径文件不存在, mysql_config_editor 将会创建该文件。

命令参数如下:

  • program_options包含通用的 mysql_config_editor 选项。
  • command 表示针对登录文件 .mylogin.cnf 执行的操作。例如,set命令写入一个登录路径,remove命令删除一个登录路径,而print命令显示登录路径的内容。
  • command_options为命令指定额外的选项,例如登录路径的名称和登录路径的配置参数。

程序参数中的命令名的位置非常重要。例如,以下命令具有相同的参数,但是结果并不相同:

shell> mysql_config_editor --help set
shell> mysql_config_editor set --help

第一行中的命令将会显示通用的 mysql_config_editor 帮助信息,并且忽略set命令。第二行命令将会显示set命令相关的帮助信息。

假设你想要创建一个登录路径 client,用于默认的连接参数,并且创建一个额外的登录路径 remote,用于连接主机 remote.example.com 上的 MySQL 服务器。你想要执行以下登录:

  • 默认情况下,使用用户 localuser 和密码 localpass 登录本地服务器。
  • 使用用户 remoteuser 和密码 remotepass 登录远程服务器。

想要在.mylogin.cnf 文件中创建这些登录路径,可以使用以下set命令。每个命令占用一行,并且在提示信息后输入正确的密码:

shell> mysql_config_editor set --login-path=client
         --host=localhost --user=localuser --password
Enter password: # 在此输入密码 "localpass" 
shell> mysql_config_editor set --login-path=remote
         --host=remote.example.com --user=remoteuser --password
Enter password:  在此输入密码 "remotepass"

mysql_config_editor 默认使用 client 登录路径,因此在第一个命令中可以省略--login-path=client选项。

如果想要查看 .mylogin.cnf 文件中的内容,可以使用print命令:

shell> mysql_config_editor print --all
[client]
user = localuser
password = *****
host = localhost
[remote]
user = remoteuser
password = *****
host = remote.example.com

print命令按组显示每个登录路径的信息,每个组以一个标题开始,标题即是登录路径名,使用方括号包含,然后是该登录路径的参数值。密码内容进行了加密,而不显示明文。

如果没有指定显示所有登录路径的--all选项或者显示指定登录路径的--login-path=name选项,print命令将会显示名为 client 的登录路径(如果存在该登录路径的话)。

如上示例所示,登录路径文件中可以存储多个登录路径。通过这种方式,mysql_config_editor 可以很方便地为用户连接不同的 MySQL 服务器,或者为不同用户连接同一个 MySQL 服务器设置多个配置。随后在调用客户端程序时,可以通过--login-path选项选择不同的登录路径。例如,使用以下命令可以连接到远程服务器:

shell> mysql --login-path=remote

此时,mysql客户端将会从其他选项文件中读取 [client] 和 [mysql] 选项组,并且从登录路径文件中读取 [client]、[mysql] 以及 [remote] 选项组。

如果要连接本地服务器,可以使用以下命令:

shell> mysql --login-path=client

由于mysql客户端默认就会读取 client 和 mysql 登录路径,此处的--login-path选项不会增加任何内容。该命令等价于:

shell> mysql

从登录路径文件中读取的选项组比其他文件中的选项组优先级更高。在登录径文件内,后面的配置选项可以覆盖前面的配置。

mysql_config_editor 按照执行命令的顺序添加登录路径,因此应该先创建更通用的登录路径,然后在创建更具体的登录路径。如果想要在登录路径文件中移动某个登录路径,可以先删除,然后在重建添加到最后。例如,登录路径 client 更通用,因为所有的客户端程序都会读取该路径;而登录路径 mysqldump 只会被 mysqldump 程序读取。后面的配置选项可以覆盖前面的配置,因此,按照 client、mysqldump 顺序指定的配置使得 mysqldump 相关的选项将会覆盖 client 选项。

使用 mysql_config_editorset命令创建登录路径时,不需要指定所有的选项值(主机名、用户名、密码、端口以及 socket )。可以为登录路径指定其中一部分选项值。任何连接所必须的参数可以连接 MySQL 服务器时再指定,可以通过其他选项文件或者在命令行中指定。命令行指定的选项比登录路径文件或其他选项文件优先级更高。例如,如果在登录路径 remote 中的参数也可以用于连接主机 remote2.example.com,可以使用以下命令连接到该主机上的服务器:

shell> mysql --login-path=remote --host=remote2.example.com

mysql_config_editor 通用选项

mysql_config_editor 支持以下通用选项,它们可以出现在任何其他命令之前。关于各种命令支持的特定选项,可以参考后文中的 mysql_config_editor 命令以及命令选项

表 4.17 mysql_config_editor 通用选项

选项 描述
--debug 生成调试信息
--help 显示帮助信息并退出
--verbose 详细信息模式
--version 显示版本信息并退出
  • --help,-?

    显示通用的帮助信息并退出。

    如果想要查看关于具体命令的帮助信息,可以使用以下方式的mysql_config_editor命令,其中的 command 是一个非help的命令:

    shell> mysql_config_editor command --help
    
  • --debug[=debug_options],-# debug_options

生成调试日志。一个典型的 debug_options 配置就是 d:t:o,file_name。默认值为 d:t:o,/tmp/mysql_config_editor.trace

  • --verbose,-v

详细信息模式。显示更多的程序执行信息。该选项可以用于诊断问题。

  • --version,-V

显示版本信息并退出。

mysql_config_editor 命令以及命令选项

本节介绍 mysql_config_editor 支持的命令,以及每个命令相关的选项。

另外,mysql_config_editor 还支持一些通用的选项,在每个命令之前都可以指定。关于这些通用选项的描述,可以参考上面的 mysql_config_editor 通用选项。

mysql_config_editor 支持以下命令:

  • help

    显示帮助信息并退出。该命令不支持其他选项。

    如果想要查看关于具体命令的帮助信息,可以使用以下方式的mysql_config_editor命令,其中的 command 是一个非help的命令:

    shell> mysql_config_editor command --help
    
  • print [options]

    以明文的形式显示登录路径的内容,不过密码总是显示为 *****。

    如果没有指定要显示的登录路径,默认值为 client 。如果同时指定了--all--login-path,生效的是--all

    print命令支持以下选项:

    • --help,-?

      显示print命令的帮助信息并退出。

      要查看通用的帮助信息,使用mysql_config_editor --help

    • --all

      显示所有的登录路径信息。

    • --login-path=name,-G name

      显示指定的登录路径信息。

  • remove [options]

    从登录路径文件中删除一个登录路径,或者从已有的登录路径中删除选项。

    只有指定了--host--password--port--socket--user 选项,才会从登录路径中删除相应内容。如果没有指定任意以上选项,remove将会删除整个登录路径。例如,以下命令从登录路径 mypath 中删除 user 选项,而不会删除整个登录路径:

    shell> mysql_config_editor remove --login-path=mypath --user
    

    以下命令删除登录路径 mypath :

    shell> mysql_config_editor remove --login-path=mypath
    

    remove命令支持以下选项:

    • --help,-?

      显示remove命令的帮助信息并退出。

      要查看通用的帮助信息,使用mysql_config_editor --help

    • --host,-h

      删除登录路径中的主机名。

    • --login-path=name,-G name

      指定要删除或修改的登录路径。如果没有指定,默认值为 client 。

    • --password,-p

      删除登录路径中的密码。

    • --port,-P

      删除登录路径中的 TCP/IP 端口号。

    • --socket,-S

      删除登录路径中的 Unix socket 文件名。

    • --user,-u

      删除登录路径中的用户名。

    • --warn,-w

      如果尝试删除默认的登录路径(client),而没有指定--login-path=client,将会警告并提示用户确认。默认启用警告提示;可以使用--skip-warn关闭警告。

  • reset [options]

    清空登录路径文件。

    The reset命令支持以下选项:

    • --help,-?

      显示reset命令的帮助信息并退出。

      要查看通用的帮助信息,使用mysql_config_editor --help

  • set [options]

    写入一个登录路径。

    只有当选项为 --host--password--port--socket或者--user时才会写入登录路径。如果不包含任意以上参数,mysql_config_editor 将会写入一个的登录路径。

    set命令支持以下选项:

    • --help,-?

      显示set命令的帮助信息并退出。

      要查看通用的帮助信息,使用mysql_config_editor --help

    • --host=host_name,-h host_name

      写入登录路径中的主机名。

    • --login-path=name,-G name

      创建的登录路径名称。如果没有指定,默认为client

    • --password,-p

      提示输入一个密码。在 mysql_config_editor 显示提示信息后,输入密码并回车。为了防止其他用户看到输入的密码,mysql_config_editor 不会显示输入的内容。

      如果要指定一个空的密码,直接输入回车。此时写入文件的登录路径将会包含一行类似以下的内容:

      password =
      
    • --port=port_num,-P port_num

      写入登录路径的 TCP/IP 端口号。

    • --socket=file_name,-S file_name

      写入登录路径的 Unix socket 文件。例如,以下命令创建了一个使用 socket 登录的路径:

    [root@mysql80 ~]#  mysql_config_editor set --login-path=localroot --host=localhost --user=root --password --socket=/var/lib/mysql/mysql.sock
    
    • --user=user_name,-u user_name

      写入登录路径的用户名。

    • --warn,-w

      如果尝试覆盖一个已有的登录路径,将会警告并提示用户是否确认覆盖。默认启用告警提示;可以使用--skip-warn关闭警告。

人生本来短暂,你又何必匆匆!点个赞再走吧!

原文地址:https://tonydong.blog.csdn.net

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


在正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示: “兵马未动粮草先行”,看完了相关的配置之后,我们先来创建一张测试表和一些测试数据。 -- 如果存在 person 表先删除 DROP TABLE IF EXISTS person; -- 创建 person 表,其中
> [合辑地址:MySQL全面瓦解](https://www.cnblogs.com/wzh2010/category/1859594.html "合辑地址:MySQL全面瓦解") # 1 为什么需要数据库备份 - 灾难恢复:当发生数据灾难的时候,需要对损坏的数据进行恢复和
物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时段大量连接同时执行操作,会导致数据库在处理上遇到性能瓶颈。为了解决这个问题,行业先驱门充分发扬了分而治之的思想,对大库表进行分割,
然后实施更好的控制和管理,同时使用多台机器的CPU、内存、存储,提供更好的性能。而分治有两种实现方式:垂直拆
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括了 垂直拆分(Scale Up 纵向扩展)和 水平拆分(Scale Out 横向扩展) ,同时简要整理了水平分区的几种策略,现在来回顾一下。 2 水平分区的5种策略 2.1 Hash(哈希) 这种策略是通过对表的一个或多个列的Ha
navicat查看某个表的所有字段的详细信息 navicat设计表只能一次查看一个字段的备注信息,那怎么才能做到一次性查询表的信息呢?SELECT COLUMN_NAME,COLUMN_COMMENT,COLUMN_TYPE,COLUMN_KEY FROM information_schema.CO
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52768613前言:数据库每天的数据不断增多,自动删除机制总体风险太大,想保留更多历史性的数据供查询,于是从小的hbase换到大的hbase上,势在必行。今天记录下这次数据仓库迁移。看下Agenda:彻底卸载MySQL安装MySQL_linux服务器进行数据迁移
文章浏览阅读488次。恢复步骤概要备份frm、ibd文件如果mysql版本发生变化,安装回原本的mysql版本创建和原本库名一致新库,字符集都要保持一样通过frm获取到原先的表结构,通过的得到的表结构创建一个和原先结构一样的空表。使用“ALTER TABLE DISCARD TABLESPACE;”命令卸载掉表空间将原先的ibd拷贝到mysql的仓库下添加用户权限 “chown . .ibd”,如果是操作和mysql的使用权限一致可以跳过通过“ALTER TABLE IMPORT TABLESPACE;”命令恢_alter table discard tablespace
文章浏览阅读225次。当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:字段尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNEDVARCHAR的长度只分配_开发项目 浏览记录表 过大怎么办
文章浏览阅读1.5k次。Mysql创建、删除用户MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):1.新建用户登录MYSQL:@>mysql -u root -p@>密码创建用户:mysql> insert into mysql.user(Host,User,Password) values("localhost_删除mysql用户组
MySQL是一种开源的关系型数据库管理系统,被广泛应用于各类应用程序的开发中。对于MySQL中的字段,我们需要进行数据类型以及默认值的设置,这对于数据的存储和使用至关重要。其中,有一个非常重要的概念就是MySQL字段默认字符串。 CREATE TABLE `my_...
MySQL是一个流行的开源关系型数据库管理系统,广泛应用于Web应用程序开发、数据存储和管理。在使用MySQL时,正确设置字符集非常重要,以确保数据的正确性和可靠性。 在MySQL中,字符集表示为一系列字符和字母的集合。MySQL支持多种字符集,包括ASCII、UTF...
MySQL存储函数 n以内偶数 MySQL存储函数能够帮助用户简化操作,提高效率,常常被用于计算和处理数据。下面我们就来了解一下如何使用MySQL存储函数计算n以内的偶数。 定义存储函数 首先,我们需要定义一个MySQL存储函数,以计算n以内的偶数。下...
MySQL是一个流行的关系型数据库管理系统,基于客户机-服务器模式,可在各种操作系统上运行。 MySQL支持多种字符集,不同的字符集包括不同的字符,如字母、数字、符号等,并提供不同的排序规则,以满足不同语言环境的需求。 //查看MySQL支持的字符集与校对规...
在MySQL数据库中,我们有时需要对特定的字符串进行截取并进行分组统计。这种操作对于数据分析和报表制作有着重要的应用。下面我们将讲解一些基本的字符串截取和分组统计的方法。 首先,我们可以使用substring函数对字段中的字符串进行截取。假设我们有一张表stude...
MySQL提供了多种字符串的查找函数。下面我们就一一介绍。 1. LIKE函数 SELECT * FROM mytable WHERE mycolumn LIKE 'apple%'; 其中"apple%"表示以apple开头的字符串,%表示任意多个字符...
MySQL 是一种关系型数据库管理系统,广泛应用于各种不同规模和类型的应用程序中。在 MySQL 中,处理字符串数据是很常见的任务。有时候,我们需要在字符串的开头添加一定数量的 0 ,以达到一定的位数。比如,我们可能需要将一个数字转换为 4 位或 5 位的字符串,不足的...
MySQL是一种流行的关系型数据库管理系统,支持多种数据类型。以下是MySQL所支持的数据类型: 1. 数值型数据类型: - TINYINT 保存-128到127范围内的整数 - SMALLINT 保存-32768到32767范围内的整数 - MEDIU...
MySQL中存储Emoji表情字段类型 在现代互联网生态中,表情符号已经成为人们展示情感和思想的重要方式之一,因此将表情符号存储到数据库中是一个经常出现的问题。MySQL作为最流行的开源关系型数据库管理系统之一,也需要能够存储和管理这些表情符号的字段类型。 UT...
MySQL是一种关系型数据库管理系统。在MySQL数据库中,有多种不同的数据类型。而其中,最常见的数据类型之一就是字符串类型。在MySQL中,字符串类型的数据通常会被存储为TEXT或VARCHAR类型。 首先,让我们来看一下VARCHAR类型。VARCHAR是My...
MySQL字符串取整知识详解 MySQL是一种开源的关系型数据库管理系统,广泛应用于各个领域。在使用MySQL过程当中,我们经常需要对数据进行取整操作。本文将介绍如何使用MySQL字符串取整来处理数据取整问题。 什么是MySQL字符串取整? MySQL...