MySQL授權(quán)表概述和MySQL服務(wù)器的訪問控制
MySQL數(shù)據(jù)庫是應(yīng)用比較多的數(shù)據(jù)庫系統(tǒng),很受廣大用戶喜愛,MySQL授權(quán)表是怎樣的呢?MySQL服務(wù)器的訪問控制又是什么情況?接下來我將一一為大家解答。
一、MySQL授權(quán)表概述
MySQL服務(wù)器的特點之一是,它在控制每個用戶行為方面提供了極大的靈活性。例如,我們既可以限制用戶訪問整個數(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ù)庫中的五個表來實現(xiàn)的,這些表有user、db、host、tables_priv和columns_priv。這些表的用途各有不同,但是有一點是一致的,那就是都能夠檢驗用戶要做的事情是否為被允許的。每個表的字段都可分解為兩類,一類為作用域字段,一類為權(quán)限字段。作用域字段用來標(biāo)識主機、用戶或者數(shù)據(jù)庫;而權(quán)限字段則用來確定對于給定主機、用戶或者數(shù)據(jù)庫來說,哪些動作是允許的。下面,我們對這些表的作用做簡單介紹:
user表——該表決定是否允許用戶連接到服務(wù)器。如果允許連接,權(quán)限字段則為該用戶的全局權(quán)限。
db表——用于決定哪些用戶可以從哪些主機訪問哪些數(shù)據(jù)庫。包含在db表中的權(quán)限適用于這個表標(biāo)識的數(shù)據(jù)庫。
host表——當(dāng)您想在db表的范圍之內(nèi)擴展一個條目時,就會用到這個表。舉例來說,如果某個db允許通過多個主機訪問的話,那么超級用戶就可以讓db表內(nèi)將host列為空,然后用必要的主機名填充host表。
tables_priv表——該表與db表相似,不同之處是它用于表而不是數(shù)據(jù)庫。這個表還包含一個其他字段類型,包括timestamp和grantor兩個字段,用于存儲時間戳和授權(quán)方。在本文后面我們會對這個表做進一步的講解。
columns_priv——該表作用幾乎與db和tables_priv表一樣,不同之處是它提供的是針對某些表的特定列的權(quán)限。這個表也多出了一個字段類型,即其他字段,包括了一個timestamp列,用于存放時間戳。 在本文后面部分,我們還會對columns_priv表做進一步的說明。
下面,我們通過如下幾個方面對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)其實事情沒有我們想象的那么難以理解。
首先,對用戶的訪問進行控制的時候,系統(tǒng)需要查看作為過濾器的一些授權(quán)表,這些表的使用過程是從一般到特殊,這些表包括:
User表
Db表
Host表
Tables_priv 表
Columns_priv 表
此外,一旦連接到了服務(wù)器,一個用戶可以使用兩種類型的請求:
管理請求(shutdown,reload,等)
數(shù)據(jù)庫相關(guān)的請求(insert,delete,等)
當(dāng)用戶提交管理請求時,服務(wù)器只需查看user表,這是因為user表是唯一包含與管理工作有關(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)限則是特定于主機或者數(shù)據(jù)庫的。因此,讓這個表內(nèi)所有的權(quán)限保持為“N”不失為一個明智的選擇。
讓我們假定我們的user和db表如下所示:
通過上文的學(xué)習(xí),相信大家現(xiàn)在對MySQL授權(quán)表以及MySQL服務(wù)器的訪問控制的疑惑已經(jīng)解開,這里我只是做了一個初步的介紹,不是很詳細(xì),以后會在文章中繼續(xù)為大家介紹,希望對大家有所幫助。
【編輯推薦】
- 降低鎖競爭 減少MySQL用戶等待時間
- LAMP服務(wù)器性能優(yōu)化技巧之Mysql優(yōu)化
- 系統(tǒng)性能的調(diào)優(yōu):MySQL的調(diào)優(yōu)