溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL授權(quán)表的概述

發(fā)布時間:2021-09-16 16:47:00 來源:億速云 閱讀:126 作者:chen 欄目:數(shù)據(jù)庫

這篇文章主要介紹“MySQL授權(quán)表的概述”,在日常操作中,相信很多人在MySQL授權(quán)表的概述問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL授權(quán)表的概述”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!


  一、MySQL授權(quán)表概述
  MySQL服務(wù)器的特 點(diǎn)之一是,它在控制每個用戶行為方面提供了極大的靈活性。例如,我們既可以限制用戶訪問整個數(shù)據(jù)庫,也可以限制用戶訪問數(shù)據(jù)庫中特定的表,或者禁止訪問特 定表中的特定列。由此看出MySQL服務(wù)器在用戶授權(quán)方面的靈活性。本文將向大家詳細(xì)介紹MySQL服務(wù)器是如何處理用戶權(quán)限的授與/撤回的,尤其是 MySQL的授權(quán)表tables_priv和columns_priv。
  MySQL的授權(quán)系統(tǒng)通常是通過MySQL數(shù)據(jù)庫中的五個表來 實(shí)現(xiàn)的,這些表有user、db、host、tables_priv和columns_priv。這些表的用途各有不同,但是有一點(diǎn)是一致的,那就是都能 夠檢驗(yàn)用戶要做的事情是否為被允許的。每個表的字段都可分解為兩類,一類為作用域字段,一類為權(quán)限字段。作用域字段用來標(biāo)識主機(jī)、用戶或者數(shù)據(jù)庫;而權(quán)限 字段則用來確定對于給定主機(jī)、用戶或者數(shù)據(jù)庫來說,哪些動作是允許的。下面,我們對這些表的作用做簡單介紹:
  下 面,我們通過如下幾個方面對MySQL用戶授權(quán)過程加以介紹:首先介紹MySQL訪問控制過程,解答MySQL授權(quán)表是如何工作的;然后,我們介紹 tables_priv和columns_priv授權(quán)表,我們會給出與MySQL的tables_priv表有關(guān)的解釋和范例。最后,我們介紹與 columns_priv授權(quán)表有關(guān)的解釋和若干范例。
  二、MySQL服務(wù)器的訪問控制
  現(xiàn)在讓我們來看看MySQL服務(wù)器是如何通過用戶特權(quán)來控制用戶訪問的。雖然這乍聽起來好像挺嚇人的,但是通過一個例子的演示,您就會發(fā)現(xiàn)其實(shí)事情沒有我們想象的那么難以理解。
  首先,對用戶的訪問進(jìn)行控制的時候,系統(tǒng)需要查看作為過濾器的一些授權(quán)表,這些表的使用過程是從一般到特殊,這些表包括:
  此外,一旦連接到了服務(wù)器,一個用戶可以使用兩種類型的請求:
  當(dāng)用戶提交管理請求時,服務(wù)器只需查看user表,這是因?yàn)閡ser表是唯一包含與管理工作有關(guān)的權(quán)限的一個表。然而,當(dāng)用戶提交數(shù)據(jù)庫請求時,要查看的表就要更多了。
   您可能已經(jīng)注意到了,這些授權(quán)表的內(nèi)容好像有些重復(fù),例如user表中有select權(quán)限,同時host和user表中也有同樣的權(quán)限。但是,這樣做自 有其道理。我們可以考慮一下user表中全局性的與數(shù)據(jù)庫相關(guān)的權(quán)限,也就是說,在這個表中授予用戶的權(quán)限對服務(wù)器上的所有數(shù)據(jù)庫都有效。這些權(quán)限可以被 認(rèn)為是超級用戶權(quán)限。相反,包含在host和db表之內(nèi)的與數(shù)據(jù)庫相關(guān)的權(quán)限則是特定于主機(jī)或者數(shù)據(jù)庫的。因此,讓這個表內(nèi)所有的權(quán)限保持為“N”不失為 一個明智的選擇。
  讓我們假定我們的user和db表如下所示:

  情景1:失敗的連接嘗試
  用戶“alessia”連接服務(wù)器時將被拒絕。因?yàn)?,主機(jī)、用戶和/或密碼與保持在user表中的不匹配, 所以會拒絕用戶的請求。
  情景2:user表中數(shù)據(jù)庫權(quán)限為N,db表中數(shù)據(jù)庫權(quán)限為Y
  1. 用戶wj嘗試連接時將會成功。
  2. 用戶wj試圖在數(shù)據(jù)庫oats上執(zhí)行Select命令。
  3. 服務(wù)器查看user表,對應(yīng)于Select命令的條目的值為N,即表示拒絕。
  4. 服務(wù)器然后查看db表,對應(yīng)于Select命令的表項(xiàng)的值為Y,即表示允許。
  5. 該請求將成功執(zhí)行,因?yàn)樵撚脩舻膁b表中的SELECT字段的值為Y。
  情景3:user表中數(shù)據(jù)庫權(quán)限為Y,db表中數(shù)據(jù)庫權(quán)限為N
  1. 用戶wj嘗試連接時將會成功。
  2. 用戶wj試圖在數(shù)據(jù)庫oats上執(zhí)行Select命令。
  3. 服務(wù)器查看user表,對應(yīng)于Select命令的表項(xiàng)的值為Y,即表示允許。 因?yàn)樵趗ser表之內(nèi)授與的權(quán)限是全局性的,所以該請求會成功執(zhí)行。
  情景4:user表中數(shù)據(jù)庫權(quán)限為N,db表中數(shù)據(jù)庫權(quán)限為N
  1. 用戶wj嘗試連接時將會成功。
  2. 用戶wj試圖在數(shù)據(jù)庫oats上執(zhí)行Select命令。
  3. 服務(wù)器查看user表,對應(yīng)于Select命令的表項(xiàng)的值為N,即表示拒絕。
  4. 服務(wù)器現(xiàn)在會查看db表,對應(yīng)于Select命令的表項(xiàng)的值為N,即表示拒絕。
  5. 服務(wù)器現(xiàn)在將查找tables_priv和columns_priv表。如果用戶的請求符合表中賦予的權(quán)限,則準(zhǔn)予訪問。 否則,訪問就會被拒絕。
  對于tables_priv和columns_priv表,后面會進(jìn)一步加以詳述。
  情景5:讓我們假定下列情況為真:

  • user表——該表決定是否允許用戶連接到服務(wù)器。如果允許連接,權(quán)限字段則為該用戶的全局權(quán)限。

  • db表——用于決定哪些用戶可以從哪些主機(jī)訪問哪些數(shù)據(jù)庫。包含在db表中的權(quán)限適用于這個表標(biāo)識的數(shù)據(jù)庫。

  • host表——當(dāng)您想在db表的范圍之內(nèi)擴(kuò)展一個條目時,就會用到這個表。舉例來說,如果某個db允許通過多個主機(jī)訪問的話,那么超級用戶就可以讓db表內(nèi)將host列為空,然后用必要的主機(jī)名填充host表。

  • tables_priv表——該表與db表相似,不同之處是它用于表而不是數(shù)據(jù)庫。這個表還包含一個其他字段類型,包括timestamp和grantor兩個字段,用于存儲時間戳和授權(quán)方。在本文后面我們會對這個表做進(jìn)一步的講解。

  • columns_priv ——該表作用幾乎與db和tables_priv表一樣,不同之處是它提供的是針對某些表的特定列的權(quán)限。這個表也多出了一個字段類型,即其他字段,包括 了一個timestamp列,用于存放時間戳。 在本文后面部分,我們還會對columns_priv表做進(jìn)一步的說明。

  • User表

  • Db表

  • Host表

  • Tables_priv 表

  • Columns_priv 表

  • 管理請求(shutdown,reload,等)

  • 數(shù)據(jù)庫相關(guān)的請求(insert,delete,等)

  • user表中用戶wj的host字段的值為%。

  • db表中用戶wj對應(yīng)的host字段的值為空。

  這時會發(fā)生什么情況呢?
  1. 用戶wj嘗試通過一個給定主機(jī)進(jìn)行連接。
  2. 假設(shè)密碼是正確的,那么就會連接成功,因?yàn)閡ser表指出只要是通過用戶名wj和有關(guān)密碼進(jìn)行連接的話,任何(字符%所代表的含義)主機(jī)都是允許的。
  3. MySQL服務(wù)器將查找db表,不過,這里沒有指定主機(jī)。
  4. MySQL服務(wù)器現(xiàn)在將查看host表。如果該用戶要連接的數(shù)據(jù)庫以及用戶建立連接時所在主機(jī)的名稱都位于host表中,那么該用戶就能夠按照host表中所列出的權(quán)限來執(zhí)行命令。 否則的話,用戶將無法執(zhí)行命令,實(shí)際上更本就無法連接。
  通過了解上述情形,讀者就應(yīng)該對授權(quán)系統(tǒng)有一定了解了。下面,我們再來仔細(xì)聊聊tables_priv表和columns_priv表。

  三、Tables_priv表與columns_priv表
   在上面介紹的五種授權(quán)表中,tables_priv和columns_priv是后來加入進(jìn)來的,它們的主要目的是提供細(xì)粒度的用戶控制。這兩個表與授 權(quán)表db非常類似,但是其控制的范圍更加細(xì)致,即特定數(shù)據(jù)庫中的特定的表。前面說過,超級用戶可以通過授權(quán)表db來限制用戶在一個數(shù)據(jù)庫中的行為,有了這 兩個授權(quán)表,超級用戶可以進(jìn)一步控制用戶針對每個表和每個字段的動作。所以,這給超級用戶提供了更加靈活的控制選項(xiàng)。
  在深入學(xué)習(xí)對數(shù)據(jù)表的訪問控制之前,首先讓我們了解一下下列特性:
  授權(quán)表tables_priv
  下列是一個tables_priv表的示意圖:

  下面簡要介紹各字段的含義:

  • 通配符可以用于這兩個表的host字段,但是不允許在Db、Table_name和Column_name字段使用通配符。

  • 權(quán)限字段被聲明為SET字段。

  • tables_priv和columns_priv表只應(yīng)當(dāng)通過GRANT/REVOKE命令進(jìn)行修改。通過INSERT命令向這兩個表插入數(shù)據(jù)會導(dǎo)致服務(wù)器不穩(wěn)定!

  • tables_priv表中的table_priv字段可以允許下列命令:Select、Insert、Update、Delete、Create、Drop、Grant、References、Index和Alter。

  • tables_priv表中的column_priv字段允許下列命令:Select、Insert、Update和References。

  • columns_priv表中的type字段允許下列命令:Select、Insert、Update和References。

到此,關(guān)于“MySQL授權(quán)表的概述”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI