您好,登錄后才能下訂單哦!
本篇內容主要講解“Mysql數據庫的安全配置方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Mysql數據庫的安全配置方法是什么”吧!
一、安全配置項
1、確保數據文件在非系統分區:
操作系統上有明確的系統分區和非系統分區。如果數據文件在系統分區,會
提高整個系統因為磁盤空間用盡發生拒絕服務的幾率。
1)進入數據庫執行下列語句
show variables where variable_name = 'datadir'
如果發現結果中存在/ /var /usr 說明數據文件在系統分區建議換區
2、確保 mysql 操作系統賬號權限最小化:
mysql 在操作系統上的賬號權限最小化有助于減小 mysql 數據庫漏洞造成
的影響;
假設 mysql 賬號為 mysql 執行 ps -ef | egrep "^mysql.*$"命令
如果沒有返回行,則權限存在問題。
3、禁止 mysql 鏈接歷史記錄:
mysql 會把客戶端登陸的交互執行記錄保存在.mysql_history 文件中,該記錄有可能會暴露登陸過程中的敏感信息,建議刪除,檢查.mysql_history 文件是否存在(默認在home 下)執行命令 find /home -name ".mysql_history"如果有返回行說明存在建議刪除
4、禁止 MYSQL_PWD 的使用:
MYSQL_PWD 是一種用于明文形式存儲 mysql 密碼的環境變量,檢查 MYSQL_PWD 環境變量是否存在于某個進程中執行命令 grep MYSQL_PWD /proc/*/environ如果有返回行說明那個進程使用了 MYSQL_PWD 環境變量
5、禁止 MYSQL 操作系統賬號登陸:
Mysql 的操作做系統賬號在安裝完數據庫后,不應該有其他用途,建議禁止該賬號登陸操作系統,假設 mysql 數據庫操作系統賬號就是 Mysql 執行下列命令 getent passwd mysql | egrep "^.*[ \ /bin\ / false| \ / sbin \ / nologin]$",如果沒有返回行則說明存在安全隱患。
6、禁止 MYSQL 使用默認端口:
如果返回是 3306,則說明需要修改端口;執行 sql 確認端口show global variables like 'port';
二、文件系統權限安全配置
1、確保數據文件最小權限:
執行 sql 定位數據文件地址
show variables where variable_name = 'datadir';
檢查路徑權限是否符合最小權限原則
ls -l /.. | egrep "^d[r|w|x]{3}------\s*.\s*mysql\s*mysql\s*\d*.*mysql"
2、確保 log_bin_basename 文件最小權限:
執行 sql 定位日志文件地址 show variables like 'log_bin_basename';日志文件的權限是 660 屬于 mysql
3、確保 log_error 文件最小權限:
執行 sql 定位日志文件地址 show global variables like 'log_error';
4、 確保 slow_query_log 文件最小權限:
執行 sql 定位日志文件地址 show variables like 'slow_query_log_file';
5 、確保 relay_log_basename 文件最小權限:
執行 sql 定位日志文件地址 show variables like 'relay_log_basename';
6、 確保 general_log_file 文件最小權限:
執行 sql 定位日志文件地址 show variables like 'general_log_file';
7 、確保密鑰文件最小權限:
1.執行 sql 定位密鑰文件地址
show variables where variable_name = 'ssl_key';
2.檢查路徑權限是否符合最小權限原則
ls -l | egrep "^-r--------[ \t]*.[ \t]*mysql[ \t]*mysql.*$"
如果沒有返回行,則說明存在安全問題
8 、確保插件目錄最小權限:
1.執行 sql 定位插件目錄地址
show variables where variable_name = 'plugin_dir';
2.檢查路徑權限是否符合最小權限原則
ls -l /.. | egrep "^drwxr[-w]xr[-w]x[ \t]*[0-9][ \t]*mysql[ \t]*mysql.*plugin.*$"
三、Mysql 基本安全配置
1、 確保使用最新版 mysql 數據庫:
執行 sql 檢查數據庫版本 SHOW VARIABLES WHERE Variable_name LIKE "version";
2、修改 root 用戶名:
檢查數據庫是否有默認用戶 root,執行命令:SELECT user from mysql.user where user='root; 如果有返回行則需要修改;
3、確保樣例數據庫刪除:
樣例數據庫可以被所有數據庫用戶訪問,并且可以用來消耗系統資源刪除樣例庫可以減少攻擊面;
檢查數據庫是否存在樣例庫執行 sql命令 SHOW DATABASES LIKE 'test';
4、禁用 local_infile:
以阻止黑客利用 sql 注入來讀取數據庫文件,檢查參數狀態執行命令:
SHOW VARIABLES WHERE Variable_name = 'local_infile';如果返回值不是 off,則存在安全問題
5、確保 skip-symbolic-links 開啟:
開啟 skip-symbolic-links 可以禁止數據庫用戶刪除或重名數據文件目錄之外的文件,檢查參數狀態執行命令:
SHOW variables LIKE 'have_symlink';
6、確保插件 daemon_memcached 被禁用:
任何人可以利用 daemon_memcached 來訪問或修改一部分數據,給數據庫造成信息泄漏的隱患。
檢查參數狀態執行命令:SELECT * FROM information_schema.plugins WHERE
PLUGIN_NAME='daemon_memcached';如果有返回行數說明有插件,需要刪除
7、確保 secure_file_priv 不是空:
secure_file_priv 限制客戶端可以讀取數據文件的路徑,secure_file_priv
設置合理的值可以有效降低 sql 注入后黑客讀取數據庫數據的可能性。
檢查參數狀態執行如下命令:SHOW GLOBAL VARIABLES WHERE Variable_name =
'secure_file_priv' AND Value<>'';如果有返回內容說明安全,否則需要修復;
8、確保 sql_mode 是 STRICT_ALL_TABLES 模式:
sql_mode 模式有三種,STRICT_TRANS_TABLES 是其中一種模式。
STRICT_TRANS_TABLES 模式會檢查所有更新的數據
檢查參數狀態執行命令:SHOW VARIABLES LIKE 'sql_mode';
如果有返回的是 STRICT_TRANS_TABLES 說明安全,否則需要修復;
9、確保 disconnect_on_expired_password 參數是 ON:
disconnect_on_expired_password 是用來控制客戶端用失效密碼來訪問
數據庫的,關閉這個參數會給數據庫帶來安全風險。
檢查參數狀態執行命令:SHOW GLOBAL VARIABLES like 'disconnect_on_expired_password';
如果有返回的是 ON 說明安全,否則需要修復
四、Mysql 權限安全配置
1 、確保只有管理員賬號有所有數據庫的訪問權限:
執行命令:
SELECT user, host FROM mysql.user WHERE (Select_priv = 'Y') OR
(Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y')
OR (Drop_priv = 'Y');
如果返回的都是管理員賬號說明安全,否則需要對用戶清除權限;
2、非管理員賬號 file_priv 不應該設置成 Y
File_priv 權限允許 mysql 用戶對磁盤進行讀寫操作,執行命令:
select user, host from mysql.user where File_priv = 'Y'; 如果返回的都是管理員賬號,否則需要對用戶清除權限;
3、非管理員賬號 process_priv 不應該設置成 Y
process_priv 權限允許委托賬號查看當前正在執行的 sql 語句,使用超越
當前用戶權限的權利,可以被攻擊者所利用。執行命令:
select user, host from mysql.user where Process_priv = 'Y'; 如果返回的都是管理員賬號則是安全的,否則需要對用戶清除權限;
(同上)非管理員賬號 super_priv 不應該設置成 Y,非管理員賬號 shutdown_priv 不應該設置成 Y,
非管理員賬號 create_user_priv 不應該設置成 Y,非管理員賬號 grant_priv 不應該設置成 Y,
非管理員賬號 reload_priv 不應該設置成 Y,非管理員賬號 repl_slave_priv 不應該設置成 Y;
4、確保 DML/DDL 權限只在特定用戶手上:
執行sql命令:
SELECT User,Host,Db FROM mysql.db WHERE Select_priv='Y' OR
Insert_priv='Y' OR Update_priv='Y' OR Delete_priv='Y' OR Create_priv='Y' OR
Drop_priv='Y' OR Alter_priv='Y';
如果返回的都是管理員賬號,否則需要對用戶清除權限
五、審計和日志安全配置
1、 確保 log_error 日志啟動:
啟用錯誤日志有可能會增加檢測到針對 mysql 的惡意攻擊行為機會,執行命令:
SHOW variables LIKE 'log_error'; 如果返回是空否,則存在安全問題需要修復
2、 確保日志文件在非系統分區:
操作系統上有明確的系統分區和非系統分區,如果日志文件在系統分區,會提高整個系統因為磁盤空間用盡發生拒絕服務的幾率;進入數據庫執行命令:SELECT @@global.log_bin_basename;
3、確保 log_warnings 被設置成 2:
log_warnings 適用于決定日志中記錄的內容的,默認是 1 隨著級別的調整會記錄更多信息,調整到 2 有助于通過日志追查安全問題;執行命令:SHOW GLOBAL VARIABLES LIKE 'log_warnings';
六、身份認證安全配置
1、確保 sql_mode 中含有 NO_AUTO_CREATE_USER:
NO_AUTO_CREATE_USER 是 sql_mode 的一個選項,可以阻止 grant 語
句在特定情況下自動創建用戶;執行命令:SELECT @@session.sql_mode;
2、確保沒有用戶使用空密碼
如果密碼被設置成空密碼,入侵者只要知道密碼和主機允許列表,就可以繞
過身份驗證隨意登錄數據庫;執行命令:
SELECT User,host FROM mysql.user WHERE authentication_string=''; 沒有行數返回說明安全,否則需要配置;
3、確保 default_password_lifetimes 少于或等于 90 天
密碼需要定期更換,才有意義,也才能更有效的防止黑客破解;執行命令:
SHOW VARIABLES LIKE 'default_password_lifetime';
看返回值和 90 的關系如果大于 90 就需要修復
4、 確保用戶不允許所有 ip 訪問
某一數據庫用戶支持所有 ip 訪問,一旦賬號密碼泄露,數據庫就變得很不安全,執行命令:
SELECT user, host FROM mysql.user WHERE host = '%'; 結果集為空說明不存在問題,否則需要修復
5、確保無匿名帳戶存在
匿名用戶是空的,也沒有密碼,安全性很差,任意人員都可以利用匿名用戶
訪問數據庫,執行命令: SELECT user,host FROM mysql.user WHERE user = '';
結果集為空說明不存在問題,否則需要修復;
七、網絡安全配置
1、確保 have_ssl 設置成 yes:
所有網絡請求必須走 SSL/TLS 訪問數據庫,執行命令:SHOW variables WHERE variable_name = 'have_ssl';
返回 yes 不存在問題,否則需要修復;
2 、確保 ssl_type 是 'ANY', 'X509', or 'SPECIFIED':
所有網絡請求必須走 SSL/TLS 訪問數據庫。SSL 提供多種算法,其中一些算法安全性并不高不能幫助用戶杜絕網絡劫持和網絡攔截。建議設置 ssl_type 為高安全類型的加密算法。但這其中有一個隱患,如果客戶端使用較低加密算法,會由于算法無法匹配導致鏈接失敗,執行命令:
SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN ('::1', '127.0.0.1', 'localhost');
確保每個用戶返回的 ssl_type 等于 ANY, X509, or SPECIFIED;
八、復制數據傳輸中的安全配置
1 、確保 MASTER_SSL_VERIFY_SERVER_CERT 設置成 yes 或 1:
2、確保 master_info_repository 設置成 table:
master_info_repository 設置成 table.客戶端使用的密碼存儲在表中,相較于文件系
統表中更為安全執行命令:SHOW GLOBAL VARIABLES LIKE 'master_info_repository';
master_info_repository 返回是 table,否則需要修復,修復建議:打開配置文件
set the master_info_repository value to TABLE;
到此,相信大家對“Mysql數據庫的安全配置方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。