mysql權限系統的工作原理_Mysql權限系統工作原理

MySQL權限系統保證所有的用戶可以嚴格地做他們假定被允許做的事情。當你連接一個MySQL服務器時, 你的身份由你從那連接的主機和你指定的用戶名來決定,系統根據你的身份和你想做什么來授予權限。

MySQL在認定身份中考慮你的主機名和用戶名字,是因為有很小的原因假定一個給定的用戶在因特網上屬于同一個人。例如,用戶從whitehouse.gov連接的bill不必和從mosoft.com連接bill是同一個人。 MySQL通過允許你區分在不同的主機上碰巧有同樣名字用戶來處理它:你可以對從whitehouse.gov連接授與bill一個權限集,而為從microsoft.com的連接授予一個不同的權限集。

MySQL存取控制包含2個階段:

階段1:服務器檢查你是否允許連接。

階段2:假定你能連接,服務器檢查你發出的每個請求。看你是否有足夠的權限實施它。例如,如果你從數據庫中一個表精選(select)行或從數據庫拋棄一個表,服務器確定你對表有select權限或對數據庫有drop權限。

服務器在存取控制的兩個階段使用在mysql的數據庫中的user、db和host表,在這些授權表中字段如下:

表名稱? user? db? host

范圍字段? Host? Host? Host

User? Db? Db

Password? User

權限字段? Select_priv? Select_priv? Select_priv

Insert_priv? Insert_priv? Insert_priv

Update_priv? Update_priv? Update_priv

Delete_priv? Delete_priv? Delete_priv

Index_priv? Index_priv? Index_priv

Alter_priv? Alter_priv? Alter_priv

Create_priv? Create_priv? Create_priv

Drop_priv? Drop_priv? Drop_priv

Grant_priv? Grant_priv? Grant_priv

Reload_priv

Shutdown_priv

Process_priv

File_priv

對存取控制的第二階段(請求證實),如果請求涉及表,服務器可以另外參考tables_priv和columns_priv表。這些表的字段如下:

表名稱 tables_priv? columns_priv

范圍字段? Host? Host

Db? Db

User? User

Table_name? Table_name

Column_name

權限字段? Table_priv? Column_priv

Column_priv

其他字段? Timestamp? Timestamp

Grantor

每個授權表包含范圍字段和權限字段。

范圍字段決定表中每個條目的范圍,即,條目適用的上下文。例如, 一個user表條目的Host和User值為''thomas.loc.gov''和''bob''將被用于證實來自主機thomas.loc.gov的bob對服務器的連接。同樣,一個db表條目的Host、User和Db字段的值是''thomas.loc.gov''、''bob''和''reports''將用在bob從主機聯接thomas.loc.gov存取reports數據庫的時候。 tables_priv和columns_priv表包含范圍字段,指出每個條目適用的表或表/列的組合。

對于檢查存取的用途,比較Host值是忽略大小寫的。User、Password、Db和Table_name值是區分大小寫的。Column_name值在MySQL3.22.12或以后版本是忽略大小寫的。

權限字段指出由一個表條目授予的權限,即,可實施什么操作。服務器組合各種的授權表的信息形成一個用戶權限的完整描述。為此使用的規則在6.8 存取控制, 階段2:請求證實描述。

范圍字段是字符串,如下所述;每個字段的缺省值是空字符串:

字段名? 類型

Host? CHAR(60)

User? CHAR(16)

Password? CHAR(16)

Db? CHAR(64)? (tables_priv和columns_priv表為CHAR(60))

在user、db和host表中,所有權限字段被聲明為ENUM(''N'',''Y'')--每一個都可有值''N''或''Y'',并且缺省值是''N''.

在tables_priv和columns_priv表中,權限字段被聲明為SET字段:

表名? 字段名? 可能的集合成員

tables_priv? Table_priv? ''Select'', ''Insert'', ''Update'', ''Delete'', ''Create'', ''Drop'', ''Grant'', ''References'', ''Index'', ''Alter''

tables_priv? Column_priv? ''Select'', ''Insert'', ''Update'', ''References''

columns_priv? Column_priv? ''Select'', ''Insert'', ''Update'', ''References''

簡單地說,服務器使用這樣的授權表:

