詳細解讀MySQL中的權(quán)限
一、前言
很多文章中會說,數(shù)據(jù)庫的權(quán)限按最小權(quán)限為原則,這句話本身沒有錯,但是卻是一句空話。因為最小權(quán)限,這個東西太抽象,很多時候你并弄不清楚具體他需要哪些權(quán)限。 現(xiàn)在很多mysql用著root賬戶在操作,并不是大家不知道用root權(quán)限太大不安全,而是很多人并不知道該給予什么樣的權(quán)限既安全又能保證正常運行。所以,本文更多的是考慮這種情況下,我們該如何簡單的配置一個安全的mysql。注:本文測試環(huán)境為mysql-5.6.4
二、Mysql權(quán)限介紹
mysql中存在4個控制權(quán)限的表,分別為user表,db表,tables_priv表,columns_priv表。
mysql權(quán)限表的驗證過程為:
1.先從user表中的Host,User,Password這3個字段中判斷連接的ip、用戶名、密碼是否存在,存在則通過驗證。
2.通過身份認(rèn)證后,進行權(quán)限分配,按照user,db,tables_priv,columns_priv的順序進行驗證。即先檢查全局權(quán)限表user,如果user中對應(yīng)的權(quán)限為Y,則此用戶對所有數(shù)據(jù)庫的權(quán)限都為Y,將不再檢查db, tables_priv,columns_priv;如果為N,則到db表中檢查此用戶對應(yīng)的具體數(shù)據(jù)庫,并得到db中為Y的權(quán)限;如果db中為N,則檢查tables_priv中此數(shù)據(jù)庫對應(yīng)的具體表,取得表中的權(quán)限Y,以此類推。
三、mysql有哪些權(quán)限
四、數(shù)據(jù)庫層面(db表)的權(quán)限分析
五、mysql安全配置方案
1 限制訪問mysql端口的ip
windows可以通過windows防火墻或者ipsec來限制,linux下可以通過iptables來限制。
2 修改mysql的端口
windows下可以修改配置文件my.ini來實現(xiàn),linux可以修改配置文件my.cnf來實現(xiàn)。
3 對所有用戶設(shè)置強密碼并嚴(yán)格指定對應(yīng)賬號的訪問ip
mysql中可在user表中指定用戶的訪問可訪問ip
4 root特權(quán)賬號的處理
建議給root賬號設(shè)置強密碼,并指定只容許本地登錄
5 日志的處理
如需要可開啟查詢?nèi)罩?,查詢?nèi)罩緯涗浀卿浐筒樵冋Z句。
6 mysql進程運行賬號
在windows下禁止使用local system來運行mysql賬戶,可以考慮使用network service或者自己新建一個賬號,但是必須給與mysql程序所在目錄的讀取權(quán)限和data目錄的讀取和寫入權(quán)限; 在linux下,新建一個mysql賬號,并在安裝的時候就指定mysql以mysql賬戶來運行,給與程序所在目錄的讀取權(quán)限,data所在目錄的讀取和寫入權(quán)限。
7 mysql運行賬號的磁盤權(quán)限
1)mysql運行賬號需要給予程序所在目錄的讀取權(quán)限,以及data目錄的讀取和寫入權(quán)限
2)不容許給予其他目錄的寫入和執(zhí)行權(quán)限,特別是有網(wǎng)站的。
3)取消mysql運行賬戶對于cmd,sh等一些程序的執(zhí)行權(quán)限。
8 網(wǎng)站使用的mysql賬戶的處理
新建一個賬戶,給予賬戶在所使用數(shù)據(jù)庫的所有權(quán)限即可。這樣既能保證網(wǎng)站對所對應(yīng)的數(shù)據(jù)庫的全部操作,也能保證賬戶不會因為權(quán)限過高而影響安全。給予單個數(shù)據(jù)庫的所有權(quán)限的賬戶不會擁有super, process, file等管理權(quán)限的。 當(dāng)然,如果能很明確是的知道,我的網(wǎng)站需要哪些權(quán)限,還是不要多給權(quán)限,因為很多時候發(fā)布者并不知道網(wǎng)站需要哪些權(quán)限,我才建議上面的配置。而且我指的通用的,具體到只有幾臺機器,不多的情況下,我個人建議還是給予只需要的權(quán)限,具體可參考上面的表格的建議。
9 刪除無用數(shù)據(jù)庫
test數(shù)據(jù)庫對新建的賬戶默認(rèn)有權(quán)限
六、mysql入侵提權(quán)分析及防止措施
一般來說,mysql的提權(quán)有這么幾種方式:
1 udf提權(quán)
此方式的關(guān)鍵導(dǎo)入一個dll文件,個人認(rèn)為只要合理控制了進程賬戶對目錄的寫入權(quán)限即可防止被導(dǎo)入dll文件;然后如果萬一被攻破,此時只要進程賬戶的權(quán)限夠低,也沒辦執(zhí)行高危操作,如添加賬戶等。
2 寫入啟動文件
這種方式同上,還是要合理控制進程賬戶對目錄的寫入權(quán)限。
3 當(dāng)root賬戶被泄露
如果沒有合理管理root賬戶導(dǎo)致root賬戶被入侵,此時數(shù)據(jù)庫信息肯定是沒辦法保證了。但是如果對進程賬戶的權(quán)限控制住,以及其對磁盤的權(quán)限控制,服務(wù)器還是能夠保證不被淪陷的。
4 普通賬戶泄露(上述所說的,只對某個庫有所有權(quán)限的賬戶)
此處說的普通賬戶指網(wǎng)站使用的賬戶,我給的一個比較方便的建議是直接給予特定庫的所有權(quán)限。賬戶泄露包括存在注入及web服務(wù)器被入侵后直接拿到數(shù)據(jù)庫賬戶密碼。
此時,對應(yīng)的那個數(shù)據(jù)庫數(shù)據(jù)不保,但是不會威脅到其他數(shù)據(jù)庫。而且這里的普通賬戶無file權(quán)限,所有不能導(dǎo)出文件到磁盤,當(dāng)然此時還是會對進程的賬戶的權(quán)限嚴(yán)格控制。
普通賬戶給予什么樣的權(quán)限可以見上表,實在不會就直接給予一個庫的所有權(quán)限。
七、安全配置需要的常用命令
1.新建一個用戶并給予相應(yīng)數(shù)據(jù)庫的權(quán)限
grant select,insert,update,delete,create,drop privileges on database.* to user@localhost identified by 'passwd';
grant all privileges on database.* to user@localhost identified by 'passwd';
2.刷新權(quán)限
flush privileges;
3. 顯示授權(quán)
show grants;
4. 移除授權(quán)
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. 刪除數(shù)據(jù)庫
drop database test;
9. 從數(shù)據(jù)庫導(dǎo)出文件
select * from a into outfile "~/abc.sql"
相關(guān)文章
Windows Server 2003下修改MySQL 5.5數(shù)據(jù)庫data目錄
這篇文章主要介紹了Windows Server 2003下修改MySQL 5.5數(shù)據(jù)庫data目錄,需要的朋友可以參考下2016-04-04MySQL too many connections錯誤的原因及解決
這篇文章主要介紹了MySQL too many connections錯誤的原因及解決,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下2021-03-03Mysql Binlog數(shù)據(jù)查看的方法詳解
這篇文章主要介紹了Mysql Binlog數(shù)據(jù)查看的方法詳解,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07