詳細解讀MySQL中的權(quán)限
1. 前言
本文主要教大家如何簡單的配置一個安全的mysql因妙。注:本文測試環(huán)境為mysql-5.6.4
2. Mysql權(quán)限介紹
mysql中存在4個控制權(quán)限的表钉寝,分別為user表荣赶,db表,tables_priv表贺喝,columns_priv表辙芍。
mysql權(quán)限表的驗證過程為:
1.先從user表中的Host,User,Password這3個字段中判斷連接的ip瞻想、用戶名、密碼是否存在杆煞,存在則通過驗證魏宽。
2.通過身份認證后,進行權(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闻书,以此類推。
3. mysql有哪些權(quán)限
4. 數(shù)據(jù)庫層面(db表)的權(quán)限分析
5. 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進程運行賬號
在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ù)庫對新建的賬戶默認有權(quán)限
6. mysql入侵提權(quán)分析及防止措施
一般來說葫隙,mysql的提權(quán)有這么幾種方式:
1 udf提權(quán)
此方式的關(guān)鍵導(dǎo)入一個dll文件,個人認為只要合理控制了進程賬戶對目錄的寫入權(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)限削茁。
7. 安全配置需要的常用命令
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
- 顯示授權(quán)
show grants
- 移除授權(quán)
revoke delete on *.* from 'jack'@'localhost'
- 刪除用戶
drop user 'jack'@'localhost'
- 給用戶改名
rename user 'jack'@'%' to 'jim'@'%'
- 給用戶改密碼
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456')
- 刪除數(shù)據(jù)庫
drop database test
- 從數(shù)據(jù)庫導(dǎo)出文件
select * from a into outfile "~/abc.sql"
參考
MySQL教程
MySQL索引原理及慢查詢優(yōu)化