user表范圍字段決定是否允許或拒絕到來的連接。對于允許的連接,權限字段指出用戶的全局(超級用戶)權限。

db和host表一起使用:

db表范圍字段決定用戶能從哪個主機存取哪個數據庫。權限字段決定允許哪個操作。

當你想要一個給定的db條目應用于若干主機時,host表作為db表的擴展被使用。例如,如果你想要一個用戶能在你的網絡從若干主機使用一個數據庫,在用戶的db表的Host條目設為空值,然后將那些主機的每一個移入host表。這個機制詳細描述在6.8 存取控制, 階段2:請求證實。

tables_priv和columns_priv表類似于db表,但是更精致:他們在表和列級應用而非在數據庫級。

注意管理權限(reload, shutdown, 等等)僅在user表中被指定。這是因為管理性操作是服務器本身的操作并且不是特定數據庫,因此沒有理由在其他授權表中列出這樣的權限。事實上,只需要請教user表來決定你是否執行一個管理操作。

file權限也僅在user表中指定。它不是管理性權限,但你讀或謝在服務器主機上的文件的的能力獨立于你正在存取的數據庫。

當mysqld服務器啟動時,讀取一次授權

MySQL教程是:Mysql權限系統工作原理。表內容。對授權表的更改生效在6.9 權限更改何時生效描述。

當你修改授權表的內容時,確保你按你想要的方式更改權限設置是一個好主意。為幫助診斷問題,見6.13 “存取拒絕引起”錯誤的原因。對于安全問題上的忠告,見6.14 怎么對使MySQL安全對抗解密高手。

一個有用的診斷工具是mysqlaccess腳本,由Carlier Yves 提供給MySQL分發。使用--help選項調用mysqlaccess查明它怎樣工作。注意:mysqlaccess僅用user、db和host表僅檢查存取。它不檢查表或列級權限。

6.7 存取控制, 階段1:連接證實

當你試圖聯接一個MySQL服務器時,服務器基于你的身份和你是否能通過供應正確的口令驗證身份來接受或拒絕連接。如果不是,服務器完全具結你的存取,否則,服務器接受連接,然后進入階段2并且等待請求。

你的身份基于2個信息:

你從那個主機連接

你的MySQL用戶名

身份檢查使用3個user表(Host, User和Password)范圍字段執行。服務器只有在一個user表條目匹配你的主機名和用戶名并且你提供了正確的口令時才接受連接。

在user表范圍字段可以如下被指定:

一個Host值可以是主機名或一個IP數字,或''localhost''指出本地主機。

你可以在Host字段里使用通配符字符“%”和“_”。

一個Host值''%''匹配任何主機名,一個空白Host值等價于''%''。注意這些值匹配能創建一個連接到你的服務器的任何主機!

通配符字符在User字段中不允許,但是你能指定空白的值,它匹配任何名字。如果user表匹配到來的連接的條目有一個空白的用戶名,用戶被認為是匿名用戶(沒有名字的用戶),而非客戶實際指定的名字。這意味著一個空白的用戶名被用于在連接期間的進一步的存取檢查(即,在階段2期間)。

Password字段可以是空白的。這不意味著匹配任何口令,它意味著用戶必須不指定一個口令進行連接。

非空白Password值代表加密的口令。 MySQL不以任何人可以看的純文本格式存儲口令,相反,正在試圖聯接的一個用戶提供的口令被加密(使用PASSWORD()函數),并且與存儲了user表中的已經加密的版本比較。如果他們匹配,口令是正確的。

下面的例子顯示出各種user表中Host和User條目的值的組合如何應用于到來的連接:

Host 值? User 值? 被條目匹配的連接

''thomas.loc.gov''? ''fred''? fred, 從thomas.loc.gov 連接

''thomas.loc.gov''? ''''? 任何用戶, 從thomas.loc.gov連接

''%''? ''fred''? fred, 從任何主機連接

''%''? ''''? 任何用戶, 從任何主機連接

''%.loc.gov''? ''fred''? fred, 從在loc.gov域的任何主機連接

''x.y.%''? ''fred''? fred, 從x.y.net、x.y.com,x.y.edu等聯接。(這或許無用)

''144.155.166.177''? ''fred''? fred, 從有144.155.166.177 IP 地址的主機連接

