mysql資料庫user表host欄位的 問題

2022-06-18 18:30:11 字數 1673 閱讀 6590

搜尋:

連線:在mysql資料庫中,使用select user();檢視當前使用者。

mysql中host欄位的%與localhost不是誰包括誰的問題,是由模糊到精確進行匹配的:

當使用者從客戶端請求登陸時,mysql將授權表中的條目與客戶端所提供的條目進行比較,包括使用者的使用者名稱,密碼和主機。授權表中的host欄位是可以使用萬用字元作為模式進行匹配的,如test.example.com, %.example.com, %.com和%都可以匹配test.example.com這個主機。授權表中的user欄位不允許使用模式匹配,但是可以有乙個空字元的使用者名稱代表匿名使用者,並且空字串可以匹配所有的使用者名稱,就像萬用字元一樣。 當user表中的host和user有多個值可以匹配客戶端提供的主機和使用者名稱時,mysql將user表讀入記憶體,並且按照一定規則排序,按照排序規則讀取到的第乙個匹配客戶端使用者名稱和主機名的條目對客戶端進行身份驗證。

二、排序規則:對於host欄位,按照匹配的精確程度進行排序,越精確的排序越前,例如當匹配test.example.com這個主機時, %.example.com比%.com更精確,而test.example.com比%.example.com更精確。對於user欄位,非空的字串使用者名稱比空字串匹配的使用者名稱排序更靠前。 user和host欄位都有多個匹配值,mysql使用主機名排序最前的條目,在主機名字段相同時再選取使用者名稱排序更前的條目。因此,如果user和host欄位都有多個匹配值,主機名最精確匹配的條目被使用者對使用者進行認證。

這是一般的匹配規則。但是今天遇到了%不能在本地登入的問題。

這是本地root登入檢視的user表:

這是遠端用xiao使用者登入:

再來看看本地用xiao使用者登入:

使用命令:「mysql -uxiao」 

使用命令:「mysql -uxiao -p**************」

官方有說%不包括localhost。

%是匹配所有host的主機的,但是mysql的user匹配host是從具體到模糊的,所以如果有localhost或127.0.0.1存在,就不會去匹配%這個使用者了。

但是為何本地mhysql -u*** 可以直接登入,而mysql -u**** -p******卻登入不了?其實,最開始的一段解釋就已經說清楚了。

使用xiao在本機登入資料時,不指定-h引數預設為localhost主機登入,而在mysql中有兩個匹配的條目:@'%'  和 ''@'localhost'

匿名使用者能夠匹配的原因上面說過,空字串可以匹配所有的使用者名稱,就像萬用字元一樣。

根據mysql認證時的排序規則,第乙個條目的使用者名稱排序更前,第二個條目的主機名更精確,排序更前。

而mysql會優先使用主機名排序第一的條目進行身份認證,因此''@'localhost'被使用者對客戶端進行認證。因此,只有使用匿名使用者的空密碼才能登入進資料庫。就會出現下面的情況了。

mysql資料庫中mysql庫中user表被刪除

由於mysql資料庫中mysql庫中的user表被刪除,試了一些方法恢復不了,決定把原來的mysql資料夾刪除後重新再安裝個新的,其實這個不用安裝,解壓後就行 按照另一篇部落格 mysql安裝 裡走到生成data檔案時出錯,然後 mysqld console檢視出錯原因 server data di...

mysql資料庫表關係 資料庫 表關係

上節回顧 1.建表語法 注意點 2.資料型別 今日內容 1.表之間的關係 多對一,多對多,一對一 2.複製表 分表 為什麼要分表?乙個表中 要儲存個人資訊又要儲存部門資訊 會導致大量的資料冗餘 所有資料存放在同乙個表中 將導致以下幾個問題 1.浪費空間 不致命 2.結構混亂 3.修改資料時 如果有一...

MYSQL資料庫之建立資料庫表

每個表都應有乙個主鍵字段。主鍵用於對錶中的行進行唯一標識。每個主鍵值在表中必須是唯一的。此外,主鍵字段不能為空,這是由於資料庫引擎需要乙個值來對記錄進行定位。主鍵字段永遠要被編入索引。這條規則沒有例外。你必須對主鍵字段進行索引,這樣資料庫引擎才能快速定位給予該鍵值的行。下面的例子把 personid...