mysql数据库帐户_MySQL数据库用户帐号管理基础知识详解
MySQL管理員應(yīng)該知道怎樣通過指定哪些用戶可連接到服務(wù)器、從哪里進(jìn)行連接,以及在連接 時(shí)做什么,來設(shè)置MySQL用戶賬號(hào)。MySQL3.22.11引入了兩個(gè)更容易進(jìn)行這項(xiàng)工作的語句:GRANT 語句創(chuàng)建MySQL用戶并指定其權(quán)限,REVOKE 語句刪除權(quán)限。這兩個(gè)語句充當(dāng)mysql數(shù)據(jù)庫中的授權(quán)表的前端,并提供直接操縱這些表內(nèi)容的可選擇的方法。GRANT 和REVOKE 語句影響以下四個(gè)表:
授權(quán)表 內(nèi)容
user 可連接到服務(wù)器的用戶和他們擁有的任何全局特權(quán)
db 數(shù)據(jù)庫級(jí)的特權(quán)
tables_priv 表級(jí)特權(quán)
columns_priv 列級(jí)特權(quán)
還有第五個(gè)授權(quán)表( host),但它不受GRANT 或REVOKE的影響。
當(dāng)您為某個(gè)用戶發(fā)布GRANT 語句時(shí),應(yīng)在user表中為該用戶創(chuàng)建一個(gè)項(xiàng)。如果該語句指定了所有全局特權(quán)(管理權(quán)限或用于所有數(shù)據(jù)庫的權(quán)限),則這些指定也被記錄在user表中。如 果指定了數(shù)據(jù)庫、表或列的權(quán)限,它們將記錄在db、tables_priv 和columns_priv表中。
使用GRANT 和REVOKE語句比直接修改授權(quán)表更容易。但是,建議您最好通過閱讀第12章來補(bǔ)充本章的內(nèi)容,第12章中詳細(xì)討論了授權(quán)表。這些表非常重要,作為一位管理員應(yīng)該了解這些表是怎樣在GRANT 和REVOKE 語句級(jí)上工作的。
本節(jié)下面的部分將討論如何設(shè)置MySQL用戶的賬號(hào)和授權(quán),還將介紹如何取消權(quán)限以及從授權(quán)表中刪除全部用戶,并且將考慮一個(gè)困擾許多新的MySQL管理員的難題。
您還要考慮使用mysqlaccess 和mysql_setpermission 腳本,它們是MySQL分發(fā)包的組成部分。這些是Perl 的腳本,它們提供了設(shè)置用戶賬號(hào)的GRANT 語句的代用品。mysql_setpermission 需要具有DBI 的支持環(huán)境。
創(chuàng)建新用戶和授權(quán)
GRANT 語句的語法如下:
GRANT privileges (columns)
ON what
TO user IDENTIFIEDBY "password"
WITH GRANT OPTION
要使用該語句,需要填寫以下部分:
privileges 分配給用戶的權(quán)限。下表列出了可在GRANT 語句中使用的權(quán)限說明符:
權(quán)限說明符權(quán)限允許的操作
上表顯示的第一組權(quán)限說明符適用于數(shù)據(jù)庫、表和列。第二組說明符是管理特權(quán)。通常, 這些權(quán)限的授予相當(dāng)保守,因?yàn)樗鼈儠?huì)影響服務(wù)器的操作(例如, SHUTDOWN 特權(quán)不是按每天來分發(fā)的權(quán)限)。第三組說明符是特殊的。ALL的意思是“所有的權(quán)限”,而USAGE 的意思是“無權(quán)限”─即創(chuàng)建用戶,但不授予任何的權(quán)限。
columns 權(quán)限適用的列。這是可選的,只來設(shè)置列專有的權(quán)限。如果命名多于一個(gè)列,則用逗號(hào)分開。
what 權(quán)限應(yīng)用的級(jí)別。權(quán)限可以是全局的(適用于所有數(shù)據(jù)庫和所有的表)、數(shù)據(jù)庫專有的(適用于某個(gè)數(shù)據(jù)庫中的所有表),或表專有的。可以通過指定一個(gè)C O L U M N S子句將權(quán)限授予特定的列。
user 使用權(quán)限的用戶。它由用戶名和主機(jī)名組成。在MySQL中,不僅指定誰進(jìn)行連接,還要指定從哪里連接。它允許您擁有兩個(gè)帶有相同名字的、從不同位置連接的用戶。MySQL允許在它們之間進(jìn)行區(qū)別并相互獨(dú)立地分配權(quán)限。
MySQL的用戶名就是您在連接到服務(wù)器時(shí)指定的名字。該名字與您的UNIX 注冊(cè)名或Windows 名的沒有必然連系。缺省設(shè)置時(shí),客戶機(jī)程序?qū)⑹褂媚?cè)的名字作為MySQL的用戶名(如果您不明確指定一個(gè)名字的話),但這只是一個(gè)約定。有關(guān)將 root作為可以操作一切MySQL的超級(jí)用戶名也是這樣,就是一種約定。您也可以在授權(quán)表中將此名修改成nobody,然后作為nobody 用戶進(jìn)行連接,以執(zhí)行需要超級(jí)用戶特權(quán)的操作。
password 分配給該用戶的口令。這是可選的。如果您不給新用戶指定IDENTIFIEDBY子句,該用戶不分配口令(是非安全的)。對(duì)于已有的用戶,任何指定的口令 將替代舊口令。如果不指定新口令,用戶的舊口令仍然保持不變。當(dāng)您確實(shí)要使用IDENTIFIEDBY 時(shí),該口令串應(yīng)該是直接量,GRANT 將對(duì)口令進(jìn)行編碼。當(dāng)用SET PASSWORD語句時(shí),不要使用PASSWORD() 函數(shù)。
WITH GRANT OPTION 子句是可選的。如果包含該子句,該用戶可以將GRANT 語句授予的任何權(quán)限授予其他的用戶。可以使用該子句將授權(quán)的能力授予其他的用戶。
用戶名、口令以及數(shù)據(jù)庫和表的名稱在授權(quán)表項(xiàng)中是區(qū)分大小寫的,而主機(jī)名和列名則不是。
通過查詢某些問題,通常可以推斷出所需的GRANT 語句的類型:
誰可以進(jìn)行連接,從哪里連接?
用戶應(yīng)具有什么級(jí)別的權(quán)限,這些權(quán)限適用于什么?
允許用戶管理權(quán)限嗎?
讓我們來提問這些問題,同時(shí)看一些利用GRANT 語句設(shè)置MySQL用戶賬號(hào)的例子。
1. 誰可以進(jìn)行連接,從哪里連接。
您可以允許用戶在特定的主機(jī)或涉及范圍很寬的一組主機(jī)中進(jìn)行連接。在一個(gè)極端,如果知道用戶將僅從那個(gè)主機(jī)中進(jìn)行連接,則可限定對(duì)單個(gè)主機(jī)的訪問:
GRANT ALL ON samp_db.* TO boris@localhost IDENTFIEDBY "ruby"
GRANT ALL ON samp_db.* TO fred@ares.mars.net IDENTFIEDBY "quartz"
(符號(hào)samp_db.* 含義是“在samp_db 數(shù)據(jù)庫中的所有表”)在另一個(gè)極端,您可能會(huì)有一個(gè)用戶max,他周游世界并需要能夠從世界各地的主機(jī)中進(jìn)行連接。在這種情況下,無論他從哪里連接您都將允許:
GRANT ALL ON samp_db.* TO max@% IDENTFIEDBY "diamond"
‘%’字符起通配符的作用,與LIKE模式匹配的含義相同,在上個(gè)語句中,它的意思是“任何主機(jī)”。如果您根本不給出主機(jī)名部分,則它與指定“ %”的含義相同。因此,max和max@%是等價(jià)的。這是設(shè)置一個(gè)用戶最容易的方法,但安全性最小。
要想采取妥協(xié)的辦法,可允許用戶在一組有限的主機(jī)中進(jìn)行連接。例如,要使mary 從snake.net 域的任何主機(jī)中進(jìn)行連接,可使用%.snake.net 主機(jī)說明符:
GRANT ALL ON samp_db.* TO mary@%.snake.net IDENTFIEDBY "topaz"
該用戶標(biāo)識(shí)符的主機(jī)部分可用IP 地址而不是主機(jī)名給出(如果愿意的話)。可以指定一個(gè)直接的IP 地址或包含模式字符的地址。同樣,自MySQL3.23 起,可以用一個(gè)網(wǎng)絡(luò)掩碼來指定IP 號(hào),網(wǎng)絡(luò)掩碼表明了用于該網(wǎng)絡(luò)號(hào)的二進(jìn)制位數(shù):
GRANT ALL ON samp_db.* TO joe@192.168.0.3 IDENTIFIEDBY "water"
GRANT ALL ON samp_db.* TO ardis@192.168.128.% IDENTIFIEDBY "snow"
GRANT ALL ON samp_db.* TO rex@192.168.128.0/17 IDENTIFIEDBY "ice"
第一條語句指明用戶可進(jìn)行連接的特定的主機(jī)。第二條語句指定129.168.128 Class C 子網(wǎng)的IP 模式。在第三條語句中, 192.168.128.0/17 指定一個(gè)17 位二進(jìn)制的網(wǎng)絡(luò)號(hào),并將任何主機(jī)與其IP 地址的前17 個(gè)二進(jìn)制位中的192.168.128.0/17 進(jìn)行匹配。
如果MySQL抱怨您指定的用戶值,則可能需要使用引號(hào)(但對(duì)用戶名和主機(jī)名分別加引號(hào)):
GRANT ALL ON samp_db.president TO "my friend"@"boa.snake.net"
2. 用戶應(yīng)具有什么級(jí)別的權(quán)限,這些權(quán)限適用于什么。
您可授予不同級(jí)別的權(quán)限。全局權(quán)限的功能最強(qiáng),因?yàn)樗鼈冞m用于任何數(shù)據(jù)庫。為了使ethel 成為可以進(jìn)行一切操作的超級(jí)用戶(其中包括可以對(duì)其他用戶授權(quán)),發(fā)布下列語句:
GRANT ALL ON *.* TO ethel@localhost IDENTIFIEDBY "coffee"
WITH GRANT OPTION
ON 子句中*.* 說明符的意思是“所有數(shù)據(jù)庫,所有的表”,為保險(xiǎn)起見,我們已經(jīng)指定ethel 只能從本地主機(jī)中連接。限制超級(jí)用戶從哪些主機(jī)上進(jìn)行連接通常是明智的做法,因?yàn)樗拗谱×似渌脩魧?duì)口令進(jìn)行試探。
有些權(quán)限(FILE、PROCESS、RELOAD 和SHUTDOWN)是管理權(quán)限,只能用NO *.* 全局權(quán)限說明符來授予。如果希望的話,也可以不用授予數(shù)據(jù)庫級(jí)的權(quán)限來授予這些權(quán)限。例如,下列語句建立了一個(gè)flush 用戶,它除了發(fā)布FLUSH語句外不做其他任何事情。在管理腳本中這可能是有用的,因?yàn)樾枰谶@些腳本中執(zhí)行諸如在日志文件循環(huán)期間刷新日志的操作:
GRANT RELOAD ON *.* TO flush@localhost IDENTIFIEDBY "flushpass"
通常授予管理權(quán)限應(yīng)該是保守的,因?yàn)榫哂羞@些權(quán)限的用戶可能影響服務(wù)器的操作。
總結(jié)
以上是生活随笔為你收集整理的mysql数据库帐户_MySQL数据库用户帐号管理基础知识详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql5.6 函数索引_聊聊MySQ
- 下一篇: ubuntu python3.8安装pi