mysql安全之loginpath

qixiaobo發表於2018-01-05

title: mysql安全之loginpath tags:

  • mysql
  • loginpath
  • 安全 categories: mysql date: 2017-07-25 18:18:53

用了許久的mysql,最近發現了一個新玩具。

對於兼運維的開發同學來說,需要備份資料庫。我們一般通過crontab來實現。

執行

    crontab -e
複製程式碼
    30 1 * * * /data/shell/backupdb.sh;
複製程式碼

我們在凌晨1:30執行備份資料庫操作

指令碼如下

    /usr/local/mysql/bin/mysqldump -uroot -pXXXX --skip-lock-tables --databases f6dms_trial $(mysql -uroot -pXXXX -Df6dms_trial -Bse "show tables like 'tm_monitor_avg_price_%'"|awk '{print "--ignore-table=f6dms_trial."$1}'|xargs)| gzip > /data/backup/f6dms-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;
    /usr/local/mysql/bin/mysqldump -uroot -pXXXX --skip-lock-tables --databases f6db_trial f6report_new_trial | gzip > /data/backup/f6db-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;
複製程式碼

這個關於忽略指定資料表(不定個數)的可以參考[mysqldump之跳過指定表][mysqldump]

我們這邊的顯式寫上了db的使用者名稱密碼,如果該指令碼我們是通過svn管理的,那麼很容易出現db的使用者名稱密碼洩露,導致出現一些安全隱患。

mysql在5.6之後提供了loginpath功能。

loginpath的官方介紹如下

The best way to specify server connection information is with your .mylogin.cnf file. Not only is this file encrypted, but any logging of the utility execution does not expose the connection information. Thus, no user names, passwords, ports, etc. are visible in the log. This is the preferred method for using MySQL Utilities to connect to servers.

Utilities support the use of login-paths in the connection string provided they use the following format login-path-name[:port][:socket] where the port and socket parameters are optional. If used, these optional parameters override the respective options from the specified login-path file.

When using login-paths, there are no default values except on Posix systems when specifying a socket. In this case, the host option defaults to localhost on port 3306. This means that combining the values specified in the login-path with the two optional values port and socket, one needs to specify at least a user, a hostname and a port or socket.

Use the mysql_config_editor tool ([http://dev.mysql.com/doc/en/mysql-config-editor.html][http_dev.mysql.com_doc_en_mysql-config-editor.html]) to add the connection information as follows.

shell> mysql_config_editor set --login-path=instance_13001 --host=localhost --user=root --port=13001 --password
Enter password: <Password is prompted to be inserted in a more secure way>
複製程式碼

我們可以如下執行

mysql_config_editor set --login-path=test --user=root --host=localhost --password
Enter password: (輸入密碼)
mysql --login-path=test
複製程式碼

這樣就可以登入成功。

對應會生成.mylogin.cnf 檔案

開啟後,基本是編碼過後的內容,較為安全

這樣我們也不需要再顯示的寫使用者名稱密碼了,系統的安全進一步得到提升。

新的程式碼如下

    /usr/local/mysql/bin/mysqldump --login-path=test --skip-lock-tables --databases f6dms_trial $(mysql --login-path=test -Df6dms_trial -Bse "show tables like 'tm_monitor_avg_price_%'"|awk '{print "--ignore-table=f6dms_trial."$1}'|xargs)| gzip > /data/backup/f6dms-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;
    /usr/local/mysql/bin/mysqldump --login-path=test --skip-lock-tables --databases f6db_trial f6report_new_trial | gzip > /data/backup/f6db-trial_`date '+%Y-%m-%d-%H:%M:%S'`.sql.gz;

``` 


[mysqldump]: https://my.oschina.net/qixiaobo025/blog/1477149
[http_dev.mysql.com_doc_en_mysql-config-editor.html]: http://dev.mysql.com/doc/en/mysql-config-editor.html
複製程式碼

相關文章