標籤:
一、前言
很多文章中會說,資料庫的許可權按最小許可權為原則,這句話本身沒有錯,但是卻是一句空話。因為最小許可權,這個東西太抽象,很多時候你並弄不清楚具體他需要哪 些許可權。 現在很多mysql用著root賬戶在操作,並不是大家不知道用root許可權太大不安全,而是很多人並不知道該給予什麼樣的許可權既安全又能保證正常運行。 所以,本文更多的是考慮這種情況下,我們該如何簡單的配置一個安全的mysql。註:本文測試環境為mysql-5.6.4
二、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,以此類推。
三、mysql有哪些許可權
四、資料庫層面(db表)的許可權分析
五、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資料庫對建立的賬戶預設有許可權
六、mysql入侵提權分析及防止措施
一般來說,mysql的提權有這麼幾種方式:
1 udf提權
此方式的關鍵匯入一個dll檔案,個人認為只要合理控制了進程賬戶對目錄的寫入許可權即可防止被匯入dll檔案;然後如果萬一被攻破,此時只要進程賬戶的許可權夠低,也沒辦執行高危操作,如添加賬戶等。
2 寫入開機檔案
這種方式同上,還是要合理控制進程賬戶對目錄的寫入許可權。
3 當root賬戶被泄露
如果沒有合理管理root賬戶導致root賬戶被入侵,此時資料庫資訊肯定是沒辦法保證了。但是如果對進程賬戶的許可權控制住,以及其對磁碟的許可權控制,伺服器還是能夠保證不被淪陷的。
4 普通賬戶泄露(上述所說的,只對某個庫有所有許可權的賬戶)
此處說的普通賬戶指網站使用的賬戶,我給的一個比較方便的建議是直接給予特定庫的所有許可權。賬戶泄露包括存在注入及web伺服器被入侵後直接拿到資料庫賬戶密碼。
此時,對應的那個資料庫資料不保,但是不會威脅到其他資料庫。而且這裡的普通賬戶無file許可權,所有不能匯出檔案到磁碟,當然此時還是會對進程的賬戶的許可權嚴格控制。
普通賬戶給予什麼樣的許可權可以見上表,實在不會就直接給予一個庫的所有許可權。
七、安全配置需要的常用命令
1.建立一個使用者並給予相應資料庫的許可權
?
| 1 |
grant select,insert,update,delete,create,drop privileges on database.* to user@localhost identified by ‘passwd‘; |
?
| 1 |
grant all privileges on database.* to user@localhost identified by ‘passwd‘; |
2.重新整理許可權
?
3. 顯示授權
?
4. 移除授權
?
| 1 |
revoke delete on *.* from ‘jack‘@‘localhost‘; |
5. 刪除使用者
?
| 1 |
drop user ‘jack‘@‘localhost‘; |
6. 給使用者改名
?
| 1 |
rename user ‘jack‘@‘%‘ to ‘jim‘@‘%‘; |
7. 給使用者改密碼
?
| 1 |
SET PASSWORD FOR ‘root‘@‘localhost‘ = PASSWORD(‘123456‘); |
8. 刪除資料庫
?
9. 從資料庫匯出檔案
?
| 1 |
select * from a into outfile "~/abc.sql" |
詳細解讀MySQL中的許可權