一、前言
很多文章中會說,資料庫的許可權按最小許可權為原則,這句話本身沒有錯,但是卻是一句空話。因為最小許可權,這個東西太抽象,很多時候你並弄不清楚具體他需要哪 些許可權。 現在很多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.新建乙個使用者並給予相應資料庫的許可權?
1grant
select
,
insert
,
update
,
delete
,
create
,
drop
privileges
on
database
.*
to
user
@localhost identified
by
'passwd'
;
?1
grant
all
privileges
on
database
.*
to
user
@localhost identified
by
'passwd'
;
2.重新整理許可權?
1flush
privileges
;
3. 顯示授權?
1show grants;
4. 移除授權?
1revoke
delete
on
*.*
from
'jack'
@
'localhost'
;
5. 刪除使用者?
1drop
user
'jack'
@
'localhost'
;
6. 給使用者改名?
1rename
user
'jack'
@
'%'
to
'jim'
@
'%'
;
7. 給使用者改密碼?
1set
password
for
'root'
@
'localhost'
=
password
(
'123456'
);
8. 刪除資料庫?
1drop
database
test;
9. 從資料庫匯出檔案?
1select
*
from
a
into
outfile
"~/abc.sql"
詳細解讀mysql 詳細解讀MySQL中的許可權
一 前言 很多文章中會說,資料庫的許可權按最小許可權為原則,這句話本身沒有錯,但是卻是一句空話。因為最小許可權,這個東西太抽象,很多時候你並弄不清楚具體他需要哪些許可權。現在很多mysql用著root賬戶在操作,並不是大家不知道用root許可權太大不安全,而是很多人並不知道該給予什麼樣的許可權既安全...
mysql沒有寫入許可權 詳細解讀MySQL中的許可權
一 前言 很多文章中會說,資料庫的許可權按最小許可權為原則,這句話本身沒有錯,但是卻是一句空話。因為最小許可權,這個東西太抽象,很多時候你並弄不清楚具體他需要哪 些許可權。現在很多mysql用著root賬戶在操作,並不是大家不知道用root許可權太大不安全,而是很多人並不知道該給予什麼樣的許可權既安...
詳細解讀Python中的 init
init 方法意義重大的原因有兩個。第乙個原因是在物件生命週期中初始化是最重要的一步 每個物件必須正確初始化後才能正常工作。第二個原因是init 引數值可以有多種形式。因為有很多種方式為init 提供引數值,對於物件建立有大量的用例,我們可以看看其中的幾個。我們想盡可能的弄清楚,因此我們需要定義乙個...