国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

MySQL用戶管理(2)

2024-07-24 12:56:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
注冊(cè)會(huì)員,創(chuàng)建你的web開(kāi)發(fā)資料庫(kù),下面就討論一些例子。

1.1 誰(shuí)能連接,從那兒連接?

你可以允許一個(gè)用戶從特定的或一系列主機(jī)連接。有一個(gè)極端,如果你知道降職從一個(gè)主機(jī)連接,你可以將權(quán)限局限于單個(gè)主機(jī)

:grant all on samp_db.* to [email protected] identified by "ruby"grant all on samp_db.* to [email protected] identified by "quartz"

(samp_db.*意思是“samp_db數(shù)據(jù)庫(kù)的所有表)

另一個(gè)極端是,你可能有一個(gè)經(jīng)常旅行并需要能從世界各地的主機(jī)連接的用戶max。在這種情況下,你可以允許他無(wú)論從哪里連接:

grant all on samp_db.* to [email protected]% identified by "diamond"

“%”字符起通配符作用,與like模式匹配的含義相同。在上述語(yǔ)句中,它意味著“任何主機(jī)”。所以max和[email protected]%等價(jià)。這是建立用戶最簡(jiǎn)單的方法,但也是最不安全的。

取其中,你可以允許一個(gè)用戶從一個(gè)受限的主機(jī)集合訪問(wèn)。例如,要允許mary從snake.net域的任何主機(jī)連接,用一個(gè)%.snake.net主機(jī)指定符:

grant all on samp_db.* to [email protected] identified by "quartz";

如果你喜歡,用戶標(biāo)識(shí)符的主機(jī)部分可以用ip地址而不是一個(gè)主機(jī)名來(lái)給定。你可以指定一個(gè)ip地址或一個(gè)包含模式字符的地址,而且,從mysql 3.23,你還可以指定具有指出用于網(wǎng)絡(luò)號(hào)的位數(shù)的網(wǎng)絡(luò)掩碼的ip號(hào):

grant all on samp_db.* to [email protected] identified by "ruby" grant all on samp_db.* to [email protected]% identified by "quartz" grant all on samp_db.* to [email protected]/17 identified by "ruby"

第一個(gè)例子指出用戶能從其連接的特定主機(jī),第二個(gè)指定對(duì)于c類子網(wǎng)192.168.128的ip模式,而第三條語(yǔ)句中,192.168.128.0/17指定一個(gè)17位網(wǎng)絡(luò)號(hào)并匹配具有192.168.128頭17位的ip地址。 

如果mysql抱怨你指定的用戶值,你可能需要使用引號(hào)(只將用戶名和主機(jī)名部分分開(kāi)加引號(hào))。

grant all on samp_db.president to "my friend"@"boa.snake.net"
1.2 用戶應(yīng)該有什么級(jí)別的權(quán)限和它們應(yīng)該適用于什么?

你可以授權(quán)不同級(jí)別的權(quán)限,全局權(quán)限是最強(qiáng)大的,因?yàn)樗鼈冞m用于任何數(shù)據(jù)庫(kù)。要使ethel成為可做任何事情的超級(jí)用戶,包括能授權(quán)給其它用戶,發(fā)出下列語(yǔ)句:

grant all on *.* to [email protected] identified by "coffee" with grant option

on子句中的*.*意味著“所有數(shù)據(jù)庫(kù)、所有表”。從安全考慮,我們指定ethel只能從本地連接。限制一個(gè)超級(jí)用戶可以連接的主機(jī)通常是明智的,因?yàn)樗拗屏嗽噲D破解口令的主機(jī)。

有些權(quán)限(file、process、reload和shutdown)是管理權(quán)限并且只能用"on *.*"全局權(quán)限指定符授權(quán)。如果你愿意,你可以授權(quán)這些權(quán)限,而不授權(quán)數(shù)據(jù)庫(kù)權(quán)限。例如,下列語(yǔ)句設(shè)置一個(gè)flush用戶,他只能發(fā)出flush語(yǔ)句。這可能在你需要執(zhí)行諸如清空日志等的管理腳本中會(huì)有用:

grant reload on *.* to [email protected] identified by "flushpass"

一般地,你想授權(quán)管理權(quán)限,吝嗇點(diǎn),因?yàn)閾碛兴鼈兊挠脩艨梢杂绊懩愕姆?wù)器的操作。
數(shù)據(jù)庫(kù)級(jí)權(quán)限適用于一個(gè)特定數(shù)據(jù)庫(kù)中的所有表,它們可通過(guò)使用on db_name.*子句授予:

grant all on samp_db to [email protected] indetified by "rock" grant select on samp_db to [email protected]% indetified by "rock"

第一條語(yǔ)句向bill授權(quán)samp_db數(shù)據(jù)庫(kù)中所有表的權(quán)限,第二條創(chuàng)建一個(gè)嚴(yán)格限制訪問(wèn)的用戶ro_user(只讀用戶),只能訪問(wèn)samp_db數(shù)據(jù)庫(kù)中的所有表,但只有讀取,即用戶只能發(fā)出select語(yǔ)句。

你可以列出一系列同時(shí)授予的各個(gè)權(quán)限。例如,如果你想讓用戶能讀取并能修改現(xiàn)有數(shù)據(jù)庫(kù)的內(nèi)容,但不能創(chuàng)建新表或刪除表,如下授予這些權(quán)限:

grant select,insert,delete,update on samp_db to [email protected] indetified by "rock"

對(duì)于更精致的訪問(wèn)控制,你可以在各個(gè)表上授權(quán),或甚至在表的每個(gè)列上。當(dāng)你想向用戶隱藏一個(gè)表的部分時(shí),或你想讓一個(gè)用戶只能修改特定的列時(shí),列特定權(quán)限非常有用。如:

grant select on samp_db.member to [email protected] indetified by "rock"grant update (expiration) on samp_db. member to [email protected]

第一條語(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)分開(kāi)的列表。例如,對(duì)assistant用戶增加member表的地址字段的update權(quán)限,使用如下語(yǔ)句,新權(quán)限將加到用戶已有的權(quán)限中:

grant update (street,city,state,zip) on samp_db to [email protected]

通常,你不想授予任何比用戶確實(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è)分開(kāi)的數(shù)據(jù)庫(kù)(如tmp)并授予開(kāi)數(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è)匿名用戶,任何用戶均匹配空白用戶名)。
1.3 用戶應(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 [email protected]%.big.corp.com indetified by "applejuice" with grant option

在效果上with grant option子句允許你把訪問(wèn)授權(quán)的權(quán)利授予另一個(gè)用戶。要注意,擁有g(shù)rant權(quán)限的兩個(gè)用戶可以彼此授權(quán)。如果你只給予了第一個(gè)用戶select權(quán)限,而另一個(gè)用戶有g(shù)rant加上select權(quán)限,那么第二個(gè)用戶可以是第一個(gè)用戶更“強(qiáng)大”。

2 撤權(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í)不是。)


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石首市| 前郭尔| 宾阳县| 宜君县| 乌什县| 武山县| 凭祥市| 东乌珠穆沁旗| 合作市| 满城县| 舞钢市| 永德县| 汾西县| 章丘市| 镶黄旗| 依兰县| 喀喇沁旗| 且末县| 明光市| 承德市| 白玉县| 郴州市| 明水县| 新田县| 泸定县| 白银市| 博白县| 思茅市| 香格里拉县| 西峡县| 广西| 虎林市| 资溪县| 葫芦岛市| 郯城县| 宁国市| 独山县| 虹口区| 闽清县| 荥阳市| 台北县|