《Mysql必讀MySQL用戶設(shè)置與授權(quán)實(shí)例詳解》要點(diǎn):
本文介紹了Mysql必讀MySQL用戶設(shè)置與授權(quán)實(shí)例詳解,希望對您有用。如果有疑問,可以聯(lián)系我們。
介紹下mysql數(shù)據(jù)庫中如何建立用戶,如何為用戶分配權(quán)限.
GRANT語句雖然能夠?yàn)橛脩舴峙錂?quán)限,使用比較方便,但是從平安角度,從增加對系統(tǒng)了解角度,應(yīng)該盡量使用直接修改授權(quán)表的方法.MYSQL應(yīng)用
這樣可以更精確的控制授權(quán),能夠?qū)κ跈?quán)表完全了解,避免因?yàn)?GRANT語句的錯(cuò)誤,是MySQL服務(wù)器的平安性降低.MYSQL應(yīng)用
有2個(gè)不同的辦法增加用戶:通過使用GRANT語句或通過直接操作MySQL授權(quán)表.比較好的辦法是使用GRANT語句,因?yàn)樗麄兪歉喢鞑⑶液孟皴e(cuò)誤少些.MYSQL應(yīng)用
使用SHOW GRANTS語句顯示用戶的授權(quán)MYSQL應(yīng)用
可以直接查看授權(quán)表,也可以使用SHOW GRANTS語句查看某個(gè)用戶的授權(quán),這種情況下使用SHOW GRANTS語句顯然要方便一些.MYSQL應(yīng)用
語法:SHOW GRANTS FOR user_nameMYSQL應(yīng)用
為了容納對任意主機(jī)的用戶授予的權(quán)利,MySQL支持以格式指定user_name值.MYSQL應(yīng)用
例如,顯示一個(gè)用戶admin的權(quán)限:
?MYSQL應(yīng)用
其結(jié)果為創(chuàng)建該用戶的GRNAT授權(quán)語句:
?MYSQL應(yīng)用
暗碼是加密后的形式.MYSQL應(yīng)用
使用GRANT語句創(chuàng)建用戶并授權(quán)MYSQL應(yīng)用
GRANT語句的語法
?MYSQL應(yīng)用
要使用該語句,需要填寫以下部分:
priv_type 分配給用戶的權(quán)限.
priv_type可以指定下列的任何一個(gè):
?MYSQL應(yīng)用
ALL是ALL PRIVILEGES的一個(gè)同義詞,REFERENCES還沒被實(shí)現(xiàn),USAGE當(dāng)前是“沒有權(quán)限”的一個(gè)同義詞.它能用在想要?jiǎng)?chuàng)建一個(gè)沒有權(quán)限用戶的時(shí)候.MYSQL應(yīng)用
對于表,能指定的唯一priv_type值是SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、GRANT、INDEX和ALTER.MYSQL應(yīng)用
對于列,能指定的唯一priv_type值是(即,當(dāng)使用一個(gè)column_list子句時(shí))是SELECT、INSERT和UPDATE.MYSQL應(yīng)用
·columns 權(quán)限適用的列.MYSQL應(yīng)用
這是可選的,只來設(shè)置列專有的權(quán)限.如果命名多于一個(gè)列,則用逗號(hào)分開.MYSQL應(yīng)用
·what 權(quán)限應(yīng)用的級(jí)別MYSQL應(yīng)用
GRANT允許系統(tǒng)主管在4個(gè)權(quán)限級(jí)別上授權(quán)MySQL用戶的權(quán)利:MYSQL應(yīng)用
·全局級(jí)別MYSQL應(yīng)用
全局權(quán)限作用于一個(gè)給定服務(wù)器上的所有數(shù)據(jù)庫.這些權(quán)限存儲(chǔ)在mysql.user表中. 能通過使用ON *.*語法設(shè)置全局權(quán)限MYSQL應(yīng)用
·數(shù)據(jù)庫級(jí)別MYSQL應(yīng)用
數(shù)據(jù)庫權(quán)限作用于一個(gè)給定數(shù)據(jù)庫的所有表.這些權(quán)限存儲(chǔ)在mysql.db和mysql.host表中. 能通過使用ON db_name.*語法設(shè)置數(shù)據(jù)庫權(quán)限.如果指定ON *并且有一個(gè)當(dāng)前數(shù)
據(jù)庫,將為該數(shù)據(jù)庫設(shè)置權(quán)限.(警告:如果指定ON *而沒有一個(gè)當(dāng)前數(shù)據(jù)庫,將影響全局權(quán)限!)MYSQL應(yīng)用
·表級(jí)別MYSQL應(yīng)用
表權(quán)限作用于一個(gè)給定表的所有列.這些權(quán)限存儲(chǔ)在mysql.tables_priv表中.能透過 ON tbl_name,為具體的表名設(shè)置權(quán)限.MYSQL應(yīng)用
·列級(jí)別MYSQL應(yīng)用
列權(quán)限作用于在一個(gè)給定表的單個(gè)列.這些權(quán)限存儲(chǔ)在mysql.columns_priv表中.可以通過指定一個(gè)columns子句將權(quán)限授予特定的列,同時(shí)要在ON子句中指定具體的表.MYSQL應(yīng)用
對與一個(gè)表或列的權(quán)限是由4個(gè)權(quán)限級(jí)別的邏輯或形成的.例如,如果mysql.user表指定一個(gè)用戶有一個(gè)全局select權(quán)限,它不能被數(shù)據(jù)庫、表或列的一個(gè)條目否認(rèn).MYSQL應(yīng)用
對于一個(gè)列的權(quán)限能如下計(jì)算:
?MYSQL應(yīng)用
在大多數(shù)情況下,只授予用戶一個(gè)權(quán)限級(jí)別上的權(quán)限,因此現(xiàn)實(shí)通常不象上面所說的那樣復(fù)雜.MYSQL應(yīng)用
user 使用權(quán)限的用戶.MYSQL應(yīng)用
為了容納對任意主機(jī)的用戶授予的權(quán)利,MySQL支持以格式指定user_name值.如果想要指定一個(gè)特殊字符的一個(gè)user字符串(例如“-”),或一個(gè)包括特殊字符或通配符的host
字符串(例如“%”),可以用括號(hào)括起能用戶或主機(jī)名字 (例如,).MYSQL應(yīng)用
能在主機(jī)名中指定通配符.例如,"適用于在loc.gov域中任何主機(jī)的user,并且"適用于在144.155.166類 C 子網(wǎng)中任何主機(jī)的user.MYSQL應(yīng)用
簡單形式的user是"的一個(gè)同義詞.MYSQL應(yīng)用
注意:如果允許匿名用戶連接MySQL服務(wù)器(它是缺省的),也應(yīng)該增加所有本地用戶如 ,因?yàn)榉駝t,當(dāng)用戶試圖從本地機(jī)器上登錄到MySQL服務(wù)器時(shí),對于mysql.user表中的
本地主機(jī)的匿名用戶條目將被使用!匿名用戶通過插入有User=的條目到mysql.user表中來定義.通過執(zhí)行這個(gè)查詢,可以檢驗(yàn)它是否作用于:
?MYSQL應(yīng)用
·password 分配給該用戶的口令.這也是可選的.MYSQL應(yīng)用
在MySQL 3.22.12或以后,如果創(chuàng)建一個(gè)新用戶或如果有全局授予權(quán)限,用戶的口令將被設(shè)置為由IDENTIFIED BY子句指定的口令,如果給出一個(gè).如果用戶已經(jīng)有了一個(gè)口
令,它被一個(gè)新的代替.MYSQL應(yīng)用
警告:如果創(chuàng)造一個(gè)新用戶但是不指定一個(gè)IDENTIFIED BY子句,用戶沒有口令.這是不平安的.MYSQL應(yīng)用
·WITH GRANT OPTION子句是可選的.MYSQL應(yīng)用
WITH GRANT OPTION子句給與用戶有授予其他用戶在指定的權(quán)限水平上的任何權(quán)限的能力.應(yīng)該謹(jǐn)慎對待授予他grant權(quán)限的用戶,因?yàn)榫哂胁煌瑱?quán)限的兩個(gè)用戶也許能合并
權(quán)限!MYSQL應(yīng)用
創(chuàng)建用戶并授權(quán)的實(shí)例MYSQL應(yīng)用
創(chuàng)建一個(gè)具有超級(jí)用戶權(quán)利的用戶:
?MYSQL應(yīng)用
該語句將在user表中為創(chuàng)建一個(gè)記錄,打開所有權(quán)限.MYSQL應(yīng)用
數(shù)據(jù)庫級(jí)權(quán)限用一個(gè)ON db_name.*子句而不是ON *.*進(jìn)行授權(quán):
?MYSQL應(yīng)用
這些權(quán)限不是全局的,所以它們不存儲(chǔ)在user表中,我們?nèi)匀恍枰趗ser表中創(chuàng)建一條記錄(使得用戶能連接),但我們也需要?jiǎng)?chuàng)建一個(gè)db表記錄記錄數(shù)據(jù)庫集的權(quán)限.MYSQL應(yīng)用
直接修改授權(quán)表創(chuàng)建用戶并授權(quán)MYSQL應(yīng)用
如果還記得前面的介紹,應(yīng)該能即使不用GRANT語句也能做GRANT做的事情.記住在直接修改授權(quán)表時(shí),將通知服務(wù)器重載授權(quán)表,否則他不知道的改變.可以執(zhí)行一個(gè)
mysqladmin flush-privileges或mysqladmin reload命令和FLUSH PRIVILEGES語句強(qiáng)迫一個(gè)重載.如果忘記做這個(gè),會(huì)疑惑為什么服務(wù)器不做想做的事情.MYSQL應(yīng)用
下列GRANT語句創(chuàng)建一個(gè)擁有所有權(quán)的超級(jí)用戶.MYSQL應(yīng)用
包含授權(quán)給別人的能力:
?MYSQL應(yīng)用
該語句將在user表中為創(chuàng)建一個(gè)記錄,打開所有權(quán)限,因?yàn)檫@里是超級(jí)用戶(全局)權(quán)限存儲(chǔ)的地方,要用INSERT語句做同樣的事情,語句是:
?MYSQL應(yīng)用
可能發(fā)現(xiàn)它不工作,這要看的MySQL版本.授權(quán)表的結(jié)構(gòu)已經(jīng)改變而且在的user表可能沒有14個(gè)權(quán)限列.用SHOW COLUMNS找出的授權(quán)表包括的每個(gè)權(quán)限列,相應(yīng)地調(diào)整的
INSERT語句.下列GRANT語句也創(chuàng)建一個(gè)擁有超級(jí)用戶身份的用戶,但是只有一個(gè)單個(gè)的權(quán)限:
?MYSQL應(yīng)用
本例的INSERT語句比前一個(gè)簡單,它很容易列出列名并只指定一個(gè)權(quán)限列.所有其它列將設(shè)置為缺省的"N":
?MYSQL應(yīng)用
數(shù)據(jù)庫級(jí)權(quán)限用一個(gè)ON db_name.*子句而不是ON *.*進(jìn)行授權(quán):
?MYSQL應(yīng)用
這些權(quán)限不是全局的,所以它們不存儲(chǔ)在user表中,我們?nèi)匀恍枰趗ser表中創(chuàng)建一條記錄(使得用戶能連接),但我們也需要?jiǎng)?chuàng)建一個(gè)db表記錄記錄數(shù)據(jù)庫集權(quán)限:
?MYSQL應(yīng)用
"N"列是為GRANT權(quán)限;對末尾的一個(gè)數(shù)據(jù)庫級(jí)具有WITH GRANT OPTION的GRANT語句,要設(shè)置該列為"Y".MYSQL應(yīng)用
要設(shè)置表級(jí)或列級(jí)權(quán)限,對tables_priv或columns_priv使用INSERT語句.
當(dāng)然,如果沒有GRANT語句,將沒有這些表,因?yàn)樗鼈冊贛ySQL中同時(shí)出現(xiàn).
如果確實(shí)有這些表并且為了某些原因想要手工操作它們,要知道不能用單獨(dú)的列啟用權(quán)限.MYSQL應(yīng)用
設(shè)置tables_priv.Table_priv或columns_priv.Column_priv列來設(shè)置包括想啟用的權(quán)限值.
例如,要對一個(gè)表啟用SELECT和INSERT權(quán)限,要在相關(guān)的tables_priv的記錄中設(shè)置Table_priv為:"Select,Insert".MYSQL應(yīng)用
《Mysql必讀MySQL用戶設(shè)置與授權(quán)實(shí)例詳解》是否對您有啟發(fā),歡迎查看更多與《Mysql必讀MySQL用戶設(shè)置與授權(quán)實(shí)例詳解》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/12726.html