MySQL存取權(quán)限系統(tǒng)[@more@]Mysql有一個(gè)高級的但不標(biāo)準(zhǔn)的存取權(quán)限系統(tǒng).此部分即描述其如何工作.
權(quán)限系統(tǒng)做什么
Mysql的權(quán)限系統(tǒng)的主要功能是驗(yàn)證從假定主機(jī)來的用戶連接.以及檢查用
戶對數(shù)據(jù)庫的select,insert,update和delete操作權(quán)限.
其附加功能還包括匿名用戶驗(yàn)證及賦予權(quán)限以使用Mysql特殊的功能,如從
文件中裝入數(shù)據(jù)和管理操作.
Mysql的用戶名和口令
Mysql的用戶名和口令在Unix和Windows之間有一些差別:
·用戶名,Mysql用于達(dá)到其驗(yàn)證目的.與Unix和Windows的用戶名毫無干系
(login names).大多數(shù)的Mysql客戶端缺省的使用Uinx當(dāng)前用戶名作為
Mysql用戶名去登錄,但那只是為了方便而已.客戶端程序允許使用-u或--
user參數(shù)指定一個(gè)不同的名字.這意味著你不可能使Mysql數(shù)據(jù)庫得到安全
保護(hù)除非每一個(gè)Mysql用戶名都具有口令.任何人都可以用任何名字來企圖
連接數(shù)據(jù)庫,如果他們指定的某一個(gè)名字恰好沒有口令,他們就會取得成功
.
·Mysql用戶名可以提高到十六位字符長,而典型的Unix用戶名都限制在八位
.
·Mysql的口令跟Unix口令毫無干系.不必把你登錄進(jìn)Unix機(jī)器的口令和你用
來在該機(jī)器上存取數(shù)據(jù)庫的口令聯(lián)系起來.
·Mysql使用了與Unix登錄進(jìn)程不同的加密算法.請參見7.3.11節(jié)各種函數(shù)中
對PASSWORD()和ENCRYPT()函數(shù)的描述.
6.3連接上Mysql
服務(wù)器 Mysql客戶端程序通常會讓你指定一些連接參數(shù),但你想存取Mysql數(shù)據(jù)庫的時(shí)
候:你想連接的主機(jī),你的用戶名和口令.例如,Mysql客戶端可以象這樣開始(
可選參數(shù)被加上了"["和"]"):
shell> mysql [-h 主機(jī)名] [-u 用戶名] [-p口令]
也可以用--host=主機(jī)名,--user=用戶名和--password=口令來代替-h,-u和-p
選項(xiàng).注意,在-p或--password和口令之間沒有空格.
如果在命令行沒有指定連接參數(shù),Mysql將使用缺省值:
·缺省的主機(jī)名是localhost.
·缺省的用戶名是你在Unix中的登錄名.
·如果沒有-p參數(shù)則將不提供口令.
因而,對于Unix用戶Joe如下的命令是等價(jià)的
shell> mysql -h localhost -u joe
shell> mysql -h localhost
shell> mysql -u joe
shell> mysql
其它的客戶端的動(dòng)作與此類似.
在Unix系統(tǒng)中,你不必在每一次調(diào)用客戶機(jī)程序進(jìn)行連接的時(shí)候都在命令行敲入
所有選項(xiàng),可以為它們指定不同的缺省值.這可以用兩種方法來辦到:
·你可以在你的home目錄中的".my.cnf"配置文件中的[client]一節(jié)指定連接參
數(shù).該文件的相關(guān)節(jié)看起來可能象這樣:
[client]host=host_name
user=user_name
password=your_pass
請參見4.15.4選項(xiàng)文件一節(jié)
·你也可以使用環(huán)境變量來指定連接參數(shù).主機(jī)可以被指定使用MYSQL_HOST,Mysql
用戶名可以被指定使用USER,LOGNAME或是LOGIN(盡管這些變量可能已經(jīng)被設(shè)置
成你的Unix登錄名,但它們可能被任意改變).口令可以被指定為使用MYSQL_PWD(
但這是不安全的;參見下節(jié))
如果通過多種不同的方法指定連接參數(shù),那么在命令行中指定的值比在配置文件中
和環(huán)境變量中指定的值具有更高的優(yōu)先權(quán).而在配置文件中指定的值又比在環(huán)境變
量中指定的值具有更高的優(yōu)先權(quán).
使你的口令安全
在其它用戶可以發(fā)現(xiàn)的情況下將你的口令用一種方法暴露的指定出來是相當(dāng)失策的
.下面列出了當(dāng)你使用客戶端程序時(shí)可以用來指定密碼的方法,比比較了每一種方法
的優(yōu)劣:
·在命令行使用一個(gè) -p密碼 或 --password=密碼 參數(shù).這確很方便,但極不安全,
你密碼能被系統(tǒng)狀態(tài)檢測程序看見(如ps),所以可以被其他用戶調(diào)用出來顯示在
命令行上.(MySQL客戶端特別在命令行參數(shù)初始化時(shí)用0覆蓋它們,但在該值顯得
可見時(shí)仍有短暫的間隔).
·用一個(gè)-p或--password參數(shù)(不指定你的密碼).這樣,客戶端程序會要求密碼從終
端輸入:
shell> mysql -u 用戶名 -p]
Enter password: ********
客戶端把你輸入的密碼以*"字符顯示在終端上,以使旁觀者無法看見.如此輸入
密碼比你在命令行上指定密碼更安全,因?yàn)樗鼘ζ渌脩舨⒉豢梢?但是,此輸入
密碼的方法只在你使用交互式程序時(shí)才有效.如果你想非交互的從一個(gè)腳本中調(diào)
用客戶端,則沒有機(jī)會從終端輸入密碼了.
·把你的密碼保存在一個(gè)配置文件中.舉例來說,你可以把你的密碼列在你home目錄
下的.my.cnf文件的[client]節(jié):
[client]
password=your_pass
如果你把密碼存放在.my.cnf中,那么同組用戶和其他用戶對該文件必須不能具
有讀取和寫入的權(quán)限.確定文件的存取模式必須為400或600.參見4.15.4節(jié)選項(xiàng)文
件.
·你也可以把你的密碼存放在MYSQL_PWD環(huán)境變量中,但該方法被認(rèn)為極不安全而通
常不被使用.某些版本的PS包括一個(gè)選項(xiàng)可以列出正在運(yùn)行的進(jìn)程的環(huán)境;你的密
碼將被清楚的顯示出來,如果你設(shè)置了MYSQL_PWD環(huán)境變量的話.
總而言之,最安全的方法是在客戶端提示輸入密碼或?qū)⒚艽a保存在受到正確保護(hù)的
.my.cnf文件中.
MySQL提供的權(quán)限
權(quán)限信息存放在mysql數(shù)據(jù)庫(即數(shù)據(jù)庫的名字叫mysql)的user, db, host, tables
_priv and columns_priv表中.當(dāng)MySQL服務(wù)器在啟動(dòng)時(shí)或在6.9節(jié)"改變的權(quán)限何時(shí)
生效"指出的情況下讀取這些表中的項(xiàng)目.
此手冊所提及的MySQL提供的權(quán)限的名字列在其下,各列列出了權(quán)限的名字,對應(yīng)的操
作和適用的范圍.
權(quán)限 列名 范圍
select select_priv 表
insert Insert_priv 表
update Update_priv 表
delete Delete_priv 表
index Index_priv 表
alter Alter_priv 表
create Create_priv 數(shù)據(jù)庫,表或索引
drop Drop_priv 數(shù)據(jù)庫或表
grant Grant_priv 數(shù)據(jù)庫或表
reload Reload_priv 服務(wù)器管理
shutdown Shutdown_priv 服務(wù)器管理
process Process_priv 服務(wù)器管理
file File_priv 服務(wù)器上文件存取
select, insert, update 和 delete 權(quán)限允許你在一個(gè)數(shù)據(jù)庫中存在的表的行上執(zhí)
行操作.
僅當(dāng)你真要從表中返回行時(shí)SELECT表達(dá)式才需要select權(quán)限.你可以執(zhí)行一個(gè)SELECT
表達(dá)式,甚至當(dāng)你在服務(wù)器上沒有存取任何數(shù)據(jù)庫的權(quán)限時(shí)也行.比如,你可以用mysql
客戶端作一個(gè)簡單的計(jì)數(shù):
mysql> SELECT 1+1;
mysql> SELECT PI()*2;
index權(quán)限允許你create或drop(刪除)索引.
alter權(quán)限允許你使用ALTER TABLE.
create和drop權(quán)限允許你create新數(shù)據(jù)庫和表,或drop(刪除)存在的數(shù)據(jù)庫和表.
注意,如果你允許一個(gè)用戶擁有對mysql數(shù)據(jù)庫的drop權(quán)限,那么該用戶可以drop掉MySQL
用來存放存取權(quán)限的地方.
grant權(quán)限允許你授予其他用戶你所擁有的那些權(quán)限.
file權(quán)限允許你用LOAD DATA INFILE 和 SELECT ... INTO OUTFILE語句存取服務(wù)器上
的文件.任何用戶如果具有了這個(gè)權(quán)限他就可以存取任何MySQL服務(wù)器可以存取的文件.
剩下的權(quán)限用于管理操作,在執(zhí)行mysqladmin程序時(shí)會用到.下表列出了mysqladmin命
令允許你執(zhí)行的每一個(gè)管理權(quán)限:
權(quán)限 權(quán)限擁有者可以執(zhí)行的操作
reload reload, refresh, flush-privileges, flush-hosts, flush-logs, flush-tables
shutdown shutdown
process processlist, kill
reload命令告訴服務(wù)器重新讀取認(rèn)證表.refresh命令刷新所有的數(shù)據(jù)庫,打開和關(guān)閉日
志文件.flush-privileges是reload的一個(gè)同義詞.其它flush-*執(zhí)行和refresh大致相
同的功能,但是在更有限的范圍內(nèi),也許在某些場合效果更好.例如,如果你僅想刷新日
志文件,flush-logs就是比refresh更好的選擇.
shutdown命令關(guān)閉服務(wù)器.
processlist命令列出有關(guān)服務(wù)器中所執(zhí)行的線程的信息.kill命令殺掉服務(wù)器的線程
.你通常只能列出和殺掉你自己的線程,但如果你有process權(quán)限就可以列出或殺掉由其
他用戶啟動(dòng)的線程.
通常只授予相關(guān)用戶一些必須權(quán)限是一個(gè)好辦法,當(dāng)你得學(xué)會小心謹(jǐn)慎的授出下列權(quán)限:
·grant權(quán)限允許用戶把他們自己的權(quán)限授予另外一些用戶.如果兩個(gè)用戶有不同的權(quán)
限,而又同時(shí)具有g(shù)rant權(quán)限的話,那他們就共同具有了這所有的這些權(quán)限.
·alter權(quán)限擁有者可以用給表重命名的方式破壞權(quán)限系統(tǒng).
·file權(quán)限些許會被濫用,以在數(shù)據(jù)庫表中讀取任何的全程文件,該項(xiàng)目可以使用SELECT
進(jìn)行存取.
·shudown權(quán)限也可能被濫用.關(guān)閉服務(wù)器,對其他所有用戶拒絕服務(wù).
·process權(quán)限可以以純文本的方式顯示出當(dāng)前正執(zhí)行的查詢,包含設(shè)置和修改密碼的查
詢.
·mysql數(shù)據(jù)庫上的權(quán)限可以用來改變密碼和其它存取權(quán)限信息.(密碼是加密存儲的,所
以一個(gè)有惡意的用戶不能簡單的讀取它們.但是,如果有足夠的權(quán)限,他可以把它改成另
一個(gè)不同的密碼.)
通過MySQL權(quán)限系統(tǒng)無法實(shí)現(xiàn)下面一些事情:
·你不能明確的指定一個(gè)用戶將被拒絕存取.也就是說,你不能明確指定匹配一個(gè)用戶,拒
絕它的連接.
·你不能指定一個(gè)用戶能在一個(gè)數(shù)據(jù)庫中創(chuàng)建和刪除表,而不能創(chuàng)建和刪除該數(shù)據(jù)庫自身.
名稱欄目:Mysql存取權(quán)限系統(tǒng)(轉(zhuǎn))
文章鏈接:http://aaarwkj.com/article24/igdhce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)公司、面包屑導(dǎo)航、品牌網(wǎng)站制作、用戶體驗(yàn)
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)