mysql 删除原理_MySQL权限原理及删除MySQL的匿名账户
MySQL權限系統的工作原理
MySQL權限系統通過下面兩個階段進行認證:
(1)對連接的用戶進行身份認證,合法的用戶通過認證,不合法的用戶拒絕連接;
(2)對通過認證的合法用戶賦予相應的權限,用戶可以在這些權限范圍內對數據庫做相應的操作。
對于身份的認證,MySQL是通過IP地址和用戶名聯合進行確認的,例如MySQL安裝后默認創建的用戶root@localhost表示用戶root只能從本地(localhost)進行連接才可以通過認證,此用戶從其他任何主機對數據庫進行的連接都將被拒絕。也就是說,同樣的一個用戶名,如果來自不同的IP地址,則MySQL將其視為不同的用戶。
MySQL的權限表在數據庫啟動的時候就載入內存,當用戶通過身份認證后,就在內存中進行相應權限的存取,這樣,此用戶就可以在數據庫中做權限范圍內的各種操作了。所以在對用戶做了修改操作后flush privileges;后才會生效。
在權限存取的兩個過程中,系統會用到“mysql”數據庫(安裝MySQL時被創建,數據庫名稱叫“mysql”)中user、host和db這3個最重要的權限表。在這3個表中,最重要的表是user表,其次是db表,host表在大多數情況下并不使用。user中的列主要分為4個部分:用戶列、權限列、安全列和資源控制列。
當用戶進行連接的時候,權限表的存取過程有以下兩個階段。
先從user表中的host、user和password這3個字段中判斷連接的IP、用戶名和密碼是否存在于表中,如果存在,則通過身份驗證,否則拒絕連接。
如果通過身份驗證,則按照以下權限表的順序得到數據庫權限:user->db->tables_priv->columns_priv。
在這幾個權限表中,權限范圍依次遞減,全局權限覆蓋局部權限。
Host值可以是主機名或IP號,或“localhost”指出本地主機。
可以在Host列值使用通配符字符“%”和“_”。
Host值“%”匹配任何主機名,空Host值等價于“%”。它們的含義與LIKE操作符的模式匹配操作相同。例如,“%”的Host值與所有主機名匹配,而“%.mysql.com”匹配mysql.com域的所有主機。
如果權限表中的host既有“thomas.loc.gov”,又有“%”,而此時,連接從主機thomas.loc.gov過來。顯然,user表里面這兩條記錄都符合匹配條件,那系統會選擇哪一個呢?
如果有多個匹配,服務器必須選擇使用哪個條目。按照下述原則來解決:
l服務器在啟動時讀入user表后進行排序;
l然后當用戶試圖連接時,以排序的順序瀏覽條目;
l服務器使用與客戶端和用戶名匹配的第一行。
當服務器讀取表時,它首先以最具體的Host值排序。主機名和IP號是最具體的?!?”意味著“任何主機”并且是最不特定的。有相同Host值的條目首先以最具體的User值排序(空User值意味著“任何用戶”并且是最不特定的)。
刪除匿名用戶:
mysql版本5.6.18
查看用戶
使用不存在的用戶也可以登錄MySQL
刪除user為空的用戶
使用不存在的用戶不能再登錄MySQL
參考:《深入淺出MySQL》
本文轉自hbxztc 51CTO博客,原文鏈接:http://blog.51cto.com/hbxztc/1879606,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的mysql 删除原理_MySQL权限原理及删除MySQL的匿名账户的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql集群经常无法truncate_
- 下一篇: mysql创立不了数据库_以下不属于My