本文通過問答的開式來解答在mysql在命名用過程中所遇到的常見問題。
誰能連接,從那兒連接?
你可以允許一個用戶從特定的或一系列主機(jī)連接。有一個極端,如果你知道降職從一個主機(jī)連接,你可以將權(quán)限局限于單個主機(jī):
GRANT ALL ON samp_db.* TO boris@localhost
IDENTIFIED BY "ruby"GRANT ALL ON samp_db.*
TO fred@res.mars.com IDENTIFIED BY "quartz"
(samp_db.*意思是“samp_db數(shù)據(jù)庫的所有表)另一個極端是,你可能有一個經(jīng)常旅行并需要能從世界各地的主機(jī)連接的用戶max。在這種情況下,你可以允許他無論從哪里連接:
GRANT ALL ON samp_db.* TO max@% IDENTIFIED BY "diamond"
“%”字符起通配符作用,與LIKE模式匹配的含義相同。在上述語句中,它意味著“任何主機(jī)”。所以max和max@%等價。這是建立用戶最簡單的方法,但也是最不安全的。
取其中,你可以允許一個用戶從一個受限的主機(jī)集合訪問。例如,要允許mary從snake.net域的任何主機(jī)連接,用一個%.snake.net主機(jī)指定符:
GRANT ALL ON samp_db.* TO mary@.snake.net IDENTIFIED BY "quartz";
如果你喜歡,用戶標(biāo)識符的主機(jī)部分可以用IP地址而不是一個主機(jī)名來給定。你可以指定一個IP地址或一個包含模式字符的地址,而且,從MySQL 3.23,你還可以指定具有指出用于網(wǎng)絡(luò)號的位數(shù)的網(wǎng)絡(luò)掩碼的IP號:
GRANT ALL ON samp_db.* TO boris@192.168.128.3 IDENTIFIED BY "ruby" GRANT ALL ON samp_db.* TO fred@192.168.128.% IDENTIFIED BY "quartz" GRANT ALL ON samp_db.* TO rex@192.168.128.0/17 IDENTIFIED BY "ruby"
第一個例子指出用戶能從其連接的特定主機(jī),第二個指定對于C類子網(wǎng)192.168.128的IP模式,而第三條語句中,192.168.128.0/17指定一個17位網(wǎng)絡(luò)號并匹配具有192.168.128頭17位的IP地址!
如果MySQL抱怨你指定的用戶值,你可能需要使用引號(只將用戶名和主機(jī)名部分分開加引號)。
GRANT ALL ON samp_db.president TO "my friend"@"boa.snake.net"
用戶應(yīng)該有什么級別的權(quán)限和它們應(yīng)該適用于什么?
你可以授權(quán)不同級別的權(quán)限,全局權(quán)限是最強(qiáng)大的,因?yàn)樗鼈冞m用于任何數(shù)據(jù)庫。要使ethel成為可做任何事情的超級用戶,包括能授權(quán)給其它用戶,發(fā)出下列語句:
GRANT ALL ON *.* TO ethel@localhost
IDENTIFIED BY "coffee" WITH GRANT OPTION
ON子句中的*.*意味著“所有數(shù)據(jù)庫、所有表”。從安全考慮,我們指定ethel只能從本地連接。限制一個超級用戶可以連接的主機(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ù)庫權(quán)限。例如,下列語句設(shè)置一個flush用戶,他只能發(fā)出flush語句。這可能在你需要執(zhí)行諸如清空日志等的管理腳本中會有用:
GRANT RELOAD ON *.* TO flushl@localhost IDENTIFIED BY "flushpass"。
一般地,你想授權(quán)管理權(quán)限,吝嗇點(diǎn),因?yàn)閾碛兴鼈兊挠脩艨梢杂绊懩愕姆⻊?wù)器的操作。
數(shù)據(jù)庫級權(quán)限適用于一個特定數(shù)據(jù)庫中的所有表,它們可通過使用ON db_name.*子句授予:
GRANT ALL ON samp_db TO bill@racer.snake.net
INDETIFIED BY "rock" GRANT SELECT ON samp_db
TO ro_user@% INDETIFIED BY "rock"
第一條語句向bill授權(quán)samp_db數(shù)據(jù)庫中所有表的權(quán)限,第二條創(chuàng)建一個嚴(yán)格限制訪問的用戶ro_user(只讀用戶),只能訪問samp_db數(shù)據(jù)庫中的所有表,但只有讀取,即用戶只能發(fā)出SELECT語句。
你可以列出一系列同時授予的各個權(quán)限。例如,如果你想讓用戶能讀取并能修改現(xiàn)有數(shù)據(jù)庫的內(nèi)容,但不能創(chuàng)建新表或刪除表,如下授予這些權(quán)限:
GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db TO bill@snake.net INDETIFIED BY "rock"。