Tables_priv表與columns_priv表
授權(quán)表之前已經(jīng)為大家介紹過了,想了解點擊進(jìn)入MySQL授權(quán)表概述和MySQL服務(wù)器的訪問控制,本文將為大家介紹兩個授權(quán)表,即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)一步控制用戶針對每個表和每個字段的動作。所以,這給超級用戶提供了更加靈活的控制選項。
在深入學(xué)習(xí)對數(shù)據(jù)表的訪問控制之前,首先讓我們了解一下下列特性:
通配符可以用于這兩個表的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。
授權(quán)表tables_priv
下列是一個tables_priv表的示意圖:
下面簡要介紹各字段的含義:
Host——適用于那些主機?
Db——適用于從上面的主機所連接的哪些數(shù)據(jù)庫?
User——適用于來自上述主機的哪些用戶?
Table_name——適用于上述數(shù)據(jù)庫中的哪些表?
Table_priv——為這個表賦予哪些權(quán)限?
Column_priv——為這個表中的個字段賦予哪些權(quán)限?
Timestamp——這個權(quán)限是何時賦予的?
Grantor——誰授與該用戶的這個權(quán)限?
#p#
要想真正弄懂tables_priv表,最好的辦法就是通過實例進(jìn)行學(xué)習(xí),下面我們就給出一些例子。
例1:
%>GRANT SELECT ON italy TO wj@314interactive.com;
這條命令的作用是什么?以上命令允許來自主機314interactive.com的用戶wj在表italy上至下一個SELECT語句。請記住,只有當(dāng)給定數(shù)據(jù)庫/主機和用戶名對應(yīng)的db或者h(yuǎn)ost表中的SELECT字段的值為N時,才需要訪問這個表。如果給定數(shù)據(jù)庫/主機和用戶名對應(yīng)的db或者h(yuǎn)ost表中的SELECT字段中有一個值為Y的話,那么就無需控制該tables_priv表。
例2:
%>GRANT SELECT, INSERT ON oats.italy TO wj@314interactive.com;
這條命令的作用是什么?以上命令允許來自主機314interactive.com的用戶wj對數(shù)據(jù)庫oats中的數(shù)據(jù)表italy執(zhí)行SELECT和INSERT語句。
例3:
%>REVOKE SELECT on oats.italy from wj@314interactive.com
這條命令的作用是什么?以上命令撤消來自主機314interactive.com的用戶wj對數(shù)據(jù)庫oats中的表italy的執(zhí)行SELECT的權(quán)限。
重要的是要認(rèn)識到,包含在tables_priv中的信息僅當(dāng)host/db表不允許用戶執(zhí)行要求的功能所需的權(quán)限時才生效。如果給定的權(quán)限在host/db表中為Y,那么就無需考察tables_priv表。
例4:
%>GRANT SELECT(id,name,address,phone),update(address,phone) ON
company.customers TO gilmore@314interactive.com;
這條命令的作用是什么?以上命令將授予對company數(shù)據(jù)庫中customers表內(nèi)id、name、address和phone字段執(zhí)行SELECT的權(quán)限,以及對address和phone字段執(zhí)行UPDATE的權(quán)限。
這將帶來哪些影響?這條命令會修改tables_priv表和columns_priv表,這是因為它引用這兩個表和表內(nèi)特定的字段。
例5:
%>REVOKE UPDATE(address,phone) ON company.customers FROM gilmore@314interactive.com;
這條命令的作用是什么?這個命令將撤消對company數(shù)據(jù)庫中customers表內(nèi)的address和phone字段執(zhí)行UPDATE操作的權(quán)限。
這將帶來哪些影響?因為該命令直接涉及給定表中的某些字段,所以columns_priv表以及tables_priv表也會更新。
前面說過,只有在必須的情況下才會使用授權(quán)表,舉例來說,如果高優(yōu)先級的表提供了適當(dāng)?shù)臋?quán)限的話,那么就無需查閱優(yōu)先級較低的授權(quán)表了。如果高優(yōu)先級的表中對應(yīng)命令的值為N,那么就需要進(jìn)一步查看低優(yōu)先級的授權(quán)表。
小結(jié):本文先是具體的介紹了Tables_priv表與columns_priv表著兩個授權(quán)表,讓大家對他們有個大概的了解,然后又用舉例子的方法,通過五個例子來講解,更容易理解及接受,希望對大家有所幫助。
【編輯推薦】