對(duì)于更精致的訪問(wèn)控制,你可以在各個(gè)表上授權(quán),或甚至在表的每個(gè)列上。當(dāng)你想向用戶隱藏一個(gè)表的部分時(shí),或你想讓一個(gè)用戶只能修改特定的列時(shí),列特定權(quán)限非常有用。如:
GRANT SELECT ON samp_db.member TO bill@localhost
INDETIFIED BY "rock"GRANT UPDATE (eXPiration) ON
第一條語(yǔ)句授予對(duì)整個(gè)member表的讀權(quán)限并設(shè)置了一個(gè)口令,第二條語(yǔ)句增加了UPDATE權(quán)限,當(dāng)只對(duì)expiration列。沒(méi)必要再指定口令,因?yàn)榈谝粭l語(yǔ)句已經(jīng)指定了。
如果你想對(duì)多個(gè)列授予權(quán)限,指定一個(gè)用逗號(hào)分開的列表。例如,對(duì)assistant用戶增加member表的地址字段的UPDATE權(quán)限,使用如下語(yǔ)句,新權(quán)限將加到用戶已有的權(quán)限中:
GRANT UPDATE (street,city,state,zip) ON samp_db TO assistant@localhost。
通常,你不想授予任何比用戶確實(shí)需要的權(quán)限寬的權(quán)限。然而,當(dāng)你想讓用戶能創(chuàng)建一個(gè)臨時(shí)表以保存中間結(jié)果,但你又不想讓他們?cè)谝粋(gè)包含他們不應(yīng)修改內(nèi)容的數(shù)據(jù)庫(kù)中這樣做時(shí),發(fā)生了要授予在一個(gè)數(shù)據(jù)庫(kù)上的相對(duì)寬松的權(quán)限。你可以通過(guò)建立一個(gè)分開的數(shù)據(jù)庫(kù)(如tmp)并授予開數(shù)據(jù)庫(kù)上的所有權(quán)限來(lái)進(jìn)行。例如,如果你想讓來(lái)自mars.net域中主機(jī)的任何用戶使用tmp數(shù)據(jù)庫(kù),你可以發(fā)出這樣的GRANT語(yǔ)句:GRANT ALL ON tmp.* TO ""@mars.net。
在你做完之后,用戶可以創(chuàng)建并用tmp.tbl_name形式引用tmp中的表(在用戶指定符中的""創(chuàng)建一個(gè)匿名用戶,任何用戶均匹配空白用戶名)。
用戶應(yīng)該被允許管理權(quán)限嗎?
第一步:
你可以允許一個(gè)數(shù)據(jù)庫(kù)的擁有者通過(guò)授予數(shù)據(jù)庫(kù)上的所有擁有者權(quán)限來(lái)控制數(shù)據(jù)庫(kù)的訪問(wèn),在授權(quán)時(shí),指定WITH GRANT OPTION。例如:如果你想讓alicia能從big.corp.com域的任何主機(jī)連接并具有sales數(shù)據(jù)庫(kù)中所有表的管理員權(quán)限,你可以用如下GRANT語(yǔ)句:
GRANT ALL ON sales.* TO alicia@%.big.corp.com
INDETIFIED BY "applejuice" WITH GRANT OPTION
在效果上WITH GRANT OPTION子句允許你把訪問(wèn)授權(quán)的權(quán)利授予另一個(gè)用戶。要注意,擁有GRANT權(quán)限的兩個(gè)用戶可以彼此授權(quán)。如果你只給予了第一個(gè)用戶SELECT權(quán)限,而另一個(gè)用戶有GRANT加上SELECT權(quán)限,那么第二個(gè)用戶可以是第一個(gè)用戶更“強(qiáng)大”。
第二步:
撤權(quán)并刪除用戶,要取消一個(gè)用戶的權(quán)限,使用REVOKE語(yǔ)句。REVOKE的語(yǔ)法非常類似于GRANT語(yǔ)句,除了TO用FROM取代并且沒(méi)有INDETIFED BY和WITH GRANT OPTION子句:
REVOKE privileges (columns) ON what FROM user
user部分必須匹配原來(lái)GRANT語(yǔ)句的你想撤權(quán)的用戶的user部分。privileges部分不需匹配,你可以用GRANT語(yǔ)句授權(quán),然后用REVOKE語(yǔ)句只撤銷部分權(quán)限。
REVOKE語(yǔ)句只刪除權(quán)限,而不刪除用戶。即使你撤銷了所有權(quán)限,在user表中的用戶記錄依然保留,這意味著用戶仍然可以連接服務(wù)器。要完全刪除一個(gè)用戶,你必須用一條DELETE語(yǔ)句明確從user表中刪除用戶記錄:
%mysql -u root mysqlmysql>DELETE FROM user
->WHERE User="user_name" and Host="host_name";
mysql>FLUSH PRIVILEGES;
DELETE語(yǔ)句刪除用戶記錄,而FLUSH語(yǔ)句告訴服務(wù)器重載授權(quán)表。(當(dāng)你使用GRANT和REVOKE語(yǔ)句時(shí),表自動(dòng)重載,而你直接修改授權(quán)表時(shí)不是。)
本新聞共
2頁(yè),當(dāng)前在第
2頁(yè)
1 2