Mysql 安全加固經驗總結
本文為部落客原創,轉載請註明出處:
1.
mysql 資料庫在使用過程中,需要給服務提供連接和訪問的許可權,而不需要進行公網連接和訪問,所以在安全環境和現網環境部署mysql 的時候,在沒有公網許可權的主機上進行部署,讓服務通過內網的地址進行連接和訪問;
部署在無公網的好處,可以避免了公網的攻擊;MySQL只對內網開放
2. 使用獨立用戶運行msyql
絕對不要作為使用root用戶運行MySQL伺服器。這樣做非常危險,因為任何具有FILE許可權的用戶能夠用root創建文件(例如,~root/.bashrc)。mysqld拒絕使用root運行,除非使用–user=root選項明顯指定。應該用普通非特權用戶運行mysqld。正如安裝過程一樣,為資料庫建立獨立的linux中的mysql賬戶,該賬戶用來只用於管理和運行MySQL。
要想用其它用戶啟動mysqld,,增加user選項指定/etc/my.cnf選項文件或伺服器數據目錄的my.cnf選項文件中的[mysqld]組的用戶名。
#vim /etc/my.cnf
[mysqld]
user=mysql
該命令使伺服器用指定的用戶來啟動,無論你手動啟動或通過mysqld_safe或mysql.server啟動,都能確保使用mysql的身份。也可以在啟動資料庫加上user參數。
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
作為其它linux用戶而不用root運行mysqld,你不需要更改user表中的root用戶名,因為MySQL賬戶的用戶名與linux賬戶的用戶名無關。確保mysqld運行時,只使用對資料庫目錄具有讀或寫許可權的linux用戶來運行。
3.為不同業務創建不同的用戶,並設置不同的密鑰
永遠不要使用管理員許可權的資料庫連接,為每個應用使用單獨的許可權有限的資料庫連接。
添加用戶,並設置用戶登錄密碼;
且密碼需要滿足複雜度的要求:盡量並且不要使用固定密碼,實行每個用戶單獨密碼;長度在16位以上 ,包含大小寫字母,數字,特殊符號等;且需要包含三種類型;
create user user_name@'ip' identified by 'user-password';
查看用戶,ip 及 密鑰
SELECT user, host, authentication_string FROM user;
4.指定mysql可訪問用戶ip和許可權
Grant 【privileges】 ON databasename.tablename TO 'username'@'host';
參數說明:
1、privileges:用戶的操作許可權,如SELECT,INSERT,UPDATE等,如果要授予所的許可權則使用ALL;
2、databasename:資料庫名;
3、tablename:表名,如果要授予該用戶對所有資料庫和表的相應操作許可權則可用表示,如.*。
用以上命令授權的用戶不能給其它用戶授權,如果想讓該用戶可以授權,用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
查看mysql 可訪問的用戶,ip
SELECT user, host FROM user;
5. 防sql注入
永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和 雙”-“進行轉換等。
永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
6. 線上操作
修改或刪除數據前先備份,先備份,先備份(重要事情說三遍)
線上變更一定要有回退方案
7.架構
選擇合適的高可用架構
8.其他
DDL操作要謹慎,對於大表的alter操作最好使用 pt-online-schema-change
具體可看這篇: //www.cnblogs.com/zjdxr-up/p/15564339.html