簡單幾招提升MySQL安全性

簡單幾招提升MySQL安全性

導讀mysql

如何提升MySQL的安全性?sql

數據庫的安全性無疑很重要,這裏教你們幾招簡單方法提升安全性。數據庫

1. 正確設置 datadir 權限模式安全

關於 datadir 正確的權限模式是 0750,甚至是 0700。socket

也就是最多隻容許 mysqld 進程屬主用戶及其所在用戶組可訪問,但只有屬主可修改文件。tcp

最好是直接設置成 0700,相對更安全些,避免數據文件意外泄漏。工具

  1. [yejr@imysql.com]# chown -R mysql.mysql /data/mysql57  
  2. [yejr@imysql.com]# chmod 0700 /data/mysql57  
  3. [yejr@imysql.com]# ls -la /data/  
  4. drwxr-x---.  8 mysql mysql 4096 Feb 14 08:08 mysql57 

2. 將 mysql socket 文件放在 datadir 下加密

不少人習慣將 mysql socket文件放在 /tmp 目錄下。spa

尤爲是跑多實例時,/tmp 目錄下可能有 mysql3306.sock、mysql3307.sock、mysql3308.sock 等多個這樣的文件。server

要注意,mysql.sock 文件默認的權限模式是 0777,也就是任何人都有機會經過 /tmp 目錄下的 socket 文件直接登入 mysql,尤爲是root密碼爲空或弱密碼,而且還容許本地 socket 方式登入時,是個比較危險的安全隱患。

所以,咱們強烈建議把 mysql socket 文件放置在每一個實例本身的 datadir 下,而且參考第一條建議,設置正確的權限模式。同時甚至也能夠把 mysql.sock 文件權限模式修改成 0700。

  1. [yejr@imysql.com]# chmod 0700 /data/mysql57/mysql.sock  
  2. [yejr@imysql.com]# ls -la /data/mysql57/mysql.sock  
  3. srwx------. 1 mysql mysql 0 Feb 12 16:00 /data/mysql57/mysql.sock 

3. 使用login-path

通常來講,咱們會爲每一個mysql帳戶設置密碼,這樣是安全了,但使用和維護起來就不方便了。

每次登入都要輸入密碼,尤爲是調用mysql client工具時,若是直接將密碼寫在client工具的選項裏,則是很是危險的行爲,從歷史命令就能看到密碼了,而且會有相似下面的提示:

  1. mysql: [Warning] Using a password on the command line interface can be insecure. 

這時候,咱們其實能夠利用 login-path 功能來提升安全性及便利性。

login-path 特性是MySQL 5.6新增的。

首先,利用 mysql_config_editor 配置login-path:

  1. #選項 」-G lp-mysql57-3306」設定login-path的別名 
  2. mysql_config_editor set -G lp 
  3. -mysql57-3306 -S /data/mysql57/mysql.sock -uroot -p

設置完後,就會在該用戶的 $HOME目錄下生成 .mylogin.cnf 文件:

  1. [yejr@imysql.com]# ls -la ~/.mylogin.cnf  
  2. -rw-------. 1 yejr users 152 Feb 11 22:42 /home/yejr/.mylogin.cnf  
  3. [yejr@imysql.com]# file ~/.mylogin.cnf  
  4. /home/yejr/.mylogin.cnf: data 

這是個加密的二進制文件,即使用明文方式查看,也是沒法顯示密碼的:

  1. [yejr@imysql.com]# mysql_config_editor print --all  
  2. mysql_config_editor print --all  
  3. [lp-mysql57-13306]  
  4. user = root  
  5. password = *****  
  6. socket = /data/mysql57/mysql.sock 

接下來能夠利用 login-path 很方便的登入 mysqld 而無需額外的密碼:

  1. [yejr@imysql.com]# mysql --login-path=lp-mysql57-13306 -e "select 1+1 from dual"  
  2. +-----+  
  3. | 1+1 |  
  4. +-----+  
  5. |   2 |  
  6. +-----+  
  7.  
  8.  
  9. [yejr@imysql.com]# mysqladmin --login-path=lp-mysql57-13306 pr  
  10. +----+------+-----------+----+---------+------+----------+------------------+  
  11. | Id | User | Host      | db | Command | Time | State    | Info             |  
  12. +----+------+-----------+----+---------+------+----------+------------------+  
  13. | 3  | root | localhost |    | Query   | 0    | starting | show processlist |  
  14. +----+------+-----------+----+---------+------+----------+------------------+ 

在作好前面兩條安全規則的前提下,即使萬一某個高權限等級用戶的 .mylogin.cnf 文件被其餘普通用戶盜取,也沒法利用 socket 方式登入 mysql。

固然了,除非你以前在 login-path 裏設置的是走 tcp/ip 方式,那就悲劇了~

下面是假設 yejr 普通帳號想利用 root 帳號的 .mylogin.cnf 文件登入,報告失敗,由於沒法訪問 /data/mysql57/mysql.sock 文件:

  1. [yejr@imysql ~]$ /usr/local/mysql57/bin/mysql --login-path=lp-mysql57-13306  
  2. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data/mysql57/mysql.sock'  
  3. 出處:行足跡旅遊(www.xingzuji.com)轉載請註明
相關文章
相關標籤/搜索