如何消除MySQL賬號的安全隱患
(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賬號限制在一臺單獨的主機上使用.