mysql_config_editor 配置工具

eric0435發表於2019-11-15

mysql_config_editor工具能讓你在一種加密的登入路徑檔案.mylogin.cnf中儲存稽核身份資訊。在Windows中這個檔案儲存在%APPDATA%\MySQL目錄中,在非Windows平臺上儲存在當前使用者的home目錄中。這種檔案可以被MySQL客戶端程式讀取來獲得連線MySQL伺服器的稽核身份資訊。

沒有加密的.mylogin.cnf登入路徑檔案由選項組組成。類似於其它的選項檔案。在.mylogin.cnf檔案中的每個選項組叫作"login path"登入路徑,它是隻允許特定選項的組:host,user,password,port和socket。可以把一個登入路徑選項組認為是一組選項來指定使用那個使用者來連線那個MySQL伺服器的資訊。下面是沒有加密的登入路徑資訊的
例子:

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

當呼叫一個客戶端程式連線MySQL伺服器時,客戶端使用.mylogin.cnf並結合其它的選項檔案。它的優先順序比其它的選項檔案要高,但比在客戶端命令列中顯式指定的要低。

為了指定一個替代的登入路徑檔名,設定MYSQL_TEST_LOGIN_FILE環境變數。這種變數透過mysql_config_editor,透過標準的MySQL客戶端(mysql,mysqladmin等)工具和mysql-test-run.pl測試工具所識別。

程式以以下方式使用登入路徑檔案中的選項組:
.mysql_config_editor在你沒有透過--login-path=name選項來顯式指定登入路徑時預設情況下會使用client選項組。

.在沒有使用--login-path選項的情況下,客戶端程式將像從其它選項檔案中讀取資訊一樣從登入路徑檔案中讀取選項組。比如:
shell>mysql
預設情況下,mysql客戶端程式將從其它的選項檔案中讀取[client]和[mysql]選項組,因此也會從登入路徑檔案中讀取這些資訊。

.使用--login-path選項,客戶端程式額外從登入路徑檔案中訊取命名的登入路徑。仍然與讀取其它選項檔案中的選項組一樣。比如:
shell>mysql --login-path=mypath

mysql客戶端程式將從其它選項檔案中讀取[client]和[mysql]選項組資訊和從登入路徑檔案中讀取[client]和[mysql]選項組資訊。

.即使當--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會忽略它,並且客戶端程式不會使用它。

mysql_config_editor語法:

shell>mysql_config_editor [program options] [command [command options]]

如果登入路徑檔案不存在,mysql_config_editor會建立它。

mysql_config_editor命令有以下引數選項:
.program_options由通用的mysql_config_editor選項組成。

.command指示對.mylogin.cnf登入路徑檔案執行的操作。例如,set將寫一個登入路徑到檔案中,remove將刪除一個登入路徑,print顯示登入路徑內容。

.command_options指示任何指定給命令的額外選項,比如登入路徑名和登入路徑所使用的值。

命令名在程式引數集中的位置很重要。例如,這些命令列具有相同的引數,但產生不同的結果:

[mysql@localhost ~]$ mysql_config_editor --help set
mysql_config_editor Ver 1.0 Distrib 5.7.26, for Linux on x86_64
Copyright (c) 2012, 2019, 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.
MySQL Configuration Utility.
Usage: mysql_config_editor [program options] [command [command options]]
  -#, --debug[=#]     This is a non-debug version. Catch this and exit.
  -?, --help          Display this help and exit.
  -v, --verbose       Write more information.
  -V, --version       Output version information and exit.
Variables (--variable-name=value)
and boolean options {FALSE|TRUE}  Value (after reading options)
--------------------------------- ----------------------------------------
verbose                           FALSE
Where command can be any one of the following :
       set [command options]     Sets user name/password/host name/socket/port
                                 for a given login path (section).
       remove [command options]  Remove a login path from the login file.
       print [command options]   Print all the options for a specified
                                 login path.
       reset [command options]   Deletes the contents of the login file.
       help                      Display this usage/help information.
[mysql@localhost ~]$ mysql_config_editor set --help
mysql_config_editor Ver 1.0 Distrib 5.7.26, for Linux on x86_64
Copyright (c) 2012, 2019, 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.
MySQL Configuration Utility.
Description: Write a login path to the login file.
Usage: mysql_config_editor [program options] [set [command options]]
  -?, --help          Display this help and exit.
  -h, --host=name     Host name to be entered into the login file.
  -G, --login-path=name 
                      Name of the login path to use in the login file. (Default
                      : client)
  -p, --password      Prompt for password to be entered into the login file.
  -u, --user=name     User name to be entered into the login file.
  -S, --socket=name   Socket path to be entered into login file.
  -P, --port=name     Port number to be entered into login file.
  -w, --warn          Warn and ask for confirmation if set command attempts to
                      overwrite an existing login path (enabled by default).
                      (Defaults to on; use --skip-warn to disable.)
Variables (--variable-name=value)
and boolean options {FALSE|TRUE}  Value (after reading options)
--------------------------------- ----------------------------------------
host                              (No default value)
login-path                        client
user                              (No default value)
socket                            (No default value)
port                              (No default value)
warn                              TRUE

第一個命令列顯示了通用的mysql_config_editor的幫助資訊並且忽略了set命令。第二個命令列是顯示了set命令的特定幫助資訊。