''144.155.166.%''? ''fred''? fred, 從144.155.166 C類子網的任何主機連接

既然你能在Host字段使用IP通配符值(例如,''144.155.166.%''匹配在一個子網上的每臺主機),有可能某人可能企圖探究這種能力,通過命名一臺主機為144.155.166.somewhere.com。為了阻止這樣的企圖,MySQL不允許匹配以數字和一個點起始的主機名,這樣,如果你用一個命名為類似1.2.foo.com的主機,它的名字決不會匹配授權表中Host列。只有一個IP數字能匹配IP通配符值。

一個到來的連接可以被在user表中的超過一個條目匹配。例如,一個由fred從thomas.loc.gov的連接匹配多個條目如上所述。如果超過一個匹配,服務器怎么選擇使用哪個條目呢?服務器在啟動時讀入user表后通過排序來解決這個問題,然后當一個用戶試圖連接時,以排序的順序瀏覽條目,第一個匹配的條目被使用。

user表排序工作如下,假定user表看起來像這樣:

+-----------+----------+-

| Host????? | User???? | ...

+-----------+----------+-

| %???????? | root???? | ...

| %???????? | jeffrey? | ...

| localhost | root???? | ...

| localhost |????????? | ...

+-----------+----------+-

當服務器在表中讀取時,它以最特定的Host值為先的次序排列(''%''在Host列里意味著“任何主機”并且是最不特定的)。有相同Host值的條目以最特定的User值為先的次序排列(一個空白User值意味著“任何用戶”并且是最不特定的)。最終排序的user表看起來像這樣:

+-----------+----------+-

| Host????? | User???? | ...

+-----------+----------+-

| localhost | root???? | ...

| localhost |????????? | ...

| %???????? | jeffrey? | ...

| %???????? | root???? | ...

+-----------+----------+-

當一個連接被嘗試時,服務器瀏覽排序的條目并使用找到的第一個匹配。對于由jeffrey從localhost的一個連接,在Host列的''localhost''條目首先匹配。那些有空白用戶名的條目匹配連接的主機名和用戶名。(''%''/''jeffrey''條目也將匹配,但是它不是在表中的第一匹配。)

這是另外一個例子。假定user桌子看起來像這樣:

+----------------+----------+-

| Host?????????? | User???? | ...

+----------------+----------+-

| %????????????? | jeffrey? | ...

| thomas.loc.gov |????????? | ...

+----------------+----------+-

排序后的表看起來像這樣:

+---------------

MySQL教程是:Mysql權限系統工作原理。-+----------+-

| Host?????????? | User???? | ...

+----------------+----------+-

| thomas.loc.gov |????????? | ...

| %????????????? | jeffrey? | ...

+----------------+----------+-

一個由jeffrey從thomas.loc.gov的連接被第一個條目匹配,而一個由jeffrey從whitehouse.gov的連接被第二個匹配。

普遍的誤解是認為,對一個給定的用戶名,當服務器試圖對連接尋找匹配時,明確命名那個用戶的所有條目將首先被使用。這明顯不是事實。先前的例子說明了這點,在那里一個由jeffrey從thomas.loc.gov的連接沒被包含''jeffrey''作為User字段值的條目匹配,但是由沒有用戶名的題目匹配!

如果你有服務器連接的問題,打印出user表并且手工排序它看看第一個匹配在哪兒進行。

6.8 存取控制,階段2:請求證實

一旦你建立了一個連接,服務器進入階段2。對在此連接上進來的每個請求,服務器檢查你是否有足夠的權限來執行它,它基于你希望執行的操作類型。這正是在授權表中的權限字段發揮作用的地方。這些權限可以來子user、db、host、tables_priv或columns_priv表的任何一個。授權表用GRANT和REVOKE命令操作。見7.26 GRANT和REVOKE 句法。(你可以發覺參考6.6 權限系統怎樣工作很有幫助,它列出了在每個權限表中呈現的字段。)

user表在一個全局基礎上授予賦予你的權限,該權限不管當前的數據庫是什么均適用。例如,如果user表授予你delete權限, 你可以刪除在服務器主機上從任何數據庫刪除行!換句話說,user表權限是超級用戶權限。只把user表的權限授予超級用戶如服務器或數據庫主管是明智的。對其他用戶,你應該把在user表中的權限設成''N''并且僅在一個特定數據庫的基礎上授權, 使用db和host表。

