下文主要給大家?guī)鞰ySQL的權(quán)限原理及怎么樣刪除MySQL匿名賬戶,希望MySQL的權(quán)限原理及怎么樣刪除MySQL匿名賬戶能夠帶給大家實際用處,這也是我編輯這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
網(wǎng)站的建設(shè)創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計體驗!已為成都食品包裝袋等企業(yè)提供專業(yè)服務(wù)。MySQL權(quán)限系統(tǒng)的工作原理
MySQL權(quán)限系統(tǒng)通過下面兩個階段進行認證:
(1)對連接的用戶進行身份認證,合法的用戶通過認證,不合法的用戶拒絕連接;
(2)對通過認證的合法用戶賦予相應(yīng)的權(quán)限,用戶可以在這些權(quán)限范圍內(nèi)對數(shù)據(jù)庫做相應(yīng)的操作。
對于身份的認證,MySQL是通過IP地址和用戶名聯(lián)合進行確認的,例如MySQL安裝后默認創(chuàng)建的用戶root@localhost表示用戶root只能從本地(localhost)進行連接才可以通過認證,此用戶從其他任何主機對數(shù)據(jù)庫進行的連接都將被拒絕。也就是說,同樣的一個用戶名,如果來自不同的IP地址,則MySQL將其視為不同的用戶。
MySQL的權(quán)限表在數(shù)據(jù)庫啟動的時候就載入內(nèi)存,當(dāng)用戶通過身份認證后,就在內(nèi)存中進行相應(yīng)權(quán)限的存取,這樣,此用戶就可以在數(shù)據(jù)庫中做權(quán)限范圍內(nèi)的各種操作了。所以在對用戶做了修改操作后flush privileges;后才會生效。
在權(quán)限存取的兩個過程中,系統(tǒng)會用到“mysql”數(shù)據(jù)庫(安裝MySQL時被創(chuàng)建,數(shù)據(jù)庫名稱叫“mysql”)中user、host和db這3個最重要的權(quán)限表。在這3個表中,最重要的表是user表,其次是db表,host表在大多數(shù)情況下并不使用。user中的列主要分為4個部分:用戶列、權(quán)限列、安全列和資源控制列。
當(dāng)用戶進行連接的時候,權(quán)限表的存取過程有以下兩個階段。
先從user表中的host、user和password這3個字段中判斷連接的IP、用戶名和密碼是否存在于表中,如果存在,則通過身份驗證,否則拒絕連接。
如果通過身份驗證,則按照以下權(quán)限表的順序得到數(shù)據(jù)庫權(quán)限:user->db->tables_priv->columns_priv。
在這幾個權(quán)限表中,權(quán)限范圍依次遞減,全局權(quán)限覆蓋局部權(quán)限。
Host值可以是主機名或IP號,或“l(fā)ocalhost”指出本地主機。
可以在Host列值使用通配符字符“%”和“_”。
Host值“%”匹配任何主機名,空Host值等價于“%”。它們的含義與LIKE操作符的模式匹配操作相同。例如,“%”的Host值與所有主機名匹配,而“%.mysql.com”匹配mysql.com域的所有主機。
如果權(quán)限表中的host既有“thomas.loc.gov”,又有“%”,而此時,連接從主機thomas.loc.gov過來。顯然,user表里面這兩條記錄都符合匹配條件,那系統(tǒng)會選擇哪一個呢?
如果有多個匹配,云服務(wù)器必須選擇使用哪個條目。按照下述原則來解決:
l 云服務(wù)器在啟動時讀入user表后進行排序;
l 然后當(dāng)用戶試圖連接時,以排序的順序瀏覽條目;
l 云服務(wù)器使用與客戶端和用戶名匹配的第一行。
當(dāng)云服務(wù)器讀取表時,它首先以最具體的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)
對于以上關(guān)于MySQL的權(quán)限原理及怎么樣刪除MySQL匿名賬戶,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會喜歡上這些內(nèi)容的。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。