假設想要建立一個client登入路徑來定義你的預設連線引數和額外的remote登入路徑來連線遠端伺服器。想要記錄以下資訊:
.預設情況,連線到本地伺服器的使用者名稱與密碼為root和xxzx7817600
.連線到遠端伺服器的使用者名稱與密碼為root和123456

為了在.mylogin.cnf檔案中設定登入路徑,使用下面的set命令。每個命令單獨一行執行並且根據提示輸入相關的密碼:

[mysql@localhost ~]$ mysql_config_editor set --login-path=client --host=192.168.1.250 --user=root --password
Enter password: 
[mysql@localhost ~]$ mysql_config_editor set --login-path=remote --host=192.168.1.251 --user=root --password --port=33306
Enter password: 
[mysql@localhost ~]$

mysql_config_editor預設情況下使用client登入路徑,因此--login-path=client選項從第一個命令中可以被忽略而不會產生影響。

為了查詢mysql_config_editor寫入.mylogin.cnf檔案的內容,執行print命令:

[mysql@localhost ~]$ mysql_config_editor print --all
[client]
user = root
password = *****
host = 192.168.1.250
[remote]
user = root
password = *****
host = 192.168.1.251
port = 33306

print命令以一組行集合來顯示每個登入路徑,在方括號中的選項組頭指示了登入路徑名,接著是登入路徑的選項值。密碼值以星號出現不是以明文來顯示。

如果你在執行print命令時不指定--all選項來顯示所有的登入路徑或不使用--login-path=name來顯示指定的登入路徑,如果存會client登入路徑,那麼預設情況下print命令只會顯示client登入路徑。

[mysql@localhost ~]$ mysql_config_editor print
[client]
user = root
password = *****
host = 192.168.1.250

透過上面的例子可以看到一個登入路徑檔案可以包含多個登入路徑。使用這種方式,mysql_config_editor可以簡單地多個個性化的登入路徑來連線到不同的MySQL伺服器或者使用不同的賬號連線到指定的伺服器。這些登入路徑都可以在呼叫客戶端程式時透過使用--login-path選項來使用。例如,為了連線到遠端伺服器,執行以下命令:

[mysql@localhost ~]$ mysql --login-path=remote  
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 56674
Server version: 5.7.26 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, 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>

上面的命令mysql從其它選項檔案中讀取[client]和[mysql]選項組並且從登入路徑檔案中讀取[mysql]和[remote]選項組資訊。

為了連線到本地伺服器,執行以下命令

[mysql@localhost ~]$ mysql --login-path=client
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.26 Source distribution
Copyright (c) 2000, 2019, 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>

因為預設情況下mysql讀取登入路徑檔案中的client和mysql登入路徑,在這種情況下--login-path選項不會增加其它登入路徑。因此上面的命令等價下面的命令:

[mysql@localhost ~]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.26 Source distribution
Copyright (c) 2000, 2019, 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>

從登入路徑檔案讀取的選項優先於從其他選項檔案讀取的選項。從登入路徑檔案中稍後出現的登入路徑組讀取的選項優先於從檔案中較早出現的登入路徑組讀取的選項。

mysql_config_editor向登入路徑檔案增加登入路徑的順序就是建立它們的順序,因此應該先建立更多的通用登入路徑,後建立特定登入路徑。如果想要在登入路徑檔案中移動一個登入路徑,可以先刪除它,然後再重新建立它。例如一個client登入路徑很通用,因為所有的客戶端程式將會讀取它,而mysqldump登入路徑只能由mysqldump程式來讀取。後指定的選項會覆蓋先指定的選項,因此以client,mysqldump順序來建立登入路徑,mysqldump程式能讓mysqldump的特定選項覆蓋client的選項。

在使用mysql_config_editor的set命令來建立一個登入路徑時不需要指定所有可能選項值(主機名,使用者名稱,密碼,埠號,socket)。只有指定的值會被寫入登入路徑。任何丟失而在呼叫客戶端程式連線伺服器時所需要的選項可以在其它選項檔案或命令列中批定。任何在命令列中指定的選項值會覆蓋在登入路徑檔案或其它選項檔案中所指定的選項值。例如,如果在remote登入路徑中指定了埠號33306,現在假設遠端伺服器埠變為3306了,那麼連線伺服器命令如下:

[mysql@localhost ~]$ mysql --login-path=remote -P3306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 56674
Server version: 5.7.26 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, 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>

命令列指定的埠號覆蓋登入路徑中指定的埠號

可以使用remove命令來刪除登入路徑或登入路徑中的某些選項刪除remote登入路徑中的--port選項

[mysql@localhost ~]$ mysql_config_editor print --login-path=remote
[remote]
user = root
password = *****
host = 192.168.1.250
port = 33306
[mysql@localhost ~]$ mysql_config_editor remove --login-path=remote --port
[mysql@localhost ~]$ mysql_config_editor print --login-path=remote
[remote]
user = root
password = *****
host = 192.168.1.250

刪除刪除remote登入路徑

[mysql@localhost ~]$ mysql_config_editor remove --login-path=remote
[mysql@localhost ~]$ mysql_config_editor print --login-path=remote


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2664277/,如需轉載,請註明出處,否則將追究法律責任。

相關文章