db和host表授予數據庫特定的權限。在范圍字段的值可以如下被指定:

通配符字符“%”和“_”可被用于兩個表的Host和Db字段。

在db表的''%''Host值意味著“任何主機”,在db表中一個空白Host值意味著“對進一步的信息咨詢host表”。

在host表的一個''%''或空白Host值意味著“任何主機”。

在兩個表中的一個''%''或空白Db值意味著“任何數據庫”。

在兩個表中的一個空白User值匹配匿名用戶。

db和host表在服務器啟動時被讀取和排序(同時它讀user表)。db表在Host、Db和User范圍字段上排序,并且host表在Host和Db范圍字段上排序。對于user表,排序首先放置最特定的值然后最后最不特定的值,并且當服務器尋找匹配入條目時,它使用它找到的第一個匹配。

tables_priv和columns_priv表授予表和列特定的權限。在范圍字段的值可以如下被指定:

通配符“%”和“_”可用在使用在兩個表的Host字段。

在兩個表中的一個''%''或空白Host意味著“任何主機”。

在兩個表中的Db、Table_name和Column_name字段不能包含通配符或空白。

tables_priv和columns_priv表在Host、Db和User字段上被排序。這類似于db表的排序,盡管因為只有Host字段可以包含通配符,但排序更簡單。

請求證實進程在下面描述。(如果你熟悉存取檢查的源代碼,你會注意到這里的描述與在代碼使用的算法略有不同。描述等價于代碼實際做的東西;它只是不同于使解釋更簡單。)

對管理請求(shutdown、reload等等),服務器僅檢查user表條目,因為那是唯一指定管理權限的表。如果條目許可請求的操作,存取被授權了,否則拒絕。例如,如果你想要執行mysqladmin shutdown,但是你的user表條目沒有為你授予shutdown權限,存取甚至不用檢查db或host表就被拒絕。(因為他們不包含Shutdown_priv行列,沒有這樣做的必要。)

對數據庫有關的請求(insert、update等等),服務器首先通過查找user表條目來檢查用戶的全局(超級用戶)權限。如果條目允許請求的操作,存取被授權。如果在user表中全局權限不夠,服務器通過檢查db和host表確定特定的用戶數據庫權限:

服務器在db表的Host、Db和User字段上查找一個匹配。 Host和User對應連接用戶的主機名和MySQL用戶名。Db字段對應用戶想要存取的數據庫。如果沒有Host和User的條目,存取被拒絕。

如果db表中的條目有一個匹配而且它的Host字段不是空白的,該條目定義用戶的數據庫特定的權限。

如果匹配的db表的條目的Host字段是空白的,它表示host表列舉主機應該被允許存取數據庫的主機。在這種情況下,在host表中作進一步查找以發現Host和Db字段上的匹配。如果沒有host表條目匹配,存取被拒絕。如果有匹配,用戶數據庫特定的權限以在db和host表的條目的權限,即在兩個條目都是''Y''的權限的交集(而不是并集!)計算。(這樣你可以授予在db表條目中的一般權限,然后用host表條目按一個主機一個主機為基礎地有選擇地限制它們。)

在確定了由db和host表條目授予的數據庫特定的權限后,服務器把他們加到由user表授予的全局權限中。如果結果允許請求的操作,存取被授權。否則,服務器檢查在tables_priv和columns_priv表中的用戶的表和列權限并把它們加到用戶權限中。基于此結果允許或拒絕存取。

用布爾術語表示,前面關于一個用戶權限如何計算的描述可以這樣總結:

global privileges

OR (database privileges AND host privileges)

OR table privileges

OR column privileges

它可能不明顯,為什么呢,如果全局user條目的權限最初發現對請求的操作不夠,服務器以后把這些權限加到數據庫、表和列的特定權限。原因是一個請求可能要求超過一種類型的權限。例如,如果你執行一個INSERT ... SELECT語句,你就都要insert和select權限。你的權限必須如此以便user表條目授予一個權限而db表條目授予另一個。在這種情況下,你有必要的權限執行請求,但是服務器不能自己把兩個表區別開來;兩個條目授予的權限必須組合起來。

