Mysql存取權(quán)限系統(tǒng)(轉(zhuǎn))

MySQL存取權(quán)限系統(tǒng)[@more@]Mysql有一個高級的但不標(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ù)指定一個不同的名字.這意味著你不可能使Mysql數(shù)據(jù)庫得到安全
保護(hù)除非每一個Mysql用戶名都具有口令.任何人都可以用任何名字來企圖
連接數(shù)據(jù)庫,如果他們指定的某一個名字恰好沒有口令,他們就會取得成功
.

·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ù)庫的時
候:你想連接的主機(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如下的命令是等價的

shell> mysql -h localhost -u joe
shell> mysql -h localhost
shell> mysql -u joe
shell> mysql

其它的客戶端的動作與此類似.

在Unix系統(tǒng)中,你不必在每一次調(diào)用客戶機(jī)程序進(jìn)行連接的時候都在命令行敲入
所有選項(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)你使用客戶端程序時可以用來指定密碼的方法,比比較了每一種方法
的優(yōu)劣:

·在命令行使用一個 -p密碼 或 --password=密碼 參數(shù).這確很方便,但極不安全,
你密碼能被系統(tǒng)狀態(tài)檢測程序看見(如ps),所以可以被其他用戶調(diào)用出來顯示在
命令行上.(MySQL客戶端特別在命令行參數(shù)初始化時用0覆蓋它們,但在該值顯得
可見時仍有短暫的間隔).
·用一個-p或--password參數(shù)(不指定你的密碼).這樣,客戶端程序會要求密碼從終
端輸入:

shell> mysql -u 用戶名 -p]
Enter password: ********

客戶端把你輸入的密碼以*"字符顯示在終端上,以使旁觀者無法看見.如此輸入
密碼比你在命令行上指定密碼更安全,因?yàn)樗鼘ζ渌脩舨⒉豢梢?但是,此輸入
密碼的方法只在你使用交互式程序時才有效.如果你想非交互的從一個腳本中調(diào)
用客戶端,則沒有機(jī)會從終端輸入密碼了.
·把你的密碼保存在一個配置文件中.舉例來說,你可以把你的密碼列在你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包括一個選項(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ù)器在啟動時或在6.9節(jié)"改變的權(quán)限何時
生效"指出的情況下讀取這些表中的項(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)限允許你在一個數(shù)據(jù)庫中存在的表的行上執(zhí)
行操作.

僅當(dāng)你真要從表中返回行時SELECT表達(dá)式才需要select權(quán)限.你可以執(zhí)行一個SELECT
表達(dá)式,甚至當(dāng)你在服務(wù)器上沒有存取任何數(shù)據(jù)庫的權(quán)限時也行.比如,你可以用mysql
客戶端作一個簡單的計數(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ù)庫和表.

注意,如果你允許一個用戶擁有對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ù)器上
的文件.任何用戶如果具有了這個權(quán)限他就可以存取任何MySQL服務(wù)器可以存取的文件.
剩下的權(quán)限用于管理操作,在執(zhí)行mysqladmin程序時會用到.下表列出了mysqladmin命
令允許你執(zhí)行的每一個管理權(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的一個同義詞.其它flush-*執(zhí)行和refresh大致相
同的功能,但是在更有限的范圍內(nèi),也許在某些場合效果更好.例如,如果你僅想刷新日
志文件,flush-logs就是比refresh更好的選擇.

shutdown命令關(guān)閉服務(wù)器.

processlist命令列出有關(guān)服務(wù)器中所執(zhí)行的線程的信息.kill命令殺掉服務(wù)器的線程
.你通常只能列出和殺掉你自己的線程,但如果你有process權(quán)限就可以列出或殺掉由其
他用戶啟動的線程.

通常只授予相關(guān)用戶一些必須權(quán)限是一個好辦法,當(dāng)你得學(xué)會小心謹(jǐn)慎的授出下列權(quán)限:

·grant權(quán)限允許用戶把他們自己的權(quán)限授予另外一些用戶.如果兩個用戶有不同的權(quán)
限,而又同時具有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)限信息.(密碼是加密存儲的,所
以一個有惡意的用戶不能簡單的讀取它們.但是,如果有足夠的權(quán)限,他可以把它改成另
一個不同的密碼.)

通過MySQL權(quán)限系統(tǒng)無法實(shí)現(xiàn)下面一些事情:

·你不能明確的指定一個用戶將被拒絕存取.也就是說,你不能明確指定匹配一個用戶,拒
絕它的連接.
·你不能指定一個用戶能在一個數(shù)據(jù)庫中創(chuàng)建和刪除表,而不能創(chuàng)建和刪除該數(shù)據(jù)庫自身.

名稱欄目:Mysql存取權(quán)限系統(tǒng)(轉(zhuǎn))
文章鏈接:http://bm7419.com/article24/igdhce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化網(wǎng)站制作、網(wǎng)頁設(shè)計公司、面包屑導(dǎo)航品牌網(wǎng)站制作、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營