一、什么是MySQL權限
各大帖子及文章都會講到數據庫的權限按最小權限為原則,這句話本身沒有錯,但是卻是一句空話。因為最小權限,這個東西太抽象,很多時候你並弄不清楚具體他需要哪些權限。 現在很多mysql用着root賬戶在操作,並不是大家不知道用root權限太大不安全,而是很多人並不知道該給予什么樣的權限既安全又能保證正常運行。所以,本文更多的是考慮這種情況下,我們該如何簡單的配置一個安全的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表)的權限分析及分配建議
四、配置權限需要的SQL
查看用戶的權限 show grants for brian@'localhost'; 用戶授權(兩種方法) 1、創建用戶然后授權 創建用戶 help create user; create user brian@'localhost' identified by '123456'; # 授權 help grant; 所有權限庫的所有表 create user brian@'localhost' identified by '123456'; grant all on briandata.* to brian@'localhost'; 2、一條命令授權 grant all on briandata.* to brian@'localhost' identified by '123456'; 根據網段和IP進行授權 grant all on briandata.* to brian@'192.168.10.%' identified by '123456'; grant all on briandata.* to brian@'192.168.10.0/255.255.255.0' identified by '123456'; 回收權限(revoke) revoke insert on briandata.* from 'brian'@'localhost'; # 查看用戶的權限(對應的權限會變成Y) select * from mysql.user\G;