詳細(xì)解讀MySQL中的權(quán)限
一、前言
很多文章中會(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中存在4個(gè)控制權(quán)限的表,分別為user表,db表,tables_priv表,columns_priv表。
mysql權(quán)限表的驗(yàn)證過(guò)程為:
1.先從user表中的Host,User,Password這3個(gè)字段中判斷連接的ip、用戶名、密碼是否存在,存在則通過(guò)驗(yàn)證。
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,以此類(lèi)推。
三、mysql有哪些權(quán)限
四、數(shù)據(jù)庫(kù)層面(db表)的權(quán)限分析
五、mysql安全配置方案
1 限制訪問(wèn)mysql端口的ip
windows可以通過(guò)windows防火墻或者ipsec來(lái)限制,linux下可以通過(guò)iptables來(lái)限制。
2 修改mysql的端口
windows下可以修改配置文件my.ini來(lái)實(shí)現(xiàn),linux可以修改配置文件my.cnf來(lái)實(shí)現(xiàn)。
3 對(duì)所有用戶設(shè)置強(qiáng)密碼并嚴(yán)格指定對(duì)應(yīng)賬號(hào)的訪問(wèn)ip
mysql中可在user表中指定用戶的訪問(wèn)可訪問(wèn)ip
4 root特權(quán)賬號(hào)的處理
建議給root賬號(hào)設(shè)置強(qiáng)密碼,并指定只容許本地登錄
5 日志的處理
如需要可開(kāi)啟查詢?nèi)罩?,查詢?nèi)罩緯?huì)記錄登錄和查詢語(yǔ)句。
6 mysql進(jìn)程運(yùn)行賬號(hào)
在windows下禁止使用local system來(lái)運(yùn)行mysql賬戶,可以考慮使用network service或者自己新建一個(gè)賬號(hào),但是必須給與mysql程序所在目錄的讀取權(quán)限和data目錄的讀取和寫(xiě)入權(quán)限; 在linux下,新建一個(gè)mysql賬號(hào),并在安裝的時(shí)候就指定mysql以mysql賬戶來(lái)運(yùn)行,給與程序所在目錄的讀取權(quán)限,data所在目錄的讀取和寫(xiě)入權(quán)限。
7 mysql運(yùn)行賬號(hào)的磁盤(pán)權(quán)限
1)mysql運(yùn)行賬號(hào)需要給予程序所在目錄的讀取權(quán)限,以及data目錄的讀取和寫(xiě)入權(quán)限
2)不容許給予其他目錄的寫(xiě)入和執(zhí)行權(quán)限,特別是有網(wǎng)站的。
3)取消mysql運(yùn)行賬戶對(duì)于cmd,sh等一些程序的執(zhí)行權(quán)限。
8 網(wǎng)站使用的mysql賬戶的處理
新建一個(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)限,具體可參考上面的表格的建議。
9 刪除無(wú)用數(shù)據(jù)庫(kù)
test數(shù)據(jù)庫(kù)對(duì)新建的賬戶默認(rèn)有權(quán)限
六、mysql入侵提權(quán)分析及防止措施
一般來(lái)說(shuō),mysql的提權(quán)有這么幾種方式:
1 udf提權(quán)
此方式的關(guān)鍵導(dǎo)入一個(gè)dll文件,個(gè)人認(rèn)為只要合理控制了進(jìn)程賬戶對(duì)目錄的寫(xiě)入權(quán)限即可防止被導(dǎo)入dll文件;然后如果萬(wàn)一被攻破,此時(shí)只要進(jìn)程賬戶的權(quán)限夠低,也沒(méi)辦執(zhí)行高危操作,如添加賬戶等。
2 寫(xiě)入啟動(dòng)文件
這種方式同上,還是要合理控制進(jìn)程賬戶對(duì)目錄的寫(xiě)入權(quán)限。
3 當(dāng)root賬戶被泄露
如果沒(méi)有合理管理root賬戶導(dǎo)致root賬戶被入侵,此時(shí)數(shù)據(jù)庫(kù)信息肯定是沒(méi)辦法保證了。但是如果對(duì)進(jìn)程賬戶的權(quán)限控制住,以及其對(duì)磁盤(pán)的權(quán)限控制,服務(wù)器還是能夠保證不被淪陷的。
4 普通賬戶泄露(上述所說(shuō)的,只對(duì)某個(gè)庫(kù)有所有權(quán)限的賬戶)
此處說(shuō)的普通賬戶指網(wǎng)站使用的賬戶,我給的一個(gè)比較方便的建議是直接給予特定庫(kù)的所有權(quán)限。賬戶泄露包括存在注入及web服務(wù)器被入侵后直接拿到數(shù)據(jù)庫(kù)賬戶密碼。
此時(shí),對(duì)應(yīng)的那個(gè)數(shù)據(jù)庫(kù)數(shù)據(jù)不保,但是不會(huì)威脅到其他數(shù)據(jù)庫(kù)。而且這里的普通賬戶無(wú)file權(quán)限,所有不能導(dǎo)出文件到磁盤(pán),當(dāng)然此時(shí)還是會(huì)對(duì)進(jìn)程的賬戶的權(quán)限嚴(yán)格控制。
普通賬戶給予什么樣的權(quán)限可以見(jiàn)上表,實(shí)在不會(huì)就直接給予一個(gè)庫(kù)的所有權(quán)限。
七、安全配置需要的常用命令
1.新建一個(gè)用戶并給予相應(yīng)數(shù)據(jù)庫(kù)的權(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ù)庫(kù)
drop database test;
9. 從數(shù)據(jù)庫(kù)導(dǎo)出文件
select * from a into outfile "~/abc.sql"
- MySQL數(shù)據(jù)庫(kù)引擎介紹、區(qū)別、創(chuàng)建和性能測(cè)試的深入分析
- mysql更改引擎(InnoDB,MyISAM)的方法
- MySQL存儲(chǔ)引擎總結(jié)
- MySQL查詢優(yōu)化之explain的深入解析
- mysql中explain用法詳解
- mysql總結(jié)之explain
- MySQL性能分析及explain的使用說(shuō)明
- MySQL數(shù)據(jù)庫(kù)設(shè)置遠(yuǎn)程訪問(wèn)權(quán)限方法小結(jié)
- mysql 新增、刪除用戶和權(quán)限分配
- mysql學(xué)習(xí)之引擎、Explain和權(quán)限的深入講解
相關(guān)文章
Windows Server 2003下修改MySQL 5.5數(shù)據(jù)庫(kù)data目錄
這篇文章主要介紹了Windows Server 2003下修改MySQL 5.5數(shù)據(jù)庫(kù)data目錄,需要的朋友可以參考下2016-04-04MySQL too many connections錯(cuò)誤的原因及解決
這篇文章主要介紹了MySQL too many connections錯(cuò)誤的原因及解決,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下2021-03-03高性能MySQL讀書(shū)筆記 找出誰(shuí)持有鎖
周末重讀了一遍《高性能MySQL》,發(fā)現(xiàn)有些知識(shí)點(diǎn)看過(guò)便忘了,沒(méi)有實(shí)際動(dòng)手操作一遍就是記不牢,所以今天動(dòng)手操作了一下“找出誰(shuí)持有鎖”,并把實(shí)驗(yàn)步驟記錄下來(lái),有興趣的網(wǎng)友可以參照一二。2011-01-01mysql雙機(jī)熱備實(shí)現(xiàn)方案【可測(cè)試】
雙機(jī)熱備從廣義上講,就是對(duì)于重要的服務(wù),使用兩臺(tái)服務(wù)器,互相備份,共同執(zhí)行同一服務(wù)。這篇文章主要介紹了mysql雙機(jī)熱備實(shí)現(xiàn)方案,需要的朋友可以參考下2019-10-10Mysql Binlog數(shù)據(jù)查看的方法詳解
這篇文章主要介紹了Mysql Binlog數(shù)據(jù)查看的方法詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07MySQL ClickHouse不同于SQL的語(yǔ)法介紹
CloudCanal 近期實(shí)現(xiàn)了 MySQL(RDS) 到 ClickHouse 實(shí)時(shí)同步的能力,功能包含全量數(shù)據(jù)遷移、增量數(shù)據(jù)遷移、結(jié)構(gòu)遷移能力,以及附帶的監(jiān)控、告警、HA等能力2022-11-11比較詳細(xì)的MySQL字段類(lèi)型說(shuō)明
MySQL支持大量的列類(lèi)型,它可以被分為3類(lèi):數(shù)字類(lèi)型、日期和時(shí)間類(lèi)型以及字符串(字符)類(lèi)型。本節(jié)首先給出可用類(lèi)型的一個(gè)概述,并且總結(jié)每個(gè)列類(lèi)型的存儲(chǔ)需求,然后提供每個(gè)類(lèi)中的類(lèi)型性質(zhì)的更詳細(xì)的描述。概述有意簡(jiǎn)化,更詳細(xì)的說(shuō)明應(yīng)該考慮到有關(guān)特定列類(lèi)型的附加信息,例如你能為其指定值的允許格式。2008-08-08