host表能被用來維護一個“安全”服務器列表。在TcX,host表包含一個在本地的網絡上所有的機器的表,這些被授予所有的權限。

你也可以使用host表指定不安全的主機。假定你有一臺機器public.your.domain,它位于你不認為是安全的一個公共區域,你可以用下列的host表條目子允許除了那臺機器外的網絡上所有主機的存取:

+--------------------+----+-

| Host?????????????? | Db | ...

+--------------------+----+-

| public.your.domain | %? | ... (所有權限設為 ''N'')

| %.your.domain????? | %? | ... (所有權限設為 ''Y'')

+--------------------+----+-

當然,你應該總是測試你在授權表中的條目(例如,使用mysqlaccess)讓你確保你的存取權限實際上以你認為的方式被設置.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530166.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530166.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530166.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql日志文件的類型和作用_Mysql日志文件和日志類型介紹_MySQL

日志文件類型MySQL有幾個不同的日志文件,可以幫助你找出mysqld內部發生的事情:日志文件記入文件中的信息類型錯誤日志記錄啟動、運行或停止mysqld時出現的問題。查詢日志記錄建立的客戶端連接和執行的語句。更新日志記錄更改數據的語句。不贊成使用該日志…

ruby mysql 驅動_windows下Rails安裝MySql驅動的配置

1.安裝ruby這我就不廢話了,安裝很簡單,網上資料也很多。安裝完后再環境變量path里加入D:ruby\bin(視你的安裝路徑了)安裝完后在命令行輸入ruby -v, 會顯示版本號,表示安裝成功,我的版本號是1.8.62.安裝rails我建議去官…

cross join 一張表沒有值關聯不出來數據_你是否還在對left join、right join和join有困擾呢?...

說到SQL,很多人可能用了挺久,但依然有個問題一直困擾著,那就是 left join、 join、 right join和 inner join等等各種 join的區別。網上搜,最常見的就是一張圖解圖,如下:接下來就來實際自己動手實驗&#x…

MySQL如何修改表的儲存方式_修改mysql默認存儲引擎的方法

修改mysql默認存儲引擎的方法,供大家學習參考。先來了解一下mysql存儲引擎:mysql服務器采用了模塊化風格,各部分之間保持相對獨立,尤其體現在存儲架構上。存儲引擎負責管理數據存儲,以及mysql的索引管理。通過定義的AP…

前端判斷是否安裝桌面應用_前端開發人員的桌面應用神器 Electron

01為什么用 JavaScript 來開發桌面應用?曾經的 JavaScript 脆弱、簡陋、甚至有被邊緣化的危險,不過 JavaScript 在經過了兩次飛躍后(以 V8 為首的 JavaScript 引擎和 Node.js 的問世),不再受人欺負,早已升級…

mysql 導出csv 多列_從包含300多列的csv,txt或xls文件創建MySQL表

你可以用一些langague C ,PHP解析txt文件......然后構建一個請求并執行它。PHP和PDO :: module將使這個最簡單。我不知道某個程序是否已經完成這項工作。這是一個解決方案。如果您選擇這樣做并遇到麻煩,歡迎您。每個stackoverflow成員都會幫助您。編輯&a…

mysql error 1594_【MySQL】解決mysql的 1594 錯誤-阿里云開發者社區

對于主從架構的mysql,當發生主機斷電或者其他原因異常crash的時候, slave的容易發生讀取binlog出錯的問題,最常見的是show slave status \G;Master_Log_File: mysql-bin.000029Read_Master_Log_Pos: 3154083Relay_Log_File: relay-bin.000478Relay_Log_Pos: 633Rel…

mysql innodb文件_MySQL的InnoDB文件介紹

MySQL一個顯著的特點是其可插拔的存儲引擎,因此MySQL文件分為兩種,一種是和MySQL數據庫本身相關 的文件,一種是和存儲引擎相關的文件。本文主要介紹和InnoDB存儲引擎相關的文件。表空間文件InnoDB在存儲上也模仿了Oracle的設計,數…

python中與label類似的控件是_python中tkinter的使用(控件整理)(一)

