一、MySQL權限簡介
那麼Mysql的權限是如何實現的呢?這就要說到mysql的兩階段驗證,下面詳細介紹:第一階段:服務器首先會檢查你是否允許連接。因爲創建用戶的時候會加上主機限制,可以限制成本地、某個IP、某個IP段、以及任何地方等,只允許你從配置的指定地方登陸。第二階段:如果你能連接,Mysql會檢查你發出的每個請求,看你是否有足夠的權限實施它。比如你要更新某個表、或者查詢某個表,Mysql會查看你對哪個表或者某個列是否有權限。再比如,你要運行某個存儲過程,Mysql會檢查你對存儲過程是否有執行權限等。
MYSQL的權限如何分佈,就是針對表可以設置什麼權限,針對列可以設置什麼權限如下:
權限分佈 |
可能的設置的權限 |
表權限 |
‘Select’, ‘Insert’, ‘Update’, ‘Delete’, ‘Create’, ‘Drop’, ‘Grant’, ‘References’, ‘Index’, ‘Alter’ |
列權限 |
‘Select’, ‘Insert’, ‘Update’, ‘References’ |
過程權限 |
‘Execute’, ‘Alter Routine’, ‘Grant’ |
二、MySQL權限經驗原則:
權限控制主要是出於安全因素,因此需要遵循一下幾個經驗原則:
1、只授予能滿足需要的最小權限,防止用戶幹壞事。比如用戶只是需要查詢,那就只給select權限就可以了,不要給用戶賦予update、insert或者delete權限。
2、創建用戶的時候限制用戶的登錄主機,一般是限制成指定IP或者內網IP段。
3、初始化數據庫的時候刪除沒有密碼的用戶。安裝完數據庫的時候會自動創建一些用戶,這些用戶默認沒有密碼。
4、爲每個用戶設置滿足密碼複雜度的密碼。
5、定期清理不需要的用戶。回收權限或者刪除用戶。
三、MySQL權限實戰:
1、GRANT命令使用說明:
先來看一個例子,創建一個只允許從本地登錄的超級用戶jack,並允許將權限賦予別的用戶,密碼爲:syy
grant all privileges on *.* to syy@'localhost' identified by 'syy' with grant option;
GRANT命令說明:
ALL PRIVILEGES 是表示所有權限,你也可以使用select、update等權限。
ON 用來指定權限針對哪些庫和表。
*.* 中前面的*號用來指定數據庫名,後面的*號用來指定表名。
TO 表示將權限賦予某個用戶。
syy@’localhost’ 表示jack用戶,@後面接限制的主機,可以是IP、IP段、域名以及%,%表示任何地方。注意:這裏%有的版本不包括本地,以前碰到過給某個用戶設置了%允許任何地方登錄,但是在本地登錄不了,這個和版本有關係,遇到這個問題再加一個localhost的用戶就可以了。
IDENTIFIED BY 指定用戶的登錄密碼。
WITH GRANT OPTION 這個選項表示該用戶可以將自己擁有的權限授權給別人。注意:經常有人在創建操作用戶的時候不指定WITH GRANT OPTION選項導致後來該用戶不能使用GRANT命令創建用戶或者給其它用戶授權。
備註:可以使用GRANT重複給用戶添加權限,權限疊加,比如你先給用戶添加一個select權限,然後又給用戶添加一個insert權限,那麼該用戶就同時擁有了select和insert權限。
2、刷新權限
使用這個命令使權限生效,尤其是你對那些權限表user、db、host等做了update或者delete更新的時候。以前遇到過使用grant後權限沒有更新的情況,只要對權限做了更改就使用FLUSH PRIVILEGES命令來刷新權限。
flush privileges;
3、查看權限
show grants;
show grants for 'syy'@'%'
4、回收權限
revoke delete on *.* grom 'syy'@'localhost'
5、刪除用戶
drop user 'syy'@'localhost'
6、對賬號重命名
rename user 'syy'@'%' to 'change'@'%'
7、修改密碼
- 使用命令:
set PASSWORD FOR 'root'@'localhost' = PASSWORD("123456");
- 用mysqladmin
mysqladmin -u用戶名 -p123456 password12345abc
mysqladmin -u用戶名 -p舊密碼 password 新密碼
- 用update直接編輯用戶密碼