《Mysql入門詳細(xì)解讀MySQL中的權(quán)限》要點(diǎn):
本文介紹了Mysql入門詳細(xì)解讀MySQL中的權(quán)限,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MYSQL數(shù)據(jù)庫(kù)一、前言
MYSQL數(shù)據(jù)庫(kù)?? 很多文章中會(huì)說(shuō),數(shù)據(jù)庫(kù)的權(quán)限按最小權(quán)限為原則,這句話本身沒(méi)有錯(cuò),但是卻是一句空話.因?yàn)樽钚?quán)限,這個(gè)東西太抽象,很多時(shí)候你并弄不清楚具體他需要哪些權(quán)限. 現(xiàn)在很多mysql用著root賬戶在操作,并不是大家不知道用root權(quán)限太大不安全,而是很多人并不知道該給予什么樣的權(quán)限既安全又能保證正常運(yùn)行.所以,本文更多的是考慮這種情況下,我們?cè)撊绾魏?jiǎn)單的配置一個(gè)安全的mysql.注:本文測(cè)試環(huán)境為mysql-5.6.4
二、Mysql權(quán)限介紹
MYSQL數(shù)據(jù)庫(kù)?? mysql中存在4個(gè)控制權(quán)限的表,分別為user表,db表,tables_priv表,columns_priv表.
MYSQL數(shù)據(jù)庫(kù)?? mysql權(quán)限表的驗(yàn)證過(guò)程為:
MYSQL數(shù)據(jù)庫(kù)1.先從user表中的Host,User,Password這3個(gè)字段中判斷連接的ip、用戶名、密碼是否存在,存在則通過(guò)驗(yàn)證.
MYSQL數(shù)據(jù)庫(kù)2.通過(guò)身份認(rèn)證后,進(jìn)行權(quán)限分配,按照user,db,tables_priv,columns_priv的順序進(jìn)行驗(yàn)證.即先檢查全局權(quán)限表user,如果user中對(duì)應(yīng)的權(quán)限為Y,則此用戶對(duì)所有數(shù)據(jù)庫(kù)的權(quán)限都為Y,將不再檢查db, tables_priv,columns_priv;如果為N,則到db表中檢查此用戶對(duì)應(yīng)的具體數(shù)據(jù)庫(kù),并得到db中為Y的權(quán)限;如果db中為N,則檢查tables_priv中此數(shù)據(jù)庫(kù)對(duì)應(yīng)的具體表,取得表中的權(quán)限Y,以此類推.
MYSQL數(shù)據(jù)庫(kù)三、mysql有哪些權(quán)限
MYSQL數(shù)據(jù)庫(kù)
MYSQL數(shù)據(jù)庫(kù)
MYSQL數(shù)據(jù)庫(kù)四、數(shù)據(jù)庫(kù)層面(db表)的權(quán)限分析
MYSQL數(shù)據(jù)庫(kù)
MYSQL數(shù)據(jù)庫(kù)五、mysql安全配置方案
MYSQL數(shù)據(jù)庫(kù)?? 1 限制訪問(wèn)mysql端口的ip
MYSQL數(shù)據(jù)庫(kù)?? windows可以通過(guò)windows防火墻或者ipsec來(lái)限制,linux下可以通過(guò)iptables來(lái)限制.
MYSQL數(shù)據(jù)庫(kù)?? 2 修改mysql的端口
MYSQL數(shù)據(jù)庫(kù)?? windows下可以修改配置文件my.ini來(lái)實(shí)現(xiàn),linux可以修改配置文件my.cnf來(lái)實(shí)現(xiàn).
MYSQL數(shù)據(jù)庫(kù)?? 3 對(duì)所有用戶設(shè)置強(qiáng)密碼并嚴(yán)格指定對(duì)應(yīng)賬號(hào)的訪問(wèn)ip
MYSQL數(shù)據(jù)庫(kù)?? mysql中可在user表中指定用戶的訪問(wèn)可訪問(wèn)ip
MYSQL數(shù)據(jù)庫(kù)?? 4 root特權(quán)賬號(hào)的處理
MYSQL數(shù)據(jù)庫(kù)?? 建議給root賬號(hào)設(shè)置強(qiáng)密碼,并指定只容許本地登錄
MYSQL數(shù)據(jù)庫(kù)?? 5 日志的處理
MYSQL數(shù)據(jù)庫(kù)?? 如需要可開(kāi)啟查詢?nèi)罩?查詢?nèi)罩緯?huì)記錄登錄和查詢語(yǔ)句.
MYSQL數(shù)據(jù)庫(kù)?? 6 mysql進(jìn)程運(yùn)行賬號(hào)
MYSQL數(shù)據(jù)庫(kù)?? 在windows下禁止使用local system來(lái)運(yùn)行mysql賬戶,可以考慮使用network service或者自己新建一個(gè)賬號(hào),但是必須給與mysql程序所在目錄的讀取權(quán)限和data目錄的讀取和寫入權(quán)限; 在linux下,新建一個(gè)mysql賬號(hào),并在安裝的時(shí)候就指定mysql以mysql賬戶來(lái)運(yùn)行,給與程序所在目錄的讀取權(quán)限,data所在目錄的讀取和寫入權(quán)限.
MYSQL數(shù)據(jù)庫(kù)?? 7 mysql運(yùn)行賬號(hào)的磁盤權(quán)限
MYSQL數(shù)據(jù)庫(kù)1)mysql運(yùn)行賬號(hào)需要給予程序所在目錄的讀取權(quán)限,以及data目錄的讀取和寫入權(quán)限
2)不容許給予其他目錄的寫入和執(zhí)行權(quán)限,特別是有網(wǎng)站的.
3)取消mysql運(yùn)行賬戶對(duì)于cmd,sh等一些程序的執(zhí)行權(quán)限.
MYSQL數(shù)據(jù)庫(kù)?? 8 網(wǎng)站使用的mysql賬戶的處理
MYSQL數(shù)據(jù)庫(kù)?? 新建一個(gè)賬戶,給予賬戶在所使用數(shù)據(jù)庫(kù)的所有權(quán)限即可.這樣既能保證網(wǎng)站對(duì)所對(duì)應(yīng)的數(shù)據(jù)庫(kù)的全部操作,也能保證賬戶不會(huì)因?yàn)闄?quán)限過(guò)高而影響安全.給予單個(gè)數(shù)據(jù)庫(kù)的所有權(quán)限的賬戶不會(huì)擁有super, process, file等管理權(quán)限的. 當(dāng)然,如果能很明確是的知道,我的網(wǎng)站需要哪些權(quán)限,還是不要多給權(quán)限,因?yàn)楹芏鄷r(shí)候發(fā)布者并不知道網(wǎng)站需要哪些權(quán)限,我才建議上面的配置.而且我指的通用的,具體到只有幾臺(tái)機(jī)器,不多的情況下,我個(gè)人建議還是給予只需要的權(quán)限,具體可參考上面的表格的建議.
MYSQL數(shù)據(jù)庫(kù)?? 9 刪除無(wú)用數(shù)據(jù)庫(kù)
MYSQL數(shù)據(jù)庫(kù)?? test數(shù)據(jù)庫(kù)對(duì)新建的賬戶默認(rèn)有權(quán)限
六、mysql入侵提權(quán)分析及防止措施
MYSQL數(shù)據(jù)庫(kù)?? 一般來(lái)說(shuō),mysql的提權(quán)有這么幾種方式:
MYSQL數(shù)據(jù)庫(kù)?? 1 udf提權(quán)
MYSQL數(shù)據(jù)庫(kù)?? 此方式的關(guān)鍵導(dǎo)入一個(gè)dll文件,個(gè)人認(rèn)為只要合理控制了進(jìn)程賬戶對(duì)目錄的寫入權(quán)限即可防止被導(dǎo)入dll文件;然后如果萬(wàn)一被攻破,此時(shí)只要進(jìn)程賬戶的權(quán)限夠低,也沒(méi)辦執(zhí)行高危操作,如添加賬戶等.
MYSQL數(shù)據(jù)庫(kù)?? 2 寫入啟動(dòng)文件
MYSQL數(shù)據(jù)庫(kù)?? 這種方式同上,還是要合理控制進(jìn)程賬戶對(duì)目錄的寫入權(quán)限.
MYSQL數(shù)據(jù)庫(kù)?? 3 當(dāng)root賬戶被泄露
MYSQL數(shù)據(jù)庫(kù)?? 如果沒(méi)有合理管理root賬戶導(dǎo)致root賬戶被入侵,此時(shí)數(shù)據(jù)庫(kù)信息肯定是沒(méi)辦法保證了.但是如果對(duì)進(jìn)程賬戶的權(quán)限控制住,以及其對(duì)磁盤的權(quán)限控制,服務(wù)器還是能夠保證不被淪陷的.
MYSQL數(shù)據(jù)庫(kù)?? 4 普通賬戶泄露(上述所說(shuō)的,只對(duì)某個(gè)庫(kù)有所有權(quán)限的賬戶)
MYSQL數(shù)據(jù)庫(kù)?? 此處說(shuō)的普通賬戶指網(wǎng)站使用的賬戶,我給的一個(gè)比較方便的建議是直接給予特定庫(kù)的所有權(quán)限.賬戶泄露包括存在注入及web服務(wù)器被入侵后直接拿到數(shù)據(jù)庫(kù)賬戶密碼.
MYSQL數(shù)據(jù)庫(kù)?? 此時(shí),對(duì)應(yīng)的那個(gè)數(shù)據(jù)庫(kù)數(shù)據(jù)不保,但是不會(huì)威脅到其他數(shù)據(jù)庫(kù).而且這里的普通賬戶無(wú)file權(quán)限,所有不能導(dǎo)出文件到磁盤,當(dāng)然此時(shí)還是會(huì)對(duì)進(jìn)程的賬戶的權(quán)限嚴(yán)格控制.
MYSQL數(shù)據(jù)庫(kù)?? 普通賬戶給予什么樣的權(quán)限可以見(jiàn)上表,實(shí)在不會(huì)就直接給予一個(gè)庫(kù)的所有權(quán)限.
七、安全配置需要的常用命令
MYSQL數(shù)據(jù)庫(kù)?? 1.新建一個(gè)用戶并給予相應(yīng)數(shù)據(jù)庫(kù)的權(quán)限
??
MYSQL數(shù)據(jù)庫(kù)
grant select,insert,update,delete,create,drop privileges on database.* to user@localhost identified by 'passwd';
MYSQL數(shù)據(jù)庫(kù)
grant all privileges on database.* to user@localhost identified by 'passwd';
MYSQL數(shù)據(jù)庫(kù)???? 2.刷新權(quán)限
MYSQL數(shù)據(jù)庫(kù)
flush privileges;
MYSQL數(shù)據(jù)庫(kù)?? 3. 顯示授權(quán)
MYSQL數(shù)據(jù)庫(kù)
show grants;
MYSQL數(shù)據(jù)庫(kù)?? 4. 移除授權(quán)
MYSQL數(shù)據(jù)庫(kù)
revoke delete on *.* from 'jack'@'localhost';
MYSQL數(shù)據(jù)庫(kù)?? 5. 刪除用戶
MYSQL數(shù)據(jù)庫(kù)
drop user 'jack'@'localhost';
MYSQL數(shù)據(jù)庫(kù)?? 6. 給用戶改名
MYSQL數(shù)據(jù)庫(kù)
rename user 'jack'@'%' to 'jim'@'%';
MYSQL數(shù)據(jù)庫(kù)?? 7. 給用戶改密碼
MYSQL數(shù)據(jù)庫(kù)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
MYSQL數(shù)據(jù)庫(kù)?? 8. 刪除數(shù)據(jù)庫(kù)
MYSQL數(shù)據(jù)庫(kù)
drop database test;
MYSQL數(shù)據(jù)庫(kù)?? 9. 從數(shù)據(jù)庫(kù)導(dǎo)出文件
MYSQL數(shù)據(jù)庫(kù)
select * from a into outfile "~/abc.sql"
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/3700.html