一、首先我們需要來看一下mysql默認數據庫里面的四張表(user,db,tables_priv,columns_priv)。
1、user表(用戶層權限)
因為字段太多,只截取了一部分。首先登陸的時候驗證Host,User,Password也就是ip,用戶名,密碼是否匹配,匹配登陸成功將會為登陸者分配權限,分配權限的順序也是按照上面四張表的排列順序進行的,舉個例子,如果user表的Select_priv為Y說明他擁有所有表的查找權限,如果為N就需要到下一級db表中進行權限分配了。其中的%是通配符,代表任意的意思。
2、db表(數據庫層權限)
來到db表之后會匹配Host,User然后會根據Db字段對應的表進行權限分配,像Select_priv這些字段對應的權限大家應該都能看出來是對應着什么權限了吧,這里不細說了(不偷懶,舉個例子Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv分別代表着查詢,增加,更新,刪除,創建,銷毀)。其中Y代表這擁有此項權限,N則代表沒有此項權限。
3、tables_priv表(表層權限)
與上面一樣,這是通過Host,Db,User,Table來進行定位到表層的一個權限分配。不過它只有Table_priv和Column_priv兩個字段來記錄權限。
4、columns_priv表(字段層權限)
顧名思義,字段層權限,通過Host,Db,User,Table,Column來進行定位到字段層的一個權限分配,只有Column_priv來記錄權限。
二、使用grant命令來分配權限
大致格式:grant 權限 on 數據庫對象 to 用戶 identified by 密碼
我們通過兩條命令來解讀下:
grant all on test.* to 'root'@'%' identified by '123456' with grant option;
上面這條命令的意思是給root@%這個用戶對應的test數據庫分配所有操作權限,identified by是需要進行的一個密碼認證。把all換成USAGE就表示這個用戶除了登陸啥都干不了。
grant select, insert, update, delete on test.* to 'root'@'%' identified by '123456' with grant option;
上面這條命令則是給root@%這個用戶對應的test數據庫分配了增刪改查的操作權限。
查看某個用戶的權限:show grants for 'root'@'%';
查看當前用戶: SELECT CURRENT_USER();
---------------------
版權聲明:本文為CSDN博主「程序員阿坤」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/kkkun_joe/article/details/81023427
