中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何深入學習MySQL授權表

發布時間:2021-11-20 09:22:36 來源:億速云 閱讀:205 作者:柒染 欄目:MySQL數據庫

如何深入學習MySQL授權表,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

我們將向讀者詳細介紹MySQL的授權表,并通過一些實例來講解MySQL是如何提高這些授權表來實現用戶訪問控制的。我們首先介紹MySQL訪問控制過程,然后說明tables_priv和columns_priv授權表,我們會給出與MySQL的tables_priv表有關的解釋和范例。最后,我們介紹columns_priv授權表及其范例。

 一、MySQL授權表概述

  MySQL服務器的特點之一是,它在控制每個用戶行為方面提供了極大的靈活性。例如,我們既可以限制用戶訪問整個數據庫,也可以限制用戶訪問數據庫中特定的表,或者禁止訪問特定表中的特定列。由此看出MySQL服務器在用戶授權方面的靈活性。本文將向大家詳細介紹MySQL服務器是如何處理用戶權限的授與/撤回的,尤其是MySQL的授權表tables_priv和columns_priv。

  MySQL的授權系統通常是通過MySQL數據庫中的五個表來實現的,這些表有user、db、host、tables_priv和columns_priv。這些表的用途各有不同,但是有一點是一致的,那就是都能夠檢驗用戶要做的事情是否為被允許的。每個表的字段都可分解為兩類,一類為作用域字段,一類為權限字段。作用域字段用來標識主機、用戶或者數據庫;而權限字段則用來確定對于給定主機、用戶或者數據庫來說,哪些動作是允許的。下面,我們對這些表的作用做簡單介紹:

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

  • db表——用于決定哪些用戶可以從哪些主機訪問哪些數據庫。包含在db表中的權限適用于這個表標識的數據庫。

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

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

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

  下面,我們通過如下幾個方面對MySQL用戶授權過程加以介紹:首先介紹MySQL訪問控制過程,解答MySQL授權表是如何工作的;然后,我們介紹tables_priv和columns_priv授權表,我們會給出與MySQL的tables_priv表有關的解釋和范例。最后,我們介紹與columns_priv授權表有關的解釋和若干范例。

  二、MySQL服務器的訪問控制

  現在讓我們來看看MySQL服務器是如何通過用戶特權來控制用戶訪問的。雖然這乍聽起來好像挺嚇人的,但是通過一個例子的演示,您就會發現其實事情沒有我們想象的那么難以理解。

  首先,對用戶的訪問進行控制的時候,系統需要查看作為過濾器的一些授權表,這些表的使用過程是從一般到特殊,這些表包括:

  • User表

  • Db表

  • Host表

  • Tables_priv 表

  • Columns_priv 表

  此外,一旦連接到了服務器,一個用戶可以使用兩種類型的請求:

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

  • 數據庫相關的請求(insert,delete,等)

  當用戶提交管理請求時,服務器只需查看user表,這是因為user表是唯一包含與管理工作有關的權限的一個表。然而,當用戶提交數據庫請求時,要查看的表就要更多了。

  您可能已經注意到了,這些授權表的內容好像有些重復,例如user表中有select權限,同時host和user表中也有同樣的權限。但是,這樣做自有其道理。我們可以考慮一下user表中全局性的與數據庫相關的權限,也就是說,在這個表中授予用戶的權限對服務器上的所有數據庫都有效。這些權限可以被認為是超級用戶權限。相反,包含在host和db表之內的與數據庫相關的權限則是特定于主機或者數據庫的。因此,讓這個表內所有的權限保持為“N”不失為一個明智的選擇。

  讓我們假定我們的user和db表如下所示:

如何深入學習MySQL授權表

如何深入學習MySQL授權表

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

  • Host——適用于那些主機?

  • Db——適用于從上面的主機所連接的哪些數據庫?

  • User——適用于來自上述主機的哪些用戶?

  • Table_name——適用于上述數據庫中的哪些表?

  • Table_priv——為這個表賦予哪些權限?

  • Column_priv——為這個表中的個字段賦予哪些權限?

  • Timestamp——這個權限是何時賦予的?

  • Grantor——誰授與該用戶的這個權限?

  •  要想真正弄懂tables_priv表,最好的辦法就是通過實例進行學習,下面我們就給出一些例子。

      例1:

    %>GRANTSELECTON italy TO wj@314interactive.com;

      這條命令的作用是什么?以上命令允許來自主機314interactive.com的用戶wj在表italy上至下一個SELECT語句。請記住,只有當給定數據庫/主機和用戶名對應的db或者host表中的SELECT字段的值為N時,才需要訪問這個表。如果給定數據庫/主機和用戶名對應的db或者host表中的SELECT字段中有一個值為Y的話,那么就無需控制該tables_priv表。

      例2:

    %>GRANTSELECT, INSERTON oats.italy TO wj@314interactive.com;

      這條命令的作用是什么?以上命令允許來自主機314interactive.com的用戶wj對數據庫oats中的數據表italy執行SELECT和INSERT語句。

      例3:

    %>REVOKESELECTon oats.italy from wj@314interactive.com

      這條命令的作用是什么?以上命令撤消來自主機314interactive.com的用戶wj對數據庫oats中的表italy的執行SELECT的權限。

      重要的是要認識到,包含在tables_priv中的信息僅當host/db表不允許用戶執行要求的功能所需的權限時才生效。如果給定的權限在host/db表中為Y,那么就無需考察tables_priv表。

      例4:

    %>GRANTSELECT(id,name,address,phone),update(address,phone) ON
    company.customers TO gilmore@314interactive.com;

      這條命令的作用是什么?以上命令將授予對company數據庫中customers表內id、name、address和phone字段執行SELECT的權限,以及對address和phone字段執行UPDATE的權限。

      這將帶來哪些影響?這條命令會修改tables_priv表和columns_priv表,這是因為它引用這兩個表和表內特定的字段。

      例5:

    %>REVOKEUPDATE(address,phone) ON company.customers FROM gilmore@314interactive.com;

      這條命令的作用是什么?這個命令將撤消對company數據庫中customers表內的address和phone字段執行UPDATE操作的權限。

      這將帶來哪些影響?因為該命令直接涉及給定表中的某些字段,所以columns_priv表以及tables_priv表也會更新。

      前面說過,只有在必須的情況下才會使用授權表,舉例來說,如果高優先級的表提供了適當的權限的話,那么就無需查閱優先級較低的授權表了。如果高優先級的表中對應命令的值為N,那么就需要進一步查看低優先級的授權表。

無論是那種級別的權限,只要有一個級別允許了,訪問就能成功,這樣是合理的,比如說我只想讓一個用戶訪問一個數據庫中的一個表,那么在全局和數據庫級訪問權限肯定是N,只有在表級是Y。如果一個用戶在全局是Y,那么不管他在數據庫級和表級是不是Y,他都會訪問成功。因為只要在全局驗證了Y,MYSQL就不再數據庫級和表級進行驗證。

關于如何深入學習MySQL授權表問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佛山市| 六安市| 泰兴市| 淳安县| 汉川市| 青田县| 香格里拉县| 木兰县| 丹寨县| 峨边| 鹤岗市| 独山县| 唐山市| 石狮市| 钦州市| 黎平县| 米脂县| 华池县| 澄迈县| 哈巴河县| 辽中县| 枣强县| 闵行区| 朝阳市| 仪征市| 宁蒗| 巴南区| 韶关市| 饶河县| 雷山县| 根河市| 萨嘎县| 泰顺县| 盐津县| 东辽县| 青海省| 许昌市| 屏边| 白山市| 黔江区| 乌什县|