軟件測試開發技術MySQL在命名用過程中所遇到的常見問題 MySQL數據庫
關鍵字:MySQL 命令 常見問題
【賽迪網-IT技術報道】本文通過問答的開式來解答在mysql在命名用過程中所遇到的常見問題。
誰能連接,從那兒連接?
你可以允許一個用戶從特定的或一系列主機連接。有一個極端,如果你知道降職從一個主機連接,你可以將權限局限于單個主機:
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數據庫的所有表)另一個極端是,你可能有一個經常旅行并需要能從世界各地的主機連接的用戶max。在這種情況下,你可以允許他無論從哪里連接:
GRANT ALL ON samp_db.* TO max@% IDENTIFIED BY "diamond"
“%”字符起通配符作用,與LIKE模式匹配的含義相同。在上述語句中,它意味著“任何主機”。所以max和max@%等價。這是建立用戶最簡單的方法,但也是最不安全的。
取其中,你可以允許一個用戶從一個受限的主機集合訪問。例如,要允許mary從snake.net域的任何主機連接,用一個%.snake.net主機指定符:
GRANT ALL ON samp_db.* TO mary@.snake.net IDENTIFIED BY "quartz";
如果你喜歡,用戶標識符的主機部分可以用IP地址而不是一個主機名來給定。你可以指定一個IP地址或一個包含模式字符的地址,而且,從MySQL 3.23,你還可以指定具有指出用于網絡號的位數的網絡掩碼的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"
第一個例子指出用戶能從其連接的特定主機,第二個指定對于C類子網192.168.128的IP模式,而第三條語句中,192.168.128.0/17指定一個17位網絡號并匹配具有192.168.128頭17位的IP地址?!?
如果MySQL抱怨你指定的用戶值,你可能需要使用引號(只將用戶名和主機名部分分開加引號)。
GRANT ALL ON samp_db.president TO "my friend"@"boa.snake.net"
用戶應該有什么級別的權限和它們應該適用于什么?
你可以授權不同級別的權限,全局權限是最強大的,因為它們適用于任何數據庫。要使ethel成為可做任何事情的超級用戶,包括能授權給其它用戶,發出下列語句:
GRANT ALL ON *.* TO ethel@localhost
IDENTIFIED BY "coffee" WITH GRANT OPTION
ON子句中的*.*意味著“所有數據庫、所有表”。從安全考慮,我們指定ethel只能從本地連接。限制一個超級用戶可以連接的主機通常是明智的,因為它限制了試圖破解口令的主機。
有些權限(FILE、PROCESS、RELOAD和SHUTDOWN)是管理權限并且只能用"ON *.*"全局權限指定符授權。如果你愿意,你可以授權這些權限,而不授權數據庫權限。例如,下列語句設置一個flush用戶,他只能發出flush語句。這可能在你需要執行諸如清空日志等的管理腳本中會有用:
GRANT RELOAD ON *.* TO flushl@localhost IDENTIFIED BY "flushpass"。
一般地,你想授權管理權限,吝嗇點,因為擁有它們的用戶可以影響你的服務器的操作。
數據庫級權限適用于一個特定數據庫中的所有表,它們可通過使用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"
原文轉自:http://www.anti-gravitydesign.com