學習內容:
1.權限管理:
關於mysql的權限簡單的理解就是mysql允許你做你權利以內的事情,不可以越界。比如只允許你執行select操作,那么你就不能執行update操作。只允許你從某台機器上連接mysql,那么你就不能從除那台機器以外的其他機器連接mysql。
那么MYSQL的權限是如何實現的呢?這就要說到mysql的兩階段的驗證:
第一階段:服務器首先會檢查你是否允許連接。因為創建用戶的時候會加上主機限制,可以限制成本地、某個IP、某個IP段、以及任何地方等,只允許你從配置的指定地方登錄。后面在實戰的時候會詳細說關於主機的限制。
第二階段:如果你能連接,MYSQL會檢查你發出的每個請求,看你是否有足夠的權限實施它。比如你要更新某個表、或者查詢某個表,MYSQL會檢查你對哪個表或者某個列是否有權限。再比如,你要運行某個存儲過程,MYSQL會檢查你對存儲過程是否有執行權限等。
mysql的權限:
官網上涉及mysql的權限有很多。。。。這里只是簡單的介紹一下分類。。。
| 權限分布 | 可能的設置的權限 |
| 表權限 | 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter' |
| 列權限 | 'Select', 'Insert', 'Update', 'References' |
| 過程權限 | 'Execute', 'Alter Routine', 'Grant' |
最主要的還是mysql的兩個權限是如何驗證的。。。並且熟悉了mysql的權限是做什么的,那么這方面的知識就很容易理解了。。。
2.MYSQL權限經驗原則
權限控制主要是出於安全因素,因此需要遵循一下幾個經驗原則:
i.只授予能滿足需要的最小權限,比如用戶只是需要查詢,那就只給select權限就可以了,不要給用戶賦予update、insert或者delete權限。
ii.創建用戶的時候限制用戶的登錄主機,一般是限制成指定IP或者內網IP段。
iii.初始化數據庫的時候刪除沒有密碼的用戶。
iv.安裝完數據庫的時候會自動創建一些用戶,這些用戶默認沒有密碼。為每個用戶設置滿足密碼復雜度的密碼。
v.定期清理不需要的用戶。回收權限或者刪除用戶。
3.如何創建用戶呢?並且如何為用戶設置權限呢?
GRANT ALL PRIVILEGES ON *.* TO clearlove@'localhost' IDENTIFIED BY '49681888' WITH GRANT OPTION;
解釋一下上面語句的含義:
grant 關鍵字 all privileges 賦予所有權限
*.*表示(數據庫.表格名)比如說我們想在samp數據庫里的shop表建立一個超級權限用戶,那么*.*就可以寫成 samp.shop
to 表示將權限賦予某個用戶。。
clearlove@'localhost'表示clearlove這個用戶@后面可以接ip,或者域名,這里接的是自己的主機...
identified by 表示為用戶設置一個登陸密碼為:49681888
with grant option 表示可以將自己的權限賦予給別人。。這句話尤其重要。。。
注:可以使用GRANT重復給用戶添加權限,權限疊加,比如你先給用戶添加了一個select權限,然后又給用戶添加了一個insert權限,那么該用戶就同時擁有了select和insert權限。
4.創建一個超級用戶
grant all privileges on samp_db.shop to clearlove@'localhost' identified by '49681888' with grant option;
5.創建一個普通用戶
創建一個一般的程序用戶,這個用戶可能只需要SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES等權限如果有存儲過程還需要加上EXECUTE權限,一般是指定內網網段192.168.100網段。
GRANT USAGE,SELECT, INSERT, UPDATE, DELETE, SHOW VIEW ,CREATE TEMPORARY TABLES,EXECUTE ON samp.shop TO webuser@'192.168.100.%' IDENTIFIED BY '49681888';
6.創建一個網站用戶
GRANT USAGE,SELECT ON samp.shop TO public@'192.168.100.%' IDENTIFIED BY '49681888';
7.刷新權限
權限刷新一般指的就是我們在更改了權限的時候,我們需要對權限進行刷新才能使得我們更改的權限生效。。。
FLUSH PRIVILEGES;
8.查看任意用戶的權限
SHOW GRANTS FOR 'webuser'@'192.168.100.%';
9.回收權限
REVOKE DELETE ON test.* FROM 'webuser'@'192.168.100.%';
10.刪除用戶
注意刪除用戶不要使用DELETE直接刪除,因為使用DELETE刪除后用戶的權限並未刪除,新建同名用戶后又會繼承以前的權限。正確的做法是使用DROP USER命令刪除用戶,比如要刪除'webuser'@'192.168.100.%'用戶采用如下命令...
DROP USER 'webuser'@'192.168.100.%';
自己對權限管理算是有了一個基本的學習,也只是簡單的介紹了一些基本的東西。。。權限管理一般在大型項目中使用得到。。。在這里也就不再進行班門弄斧了。。。。
