您好,登錄后才能下訂單哦!
下文主要給大家帶來MySQL的權限原理及怎么樣刪除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值意味著“任何用戶”并且是最不特定的)。
排序前: +-----------+----------+- | Host | User | … +-----------+----------+- |% | root | … |% | jeffrey | … |localhost | root | … |localhost | | … +-----------+----------+- 排序后: +-----------+----------+- |Host | User | … +-----------+----------+- |localhost | root | … ... |localhost | | …... |% |jeffrey | … ... |% |root | … ... +-----------+----------+-
刪除匿名用戶:
mysql版本5.6.18
查看用戶
mysql> select user,host,plugin,password,authentication_string,password_expired from mysql.user; +------+-----------+-----------------------+-------------------------------------------+-----------------------+------------------+ | user | host | plugin | password | authentication_string | password_expired | +------+-----------+-----------------------+-------------------------------------------+-----------------------+------------------+ | root | localhost | | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | N | | root | rhel7 | | | | N | | root | 127.0.0.1 | | | | N | | root | ::1 | | | | N | | | localhost | | | NULL | N | | | rhel7 | | | NULL | N | | zx | % | mysql_native_password | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | N | +------+-----------+-----------------------+-------------------------------------------+-----------------------+------------------+
使用不存在的用戶也可以登錄MySQL
[root@rhel7 mysql5.6.18]# ./bin/mysql -ua Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 Server version: 5.6.18-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
刪除user為空的用戶
mysql> delete from mysql.user where user=''; Query OK, 2 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> select user,host,plugin,password,authentication_string,password_expired from mysql.user; +------+-----------+-----------------------+-------------------------------------------+-----------------------+------------------+ | user | host | plugin | password | authentication_string | password_expired | +------+-----------+-----------------------+-------------------------------------------+-----------------------+------------------+ | root | localhost | | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | N | | root | rhel7 | | | | N | | root | 127.0.0.1 | | | | N | | root | ::1 | | | | N | | zx | % | mysql_native_password | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | N | +------+-----------+-----------------------+-------------------------------------------+-----------------------+------------------+ 5 rows in set (0.00 sec)
使用不存在的用戶不能再登錄MySQL
[root@rhel7 mysql5.6.18]# ./bin/mysql -ua ERROR 1045 (28000): Access denied for user 'a'@'localhost' (using password: NO)
對于以上關于MySQL的權限原理及怎么樣刪除MySQL匿名賬戶,大家是不是覺得非常有幫助。如果需要了解更多內容,請繼續關注我們的行業資訊,相信你會喜歡上這些內容的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。