數據庫管理人員可以參考本文檔進行 MySQL 數據庫系統的安全配置加固,提高數據庫的安全性,確保數據庫服務穩定、安全、可靠地運行。
漏洞發現
您可以使用安騎士企業版自動檢測您的服務器上是否存在 MySQL 漏洞問題,或者您也可以自己排查您服務器上的 MySQL 服務是否存在安全問題。
安全加固
-
帳號安全
-
禁止 Mysql 以管理員帳號權限運行
以普通帳戶安全運行 mysqld,禁止以管理員帳號權限運行 MySQL 服務。在 /etc/my.cnf 配置文件中進行以下設置。
[mysql.server]
user=mysql
-
避免不同用戶間共享帳號
參考以下步驟。
-
創建用戶。
mysql> mysql> insert into
mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub
ject) values("localhost","pppadmin",password("passwd"),'','','');
執行以上命令可以創建一個 phplamp 用戶。
-
使用該用戶登錄 MySQL 服務。
mysql>exit;
@>mysql -u phplamp -p
-
-
刪除無關帳號
DROP USER 語句可用於刪除一個或多個 MySQL 賬戶。使用 DROP USER 命令時,必須確保當前賬號擁有 MySQL 數據庫的全局 CREATE USER 權限或 DELETE 權限。賬戶名稱的用戶和主機部分分別與用戶表記錄的 User 和 Host 列值相對應。
執行
DROP USER user;
語句,您可以取消一個賬戶和其權限,並刪除來自所有授權表的帳戶權限記錄。
-
-
口令
檢查賬戶默認密碼和弱密碼。口令長度需要至少八位,並包括數字、小寫字母、大寫字母和特殊符號四類中的至少兩種類型,且五次以內不得設置相同的口令。密碼應至少每 90 天進行一次更換。
您可以通過執行以下命令修改密碼。
mysql> update user set password=password('test!p3') where user='root';
mysql> flush privileges;
-
授權
在數據庫權限配置能力范圍內,根據用戶的業務需要,配置其所需的最小權限。
-
查看數據庫授權情況。
mysql> use mysql;
mysql> select * from user;
mysql>select * from db;
mysql>select * from host;
mysql>select * from tables_priv;
mysql>select * from columns_priv;
-
通過 revoke 命令回收不必要的或危險的授權。
Name: 'REVOKE'
Description:
Syntax:
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type]
{
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}
FROM user [, user] ...
-
-
開啟日志審計功能
數據庫應配置日志功能,便於記錄運行狀況和操作行為。
MySQL服務有以下幾種日志類型:
- 錯誤日志: -log-err
- 查詢日志: -log (可選)
- 慢查詢日志: -log-slow-queries (可選)
- 更新日志: -log-update
-
二進制日志: -log-bin
找到 MySQL 的安裝目錄,在 my.ini 配置文件中增加上述所需的日志類型參數,保存配置文件后,重啟 MySQL 服務即可啟用日志功能。例如,
#Enter a name for the binary log. Otherwise a default name will be used.
#Enter a name for the query log file. Otherwise a default name will be used.
#Enter a name for the error log file. Otherwise a default name will be used.
log-error=
#Enter a name for the update log file. Otherwise a default name will be used.
該參數中啟用錯誤日志。如果您需要啟用其他的日志,只需把對應參數前面的 “#” 刪除即可。
日志查詢操作說明
- 執行
show variables like 'log_%';
命令可查看所有的 log。 - 執行
show variables like 'log_bin';
命令可查看具體的 log。
-
安裝最新補丁
確保系統安裝了最新的安全補丁。
注意: 在保證業務及網絡安全的前提下,並經過兼容性測試后,安裝更新補丁。
-
如果不需要,應禁止遠程訪問
禁止網絡連接,防止猜解密碼攻擊、溢出攻擊、和嗅探攻擊。
注意: 僅限於應用和數據庫在同一台主機的情況。
如果數據庫不需要遠程訪問,可以禁止遠程 TCP/IP 連接,通過在 MySQL 服務器的啟動參數中添加
--skip-networking
參數使 MySQL 服務不監聽任何 TCP/IP 連接,增加安全性。您可以使用 安全組 進行內外網訪問控制,建議不要將數據庫高危服務對互聯網開放。
-
設置可信 IP 訪問控制
通過數據庫所在操作系統的防火牆限制,實現只有信任的 IP 才能通過監聽器訪問數據庫。
mysql> GRANT ALL PRIVILEGES ON db.*
·-> -> TO 用戶名@'IP子網/掩碼';
-
連接數設置
根據您的機器性能和業務需求,設置最大、最小連接數。
在 MySQL 配置文件(my.conf 或 my.ini)的 [mysqld] 配置段中添加
max_connections = 1000
,保存配置文件,重啟 MySQL 服務后即可生效。