1、使用tkinter.Tk() 生成主窗口(windowtkinter.Tk()):window.title(標題名)修改框體的名字,也可在創建時使用className參數來命名;window.resizable(0,0)框體大小可調性,分別表示x,y方向的可變性;1表示可變,0表示不可…

jdbc dao 工具類mysql_Java基于JDBC實現事務,銀行轉賬及貨物進出庫功能示例

本文實例講述了Java基于JDBC實現事務,銀行轉賬及貨物進出庫功能。分享給大家供大家參考,具體如下:1. 轉賬業務轉賬必須執行2個sql語句(update更新)都成功的情況下,提交事務,如果有一個失敗,則2個都回滾事務…

冒險島單機版mysql_冒險島單機版

這款《冒險島單機版》經驗是盛大冒險島的100倍?最新盛大地圖及BOSS,甚至包括盛大沒有地圖BOSS及現金裝備,地圖包括新加坡,馬來西亞,臺灣,可口可樂城,鬧鬼宅邸,暹羅等等?。25駕坐騎&#xff0c…

python與html5搭建聊天室_html5 websocket 新版協議聊天室 服務端(python版)

網上找了很多代碼都是舊版協議的,研究了很久終于弄清楚了 現在發個用新版協議寫的服務端代碼出來(這個代碼是從網上舊版協議改過來的)最要就是握手協議和發送接受字符的方式變了# incodingutf-8import socketimport structimport hashlibimport threading,randomimp…

mysql數據庫開發筆記_MySQL數據庫生成數據庫說明文檔

在半年多前為一個MySQL數據庫生成過數據庫說明文檔,今天要重新生成一份,但是發現完全不記得當時是怎么生成的,只能在網上搜索重來一遍,所以今天特意把這個過程記錄一下。一、安裝使用MySQL數據庫表結構導出器DBExportDoc V1.0 For…

java 字符串緩沖區_詳解Java中字符串緩沖區StringBuffer類的使用

StringBuffer 是一個線程安全的可變的字符序列。它繼承于AbstractStringBuilder,實現了CharSequence接口。StringBuilder 也是繼承于AbstractStringBuilder的子類;但是,StringBuilder和StringBuffer不同,前者是非線程安全的&#…

rabbitmq java文檔_RabbitMQ文檔翻譯——Hello World!(上)

文章主要翻譯自RabbitMQ官方文檔,主要是為了練習英語翻譯,順便學習一下RabbitMQ😶其中也記錄了一些爬過的坑IntroductionRabbitMQ is a message broker. The principal idea is pretty simple: it accepts and forwards messages. You can th…

java string 包含http_Java中使用HttpPost上傳文件以及HttpGet進行API請求(包含HttpPost上傳文件)...

一、HttpPost上傳文件public static String getSuffix(final MultipartFile file){if(file null || file.getSize() 0){return null;}String fileName file.getOriginalFilename();return fileName.substring(fileName.lastIndexOf(".")1);}public static JSONObj…

java倒計時跳出窗口_java倒計時彈出框

直接使用java語言寫出一個運行時的彈出框倒計時:package test.dagong.testDecreaseDate;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.sw…

jpa mysql存儲過程_Jpa調用存儲過程及參數

public List findAllEntityListBySearch(Long inputInfoId, int flag) throws Exception {List infoviewListnew ArrayList<>();EntityManager em emf.createEntityManager();try {StoredProcedureQuery storedProcedure em.createStoredProcedureQuery("存儲名稱&…

python從mongodb里取出數據進行可視化_python3 mongoDB數據庫的安裝配置與可視化

python3 mongoDB數據庫的安裝配置與可視化。前天說是要學習如何使用mongoDB的鏈接與安裝。安裝環境&#xff1a; wind10 還是盜版的 磁盤分析&#xff1a;只有一個C盤&#xff0c;步驟&#xff1a;1 . 下載這里下載了對應的msi文件&#xff0c;貌似.zip文件沒有了2 我默認把mon…

idea 注入mapper報錯報紅的幾種解決方案

文章目錄 前言方法1&#xff1a;為 Autowired 注解設置required false方法2&#xff1a;用 Resource 替換 Autowired方法3&#xff1a;在Mapper接口上加上Repository注解方法4&#xff1a;用Lombok方法5&#xff1a;把IDEA的警告關閉掉方法6&#xff1a;不用管他 前言 相信大…