如何消除MySQL賬號的安全隱患

chenfeng發表於2017-03-20
(1).給MySQL賬號賦予其所需要的最小許可權,避免為MySQL賬號授予alter,grant許可權

(2).刪除匿名賬號
匿名賬號容易帶來安全隱患,建議刪除,執行如下SQL語句即可刪除許可權表中所有的匿名賬號:
mysql>delete from mysql.user where user='';
mysql>delete from mysql.db where user='';
mysql>delete from mysql.tables_priv where user='';
mysql>delete from mysql.columns_priv where user='';
mysql>delete from mysql.procs_priv where user='';

(3).刪除登入主機可以是任意主機的MySQL賬號
登入主機為"%"或者空字串的MySQL賬戶,容易帶來安全隱患,建議刪除,執行如下SQL語句即可刪除許可權表中登入主機為"%"或空字串的MySQL賬戶。
mysql>delete from mysql.user where host='%' or host='';
mysql>delete from mysql.db where host='%' or host='';
mysql>delete from mysql.tables_priv where host='%' or host='';
mysql>delete from mysql.columns_priv where host='%' or host='';
mysql>delete from mysql.procs_priv where host='%' or host='';

(4).修改root賬號的密碼
root賬號擁有MySQL服務例項最高的許可權,資料庫超級管理員root賬號有必要定製修改root賬號的密碼,執行如下SQL來修改:
mysql>set password for root@'localhost'=password('newroot');
mysql>set password for root@'127.0.0.1'=password('newroot');

(5).修改root賬號的賬號名
安裝MySQL時,MySQL將自動建立資料庫超級管理員root賬戶,且該賬戶擁有對資料庫的最高許可權,資料庫超級管理員有必要對自己重新命名,執行如下SQL來修改:
mysql>rename user root@'localhost' to newroot@'localhost';
mysql>rename user root@'127.0.0.1' to newroot@'127.0.0.1';

(6).修改MySQL服務的埠號
預設情況下,MySQL使用3306埠號為MySQL客戶端提供MySQL服務,將埠號修改為其它埠號,可以避免非法使用者遠端連線MySQL伺服器,Linux系統可以透過
修改my.cnf配置檔案[mysqld]選項組"port=3306"的引數值來完成

(7).禁止遠端連線
向my.cnf或my.ini(windows平臺)配置檔案[mysqld]選項組新增引數資訊"bind_address=127.0.0.1",告訴MySQL伺服器只能監聽來自"127.0.0.1"或者"localhost"本地主機的連線請求,禁止遠端連線。

(8).為遠端連線的資料庫使用者提供安全的賬號名、密碼和連線主機。

(9).禁止MySQL讀取MySQL客戶機本地檔案
使用"load data local infile"命令可以將MySQL客戶機的本地檔案匯入MySQL資料庫表中,如果非法使用者
透過該命令將非法資訊匯入到MySQL系統的資料庫許可權表中,後果不堪設想。資料庫可以在my.cnf或my.ini
配置檔案[mysqld]選項組中新增"local_infile=0"引數資訊來禁止MySQL讀取MySQL客戶機本地檔案。

(10).除非必要,避免為MySQL賬戶授予file許可權,防止資料庫使用者在MySQL伺服器上建立file
     說明:如果某個MySQL賬號需要執行"select..into..outfile"命令完成資料庫的備份工作,那麼該賬戶需要授予file許可權

MySQL安全管理的其他注意事項:
(1).當刪除物件時,MySQL不會去清理那些舊許可權,這些舊許可權會一直留在那裡。如果未來的某個時候又以同樣的名字建立了該物件,那麼這些許可權依舊有效。
(2).避免使用insert,update,delete等更新語句直接操作許可權表
(3).由於MySQL沒有提供使用者組或角色這樣的功能,命名MySQL賬戶名時,可以在賬戶名中新增字尾或者字首(例如複製賬號新增"_replication"字尾),使用這種方法可以透過萬用字元批次修改使用者許可權,模擬實現使用者組或角色功能。
(4).由於MySQL服務例項的"管理"許可權,例如shutdown,process,show databases,super,create user,create tablespace等許可權,功能太強大,建議將擁有這些許可權的MySQL賬號限制在一臺單獨的主機上使用.


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

相關文章