本文主要介紹了MySQL中的權限,包括各個權限所能操作的事務以及操作權限的一些常用命令語句,需要的朋友可以參考下,希望能幫助到大家。
一、前言
很多文章中會說,資料庫的權限以最小權限為原則,這句話本身沒有錯,但是卻是一句空話。因為最小權限,這個東西太抽象,很多時候你並無法弄清楚具體他需要哪些權限。 現在很多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.新建一個使用者並給予對應資料庫的權限
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.重新整理權限
flush privileges;
3. 顯示授權
show grants;
4. 移除授權
revoke delete on *.* from 'jack'@'localhost';
5. 刪除使用者
##
drop user 'jack'@'localhost';
#
rename user 'jack'@'%' to 'jim'@'%';
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
#
drop database test;
select * from a into outfile "~/abc.sql"
以上是MySQL中的權限詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!