Mysql安全配置
0x01 前言
很多文章中會說,資料庫的許可權按最小許可權為原則,這句話本身沒有錯,但是卻是一句空話。因為最小許可權,這個東西太抽象,很多時候你並弄不清楚具體他需要哪些許可權。 現在很多mysql用著root賬戶在操作,並不是大家不知道用root許可權太大不安全,而是很多人並不知道該給予什麼樣的許可權既安全又能保證正常執行。所以,本文更多的是考慮這種情況下,我們該如何簡單的配置一個安全的mysql。注:本文測試環境為mysql-5.6.4
0x02 Mysql許可權介紹
mysql中存在4個控制許可權的表,分別為user表,db表,tables_priv表,columns_priv表。
mysql許可權表的驗證過程為:
1,先從user表中的Host,User,Password這3個欄位中判斷連線的ip、使用者名稱、密碼是否存在,存在則透過驗證。
2,透過身份認證後,進行許可權分配,按照user,db,tables_priv,columns_priv的順序進行驗證。即先檢查全域性許可權表user,如果user中對應的許可權為Y,則此使用者對所有資料庫的許可權都為Y,將不再檢查db, tables_priv,columns_priv;如果為N,則到db表中檢查此使用者對應的具體資料庫,並得到db中為Y的許可權;如果db中為N,則檢查tables_priv中此資料庫對應的具體表,取得表中的許可權Y,以此類推。
0x03 mysql有哪些許可權
許可權 | 許可權級別 | 許可權說明 |
CREATE | 資料庫、表或索引 | 建立資料庫、表或索引許可權 |
DROP | 資料庫或表 | 刪除資料庫或表許可權 |
GRANT OPTION | 資料庫、表或儲存的程式 | 賦予許可權選項 |
REFERENCES | 資料庫或表 |
|
ALTER | 表 | 更改表,比如新增欄位、索引等 |
DELETE | 表 | 刪除資料許可權 |
INDEX | 表 | 索引許可權 |
INSERT | 表 | 插入許可權 |
SELECT | 表 | 查詢許可權 |
UPDATE | 表 | 更新許可權 |
CREATE VIEW | 檢視 | 建立檢視許可權 |
SHOW VIEW | 檢視 | 檢視檢視許可權 |
ALTER ROUTINE | 儲存過程 | 更改儲存過程許可權 |
CREATE ROUTINE | 儲存過程 | 建立儲存過程許可權 |
EXECUTE | 儲存過程 | 執行儲存過程許可權 |
FILE | 伺服器主機上的檔案訪問 | 檔案訪問許可權 |
CREATE TEMPORARY TABLES | 伺服器管理 | 建立臨時表許可權 |
LOCK TABLES | 伺服器管理 | 鎖表許可權 |
CREATE USER | 伺服器管理 | 建立使用者許可權 |
PROCESS | 伺服器管理 | 檢視程式許可權 |
RELOAD |
伺服器管理 | 執行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的許可權 |
REPLICATION CLIENT | 伺服器管理 | 複製許可權 |
REPLICATION SLAVE | 伺服器管理 | 複製許可權 |
SHOW DATABASES | 伺服器管理 | 檢視資料庫許可權 |
SHUTDOWN | 伺服器管理 | 關閉資料庫許可權 |
SUPER | 伺服器管理 | 執行kill執行緒許可權 |
0x04 資料庫層面(db表)的許可權分析
許可權 | 說明 | 網站使用賬戶是否給予 |
Select | 可對其下所有表進行查詢 | 建議給予 |
Insert | 可對其下所有表進行插入 | 建議給予 |
Update | 可對其下所有表進行更新 | 建議給予 |
Delete | 可對其下所有表進行刪除 | 建議給予 |
Create | 可在此資料庫下建立表或者索引 | 建議給予 |
Drop | 可刪除此資料庫,及此資料庫下的表 | 不建議給予 |
Grant | 賦予許可權選項 | 不建議給予 |
References | 未來MySQL特性的佔位符 | 不建議給予 |
Index | 可對其下的所有表進行索引 | 建議給予 |
Alter | 可對其下的所有表進行更改 | 建議給予 |
Create_tmp_table | 建立臨時表 | 不建議給予 |
Lock_tables | 可對其下所有表進行鎖定 | 不建議給予 |
Create_view | 可在此資料下建立檢視 | 建議給予 |
Show_view | 可在此資料下檢視檢視 | 建議給予 |
Create_routine | 可在此資料下建立儲存過程 | 不建議給予 |
Alter_routine | 可在此資料下更改儲存過程 | 不建議給予 |
Execute | 可在此資料下執行儲存過程 | 不建議給予 |
Event | 可在此資料下建立事件排程器 | 不建議給予 |
Trigger | 可在此資料下建立觸發器 | 不建議給予 |
0x05 mysql安全配置方案
1 限制訪問mysql埠的ip
windows可以透過windows防火牆或者ipsec來限制,linux下可以透過iptables來限制。
2 修改mysql的埠
windows下可以修改配置檔案my.ini來實現,linux可以修改配置檔案my.cnf來實現。
3 對所有使用者設定強密碼並嚴格指定對應賬號的訪問ip
mysql中可在user表中指定使用者的訪問可訪問ip
4 root特權賬號的處理
建議給root賬號設定強密碼,並指定只容許本地登入
5 日誌的處理
如需要可開啟查詢日誌,查詢日誌會記錄登入和查詢語句。
6 mysql程式執行賬號
在windows下禁止使用local system來執行mysql賬戶,可以考慮使用network service或者自己新建一個賬號,但是必須給與mysql程式所在目錄的讀取許可權和data目錄的讀取和寫入許可權; 在linux下,新建一個mysql賬號,並在安裝的時候就指定mysql以mysql賬戶來執行,給與程式所在目錄的讀取許可權,data所在目錄的讀取和寫入許可權。
7 mysql執行賬號的磁碟許可權
1)mysql執行賬號需要給予程式所在目錄的讀取許可權,以及data目錄的讀取和寫入許可權
2)不容許給予其他目錄的寫入和執行許可權,特別是有網站的。
3)取消mysql執行賬戶對於cmd,sh等一些程式的執行許可權。
8 網站使用的mysql賬戶的處理
新建一個賬戶,給予賬戶在所使用資料庫的所有許可權即可。這樣既能保證網站對所對應的資料庫的全部操作,也能保證賬戶不會因為許可權過高而影響安全。給予單個資料庫的所有許可權的賬戶不會擁有super, process, file等管理許可權的。 當然,如果能很明確是的知道,我的網站需要哪些許可權,還是不要多給許可權,因為很多時候釋出者並不知道網站需要哪些許可權,我才建議上面的配置。而且我指的通用的,具體到只有幾臺機器,不多的情況下,我個人建議還是給予只需要的許可權,具體可參考上面的表格的建議。
9 刪除無用資料庫
test資料庫對新建的賬戶預設有許可權
0x06 mysql入侵提權分析及防止措施
一般來說,mysql的提權有這麼幾種方式:
1 udf提權 此方式的關鍵匯入一個dll檔案,個人認為只要合理控制了程式賬戶對目錄的寫入許可權即可防止被匯入dll檔案;然後如果萬一被攻破,此時只要程式賬戶的許可權夠低,也沒辦執行高危操作,如新增賬戶等。
2 寫入啟動檔案
這種方式同上,還是要合理控制程式賬戶對目錄的寫入許可權。
3 當root賬戶被洩露
如果沒有合理管理root賬戶導致root賬戶被入侵,此時資料庫資訊肯定是沒辦法保證了。但是如果對程式賬戶的許可權控制住,以及其對磁碟的許可權控制,伺服器還是能夠保證不被淪陷的。
4 普通賬戶洩露(上述所說的,只對某個庫有所有許可權的賬戶)
此處說的普通賬戶指網站使用的賬戶,我給的一個比較方便的建議是直接給予特定庫的所有許可權。賬戶洩露包括存在注入及web伺服器被入侵後直接拿到資料庫賬戶密碼。
此時,對應的那個資料庫資料不保,但是不會威脅到其他資料庫。而且這裡的普通賬戶無file許可權,所有不能匯出檔案到磁碟,當然此時還是會對程式的賬戶的許可權嚴格控制。
普通賬戶給予什麼樣的許可權可以見上表,實在不會就直接給予一個庫的所有許可權。
0x07 安全配置需要的常用命令
1.新建一個使用者並給予相應資料庫的許可權
grant select,insert,update,delete,create,drop privileges on database.* to [email protected] identified by 'passwd';
grant all privileges on database.* to [email protected] identified by 'passwd';
2.重新整理許可權
flush privileges;
3. 顯示授權
show grants;
4. 移除授權
revoke delete on *.* from 'jack'@'localhost';
5. 刪除使用者
drop user 'jack'@'localhost';
6. 給使用者改名
rename user 'jack'@'%' to 'jim'@'%';
7. 給使用者改密碼
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
8. 刪除資料庫
drop database test;
9. 從資料庫匯出檔案
select * from a into outfile "d:\abc.vbs"
相關文章
- MySQL安全配置基線2022-05-16MySql
- MySQL - 安裝時的安全配置2024-09-11MySql
- MySQL和PostgreSQL資料庫安全配置2020-08-19MySql資料庫
- MySQL 5.6 配置安全的加密密碼2017-05-31MySql加密密碼
- mysql建立ssl安全連線的配置2017-11-12MySql
- MySQL安全配置嚮導mysql_secure_installation詳解2016-07-03MySql
- MYSQL 安全2012-08-29MySql
- mysql配置2020-12-14MySql
- 配置mysql2002-11-14MySql
- MySQL入門--MySQL安全2019-06-11MySql
- Oracle安全配置2020-08-19Oracle
- MongoDB安全配置2020-08-19MongoDB
- Git安全配置2018-04-02Git
- mysql 安全bug2012-06-14MySql
- MySQL基本配置2015-02-26MySql
- MySQL MHA配置2016-03-23MySql
- IIS WebDAV安全配置2020-08-19Web
- Nginx安全配置研究2020-08-19Nginx
- Linux安全配置2017-11-15Linux
- PHP安全配置(轉)2007-08-09PHP
- Windows Server安全配置2024-05-25WindowsServer
- MySQL 安全防護2022-04-01MySql
- Mysql安全措施2017-11-15MySql
- MySQL密碼安全2024-07-04MySql密碼
- Mac 下配置 MySQL2020-07-04MacMySql
- mysql大頁配置2021-05-18MySql
- mysql主從配置2020-12-13MySql
- MySQL安裝配置2020-08-28MySql
- MySQL配置檔案2023-09-12MySql
- mysql 主從配置2016-08-30MySql
- mysql 配置檔案2018-04-21MySql
- Mysql半同步配置2017-05-15MySql
- rails 配置使用mysql2016-06-25AIMySql
- MySQL之swap配置2016-06-23MySql
- MYSQL 配置slave故障2013-12-16MySql
- MySQL叢集配置2015-04-30MySql
- mysql配置主從2015-06-16MySql
- Mysql 安裝 配置2015-09-24MySql