




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章用戶(hù)和數(shù)據(jù)安全性9.1添加和刪除用戶(hù)9.2授予權(quán)限和回收權(quán)限9.3界面方式操作用戶(hù)與權(quán)限9.4表維護(hù)語(yǔ)句第9章用戶(hù)和數(shù)據(jù)安全性9.1添加和刪除用戶(hù)9.219.1添加和刪除用戶(hù)9.1.4修改密碼9.1.2刪除用戶(hù)9.1.3修改用戶(hù)名9.1.1添加用戶(hù)9.1.2刪除用戶(hù)9.1.1添加用戶(hù)9.1.3修改用戶(hù)名9.1.2刪除用戶(hù)9.1.1添加用戶(hù)9.1添加和刪除用戶(hù)9.1.4修改密碼9.1.229.1.1添加用戶(hù)可用CREATEUSER語(yǔ)法添加一個(gè)或多個(gè)用戶(hù),并設(shè)置相應(yīng)的密碼。語(yǔ)法格式:CREATEUSERuser[IDENTIFIEDBY[PASSWORD]'password'][,userDENTIFIEDBY[PASSWORD]'password']]...說(shuō)明:user的格式為:'user_name'@'hostname'user_name為用戶(hù)名,host_name為主機(jī)名,password為該用戶(hù)的密碼。IDENTIFIEDBY子句,為賬戶(hù)給定一個(gè)密碼。特別是要在純文本中指定密碼,需忽略PASSWORD關(guān)鍵詞。如果不想以明文發(fā)送密碼,而且知道PASSWORD()函數(shù)返回給密碼的混編值,則可以指定該混編值,但要加關(guān)鍵字PASSWORD。CREATEUSER用于創(chuàng)建新的MySQL賬戶(hù)。CREATEUSER會(huì)在系統(tǒng)本身的mysql數(shù)據(jù)庫(kù)的user表中添加一個(gè)新記錄。要使用CREATEUSER,必須擁有mysql數(shù)據(jù)庫(kù)的全局CREATEUSER權(quán)限或INSERT權(quán)限。如果賬戶(hù)已經(jīng)存在,則出現(xiàn)錯(cuò)誤。9.1.1添加用戶(hù)可用CREATEUSER語(yǔ)法添加一個(gè)3用戶(hù)名和localhost可以不加引號(hào),但密碼得加單引號(hào)或雙引號(hào)【例9.1】添加兩個(gè)新的用戶(hù),king的密碼為queen,palo的密碼為530415。CREATEUSER'king'@'localhost‘IDENTIFIEDBY'queen','palo'@'localhost'IDENTIFIEDBY'530415';用戶(hù)名和localhost可以不加引號(hào),但密碼得加單引號(hào)或4說(shuō)明:localhost指定了用戶(hù)創(chuàng)建的使用MySQL的連接所來(lái)自的主機(jī)。如果一個(gè)用戶(hù)名和主機(jī)名中包含特殊符號(hào)如“_”,或通配符如“%”,則需要用單引號(hào)將其括起?!?”表示一組主機(jī)。如果兩個(gè)用戶(hù)具有相同的用戶(hù)名但主機(jī)不同,MySQL將其視為不同的用戶(hù),允許為這兩個(gè)用戶(hù)分配不同的權(quán)限集合。如果沒(méi)有輸入密碼,那么MySQL允許相關(guān)的用戶(hù)不使用密碼登錄。但是從安全的角度并不推薦這種做法。剛剛創(chuàng)建的用戶(hù)還沒(méi)有很多權(quán)限。它們可以登錄到MySQL,但是它們不能使用USE語(yǔ)句來(lái)讓用戶(hù)已經(jīng)創(chuàng)建的任何數(shù)據(jù)庫(kù)成為當(dāng)前數(shù)據(jù)庫(kù),因此,它們無(wú)法訪(fǎng)問(wèn)那些數(shù)據(jù)庫(kù)的表,只允許進(jìn)行不需要權(quán)限的操作,例如,用一條SHOW語(yǔ)句查詢(xún)所有存儲(chǔ)引擎和字符集的列表。說(shuō)明:localhost指定了用戶(hù)創(chuàng)建的使用MySQL的連接59.1.2刪除用戶(hù)語(yǔ)法格式:DROPUSERuser[,user_name]...DROPUSER語(yǔ)句用于刪除一個(gè)或多個(gè)MySQL賬戶(hù),并取消其權(quán)限。要使用DROPUSER,必須擁有mysql數(shù)據(jù)庫(kù)的全局CREATEUSER權(quán)限或DELETE權(quán)限。9.1.2刪除用戶(hù)語(yǔ)法格式:6【例9.2】刪除用戶(hù)TOM。
DROPUSERTOM@localhost;如果刪除的用戶(hù)已經(jīng)創(chuàng)建了表、索引或其他的數(shù)據(jù)庫(kù)對(duì)象,它們將繼續(xù)保留,因?yàn)镸ySQL并沒(méi)有記錄是誰(shuí)創(chuàng)建了這些對(duì)象?!纠?.2】刪除用戶(hù)TOM。79.1.3修改用戶(hù)名修改一個(gè)已經(jīng)存在的SQL用戶(hù)的名字。語(yǔ)法格式:RENAMEUSERold_userTOnew_user,[,old_userTOnew_user]...說(shuō)明:old_user為已經(jīng)存在的SQL用戶(hù)。new_user為新的SQL用戶(hù)。RENAMEUSER語(yǔ)句用于對(duì)原有MySQL賬戶(hù)進(jìn)行重命名。使用該語(yǔ)句,必須擁有全局CREATEUSER權(quán)限或mysql數(shù)據(jù)庫(kù)UPDATE權(quán)限。如果舊賬戶(hù)不存在或者新賬戶(hù)已存在,則會(huì)出現(xiàn)錯(cuò)誤。9.1.3修改用戶(hù)名修改一個(gè)已經(jīng)存在的SQL用戶(hù)的名字。8【例9.3】將用戶(hù)king1和king2的名字分別修改為ken1和ken2。RENAMEUSER
'king1'@'localhost'TO'ken1'@'localhost','king2'@'localhost'TO'ken2'@'localhost';【例9.3】將用戶(hù)king1和king2的名字分別修改為k99.1.4修改密碼修改某個(gè)用戶(hù)的登錄密碼,語(yǔ)法格式:SETPASSWORD[FORuser]=
PASSWORD('newpassword')說(shuō)明:如果不加FORuser,表示修改當(dāng)前用戶(hù)的密碼。加了FORuser則是修改當(dāng)前主機(jī)上的特定用戶(hù)的密碼,user為用戶(hù)名。user的值必須以'user_name'@'host_name'的格式給定。9.1.4修改密碼修改某個(gè)用戶(hù)的登錄密碼,語(yǔ)法格式:10【例9.4】將用戶(hù)king的密碼修改為queen1。SETPASSWORDFOR'king'@'localhost'=PASSWORD('queen1');【例9.4】將用戶(hù)king的密碼修改為queen1。SET119.2授予權(quán)限和回收權(quán)限9.2.1兩級(jí)訪(fǎng)問(wèn)控制9.2.2授予權(quán)限9.2.3權(quán)限的轉(zhuǎn)移和限制9.2.4回收權(quán)限9.2授予權(quán)限和回收權(quán)限9.2.1兩級(jí)訪(fǎng)問(wèn)控制129.2.1兩級(jí)訪(fǎng)問(wèn)控制通常情況下,建立一個(gè)數(shù)據(jù)庫(kù)以后,并不是所有的人都可以看到數(shù)據(jù)庫(kù)里的所有數(shù)據(jù)(無(wú)論是修改還是刪除)。為了保護(hù)數(shù)據(jù)不被探查或未經(jīng)授權(quán)的篡改,MySQL采用了一種雙層的訪(fǎng)問(wèn)控制機(jī)制。第一層用來(lái)檢查各位用戶(hù)是否有權(quán)與MySQL進(jìn)行通信。第二層用來(lái)檢查各位用戶(hù)都有權(quán)對(duì)哪些數(shù)據(jù)庫(kù)、數(shù)據(jù)表和數(shù)據(jù)列進(jìn)行哪些操作。9.2.1兩級(jí)訪(fǎng)問(wèn)控制通常情況下,建立一個(gè)數(shù)據(jù)庫(kù)以后,并不13只有在建立連接的檢查完成以后,第二階段的訪(fǎng)問(wèn)控制才開(kāi)始實(shí)施,這種控制細(xì)化到每一條數(shù)據(jù)庫(kù)命令。例如,要執(zhí)行一個(gè)SELECT命令,MySQL會(huì)檢查該用戶(hù)對(duì)數(shù)據(jù)庫(kù)、數(shù)據(jù)表和數(shù)據(jù)列是否具有執(zhí)行這個(gè)命令的權(quán)限。要執(zhí)行一個(gè)INSERT命令,那么MYSQL要檢查是否允許該用戶(hù)改變數(shù)據(jù)庫(kù)、數(shù)據(jù)表直到數(shù)據(jù)列的內(nèi)容。只有在建立連接的檢查完成以后,第二階段的訪(fǎng)問(wèn)控制才開(kāi)始實(shí)施,14MYSQL是如何管理哪個(gè)命令可以執(zhí)行這樣的信息呢?MYSQL使用存儲(chǔ)著privileges的數(shù)據(jù)表進(jìn)行管理的。如果一個(gè)用戶(hù)auser,具有對(duì)數(shù)據(jù)庫(kù)cxdb1的select權(quán)限,那么該用戶(hù)就可以讀取cxdb1中的所有數(shù)據(jù)。如果該用戶(hù)具有全局的select權(quán)限,該用戶(hù)就可以讀取所有存儲(chǔ)于MYSQL的數(shù)據(jù)庫(kù)。MYSQL是如何管理哪個(gè)命令可以執(zhí)行這樣的信息呢?MYSQL15訪(fǎng)問(wèn)權(quán)限系統(tǒng)在設(shè)置訪(fǎng)問(wèn)權(quán)限的時(shí)候,MYSQL提供了一個(gè)準(zhǔn)確、相互銜接的系統(tǒng),在MYSQL文檔中,這個(gè)系統(tǒng)被稱(chēng)為訪(fǎng)問(wèn)權(quán)限系統(tǒng)(accessprivilegesystem),這個(gè)系統(tǒng)里的各個(gè)列表被稱(chēng)為訪(fǎng)問(wèn)控制表ACL。訪(fǎng)問(wèn)權(quán)限系統(tǒng)在設(shè)置訪(fǎng)問(wèn)權(quán)限的時(shí)候,MYSQL提供了一個(gè)準(zhǔn)確、16設(shè)置訪(fǎng)問(wèn)權(quán)限的方式以圖形用戶(hù)界面使用管理程序-最簡(jiǎn)單方便使用INSERT和UPDATE命令直接改變MYSQL使用SQL的命令GRANT和REVOKE。使用Perl腳本程序mysql_setpermission.pl。當(dāng)然,它假設(shè)用戶(hù)安裝并運(yùn)行著Perl。設(shè)置訪(fǎng)問(wèn)權(quán)限的方式以圖形用戶(hù)界面使用管理程序-最簡(jiǎn)單方便17Mysql數(shù)據(jù)庫(kù)由MySQL管理的訪(fǎng)問(wèn)權(quán)限是依靠數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)的,這個(gè)數(shù)據(jù)庫(kù)的名字叫mysql,它由幾個(gè)數(shù)據(jù)表組成,對(duì)應(yīng)著訪(fǎng)問(wèn)權(quán)限的各個(gè)方面。Mysql數(shù)據(jù)庫(kù)由MySQL管理的訪(fǎng)問(wèn)權(quán)限是依靠數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)18數(shù)據(jù)庫(kù)mysql的數(shù)據(jù)表數(shù)據(jù)庫(kù)mysql的數(shù)據(jù)表19Mysql第9章用戶(hù)和數(shù)據(jù)安全性課件20舉例:假定一個(gè)MYSQL用戶(hù)zeuse只能讀取某個(gè)數(shù)據(jù)表的數(shù)據(jù)列,除此之外沒(méi)其他任何權(quán)限。Zeuse(包括用戶(hù)名,主機(jī)名,密碼)必須被輸入到user數(shù)據(jù)表里。Zeuse的所有全局權(quán)限都必須設(shè)置為NZeuse(包括用戶(hù)名,主機(jī)名)還必須要在columns_priv數(shù)據(jù)表中注冊(cè)。在columns_priv數(shù)據(jù)表中,還必須設(shè)定都允許Zeuse訪(fǎng)問(wèn)哪個(gè)數(shù)據(jù)列(數(shù)據(jù)庫(kù)名,數(shù)據(jù)表名,數(shù)據(jù)列名)Select權(quán)限(僅)必須要激活。舉例:假定一個(gè)MYSQL用戶(hù)zeuse只能讀取某個(gè)數(shù)據(jù)表的數(shù)21當(dāng)相應(yīng)等級(jí)的權(quán)限設(shè)置為N時(shí),數(shù)據(jù)表db,host,table_priv,columns_priv以這個(gè)順序依次實(shí)施。即:如果select權(quán)限賦予了user數(shù)據(jù)表中的一個(gè)用戶(hù),那么其他的4個(gè)數(shù)據(jù)表就不再用于檢查這個(gè)用戶(hù)是否允許執(zhí)行SELECT命令。所以,要想對(duì)訪(fǎng)問(wèn)權(quán)限進(jìn)行精確的區(qū)別,就必須把user數(shù)據(jù)表里的全局權(quán)限全部設(shè)置為N.當(dāng)相應(yīng)等級(jí)的權(quán)限設(shè)置為N時(shí),數(shù)據(jù)表db,host,table229.2.2授予權(quán)限新的SQL用戶(hù)不允許訪(fǎng)問(wèn)屬于其他SQL用戶(hù)的表,也不能立即創(chuàng)建自己的表,它必須被授權(quán)。權(quán)限有以下幾組。(1)列權(quán)限:和表中的一個(gè)具體列相關(guān)。例如,使用UPDATE語(yǔ)句更新表XS學(xué)號(hào)列的值的權(quán)限。(2)表權(quán)限:和一個(gè)具體表中的所有數(shù)據(jù)相關(guān)。例如,使用SELECT語(yǔ)句查詢(xún)表XS的所有數(shù)據(jù)的權(quán)限。(3)數(shù)據(jù)庫(kù)權(quán)限:和一個(gè)具體的數(shù)據(jù)庫(kù)中的所有表相關(guān)。例如,在已有的XSCJ數(shù)據(jù)庫(kù)中創(chuàng)建新表的權(quán)限。(4)用戶(hù)權(quán)限:和MySQL所有的數(shù)據(jù)庫(kù)相關(guān)。例如,刪除已有的數(shù)據(jù)庫(kù)或者創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)的權(quán)限。9.2.2授予權(quán)限新的SQL用戶(hù)不允許訪(fǎng)問(wèn)屬于其他SQL23使用GRANT語(yǔ)句可以給某用戶(hù)授予權(quán)限。Grant可以把指定的權(quán)限分配給特定的用戶(hù),如果這個(gè)用戶(hù)不存在,則會(huì)創(chuàng)建一個(gè)用戶(hù)。使用SHOWGRANTS語(yǔ)句可以查看當(dāng)前賬戶(hù)擁有什么權(quán)限。使用GRANT語(yǔ)句可以給某用戶(hù)授予權(quán)限。24
Grant常用格式:其中,權(quán)限1,權(quán)限2,…權(quán)限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個(gè)權(quán)限。
當(dāng)權(quán)限1,權(quán)限2,…權(quán)限n被allprivileges或者all代替,表示賦予用戶(hù)全部權(quán)限。
當(dāng)數(shù)據(jù)庫(kù)名稱(chēng).表名稱(chēng)被*.*代替,表示賦予用戶(hù)操作服務(wù)器上所有數(shù)據(jù)庫(kù)所有表的權(quán)限。
用戶(hù)地址可以是localhost,也可以是ip地址、機(jī)器名字、域名。也可以用’%'表示從任何地址連接。
‘連接口令’不能為空,否則創(chuàng)建失敗。grant權(quán)限1,權(quán)限2,…權(quán)限non數(shù)據(jù)庫(kù)名.表名to用戶(hù)名@用戶(hù)地址identifiedby‘口令’;
Grant常用格式:grant權(quán)限1,權(quán)限2,…權(quán)限n25授予權(quán)限的類(lèi)型(1)授予表權(quán)限和列權(quán)限(2)授予數(shù)據(jù)庫(kù)權(quán)限(3)授予用戶(hù)權(quán)限授予權(quán)限的類(lèi)型(1)授予表權(quán)限和列權(quán)限26(1)授予表權(quán)限和列權(quán)限
授予表權(quán)限時(shí),權(quán)限1,權(quán)限2,…權(quán)限n可以是:●SELECT:給予用戶(hù)使用SELECT語(yǔ)句訪(fǎng)問(wèn)特定的表的權(quán)力。用戶(hù)也可以在一個(gè)視圖公式中包含表。然而,用戶(hù)必須對(duì)視圖公式中指定的每個(gè)表(或視圖)都有SELECT權(quán)限?!馡NSERT:給予用戶(hù)使用INSERT語(yǔ)句向一個(gè)特定表中添加行的權(quán)力?!馜ELETE:給予用戶(hù)使用DELETE語(yǔ)句向一個(gè)特定表中刪除行的權(quán)力?!馯PDATE:給予用戶(hù)使用UPDATE語(yǔ)句修改特定表中值的權(quán)力。(1)授予表權(quán)限和列權(quán)限授予表權(quán)限時(shí),27授予表權(quán)限-續(xù)●REFERENCES:給予用戶(hù)創(chuàng)建一個(gè)外鍵來(lái)參照特定的表的權(quán)力?!馛REATE:給予用戶(hù)使用特定的名字創(chuàng)建一個(gè)表的權(quán)力?!馎LTER:給予用戶(hù)使用ALTERTABLE語(yǔ)句修改表的權(quán)力?!馡NDEX:給予用戶(hù)在表上定義索引的權(quán)力?!馜ROP:給予用戶(hù)刪除表的權(quán)力?!馎LL或ALLPRIVILEGES:表示所有權(quán)限名。授予表權(quán)限-續(xù)●REFERENCES:給予用戶(hù)創(chuàng)建一個(gè)外鍵28【例9.5】授予用戶(hù)king在xscj.XS表上的SELECT權(quán)限。
USEXSCJ;GRANTSELECTONXSTOking@localhost;說(shuō)明:這里假設(shè)是在ROOT用戶(hù)中輸入了這些語(yǔ)句,這樣用戶(hù)king就可以使用SELECT語(yǔ)句來(lái)查詢(xún)XS表,而不管是誰(shuí)創(chuàng)建的這個(gè)表。若在TO子句中給存在的用戶(hù)指定密碼,則新密碼將原密碼覆蓋。如果權(quán)限授予了一個(gè)不存在的用戶(hù),MySQL會(huì)自動(dòng)執(zhí)行一條CREATEUSER語(yǔ)句來(lái)創(chuàng)建這個(gè)用戶(hù),但必須為該用戶(hù)指定密碼?!纠?.5】授予用戶(hù)king在xscj.XS表上的SELE29USEXSCJ;GRANTSELECT,UPDATEONXSTOliu@localhostIDENTIFIEDBY'LPWD',zhang@localhostIDENTIFIEDBY'ZPWD';【例9.6】用戶(hù)liu和zhang不存在,授予它們?cè)赬S表上的SELECT和UPDATE權(quán)限。USEXSCJ;【例9.6】用戶(hù)liu和zhang不存30授予列權(quán)限時(shí):權(quán)限只能取SELECT、INSERT和UPDATE。權(quán)限值的后面需要加上列名。授予列權(quán)限時(shí):權(quán)限只能取SELECT、INSERT和UPDA31【例9.7】授予king在XS表上的學(xué)號(hào)列和姓名列的UPDATE權(quán)限。GRANTUPDATE(姓名,學(xué)號(hào))ONXSTOking@localhost;【例9.7】授予king在XS表上的學(xué)號(hào)列和姓名列的UPD32(2)授予數(shù)據(jù)庫(kù)權(quán)限例如,在一個(gè)特定的數(shù)據(jù)庫(kù)中創(chuàng)建表和視圖的權(quán)限。授予數(shù)據(jù)庫(kù)權(quán)限時(shí),priv_type可以是以下值:●SELECT:給予用戶(hù)使用SELECT語(yǔ)句訪(fǎng)問(wèn)特定數(shù)據(jù)庫(kù)中所有表和視圖的權(quán)力?!馡NSERT:給予用戶(hù)使用INSERT語(yǔ)句向特定數(shù)據(jù)庫(kù)中所有表添加行的權(quán)力?!馜ELETE:給予用戶(hù)使用DELETE語(yǔ)句刪除特定數(shù)據(jù)庫(kù)中所有表的行的權(quán)力?!馯PDATE:給予用戶(hù)使用UPDATE語(yǔ)句更新特定數(shù)據(jù)庫(kù)中所有表的值的權(quán)力?!馬EFERENCES:給予用戶(hù)創(chuàng)建指向特定的數(shù)據(jù)庫(kù)中的表外鍵的權(quán)力。(2)授予數(shù)據(jù)庫(kù)權(quán)限例如,在一個(gè)特定的數(shù)據(jù)庫(kù)中創(chuàng)建表和視圖的33數(shù)據(jù)庫(kù)權(quán)限-續(xù)●CREATE:給予用戶(hù)使用CREATETABLE語(yǔ)句在特定數(shù)據(jù)庫(kù)中創(chuàng)建新表的權(quán)力?!馎LTER:給予用戶(hù)使用ALTERTABLE語(yǔ)句修改特定數(shù)據(jù)庫(kù)中所有表的權(quán)力?!馡NDEX:給予用戶(hù)在特定數(shù)據(jù)庫(kù)中的所有表上定義和刪除索引的權(quán)力?!馜ROP:給予用戶(hù)刪除特定數(shù)據(jù)庫(kù)中所有表和視圖的權(quán)力。●CREATETEMPORARYTABLES:給予用戶(hù)在特定數(shù)據(jù)庫(kù)中創(chuàng)建臨時(shí)表的權(quán)力?!馛REATEVIEW:給予用戶(hù)在特定數(shù)據(jù)庫(kù)中創(chuàng)建新的視圖的權(quán)力?!馭HOWVIEW:給予用戶(hù)查看特定數(shù)據(jù)庫(kù)中已有視圖的視圖定義的權(quán)力?!馛REATEROUTINE:給予用戶(hù)為特定的數(shù)據(jù)庫(kù)創(chuàng)建存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)等權(quán)力。●ALTERROUTINE:給予用戶(hù)更新和刪除數(shù)據(jù)庫(kù)中已有的存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)等權(quán)力?!馝XECUTEROUTINE:給予用戶(hù)調(diào)用特定數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的權(quán)力?!馤OCKTABLES:給予用戶(hù)鎖定特定數(shù)據(jù)庫(kù)的已有表的權(quán)力?!馎LL或ALLPRIVILEGES:表示以上所有權(quán)限名。在GRANT語(yǔ)法格式中,授予數(shù)據(jù)庫(kù)權(quán)限時(shí)ON關(guān)鍵字后面跟“*”和“db_name.*”?!?”表示當(dāng)前數(shù)據(jù)庫(kù)中的所有表;“db_name.*”表示某個(gè)數(shù)據(jù)庫(kù)中的所有表。數(shù)據(jù)庫(kù)權(quán)限-續(xù)●CREATE:給予用戶(hù)使用CREATE34【例9.8】授予king在XSCJ數(shù)據(jù)庫(kù)中的所有表的SELECT權(quán)限。GRANTSELECTONXSCJ.*TOking@localhostidentifiedby‘123’;說(shuō)明:這個(gè)權(quán)限適用于所有已有的表,以及此后添加到XSCJ數(shù)據(jù)庫(kù)中的任何表?!纠?.8】授予king在XSCJ數(shù)據(jù)庫(kù)中的所有表的SEL35【例9.9】授予king在XSCJ數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)庫(kù)權(quán)限。USEXSCJ;GRANTALLON*TOking@localhost;和表權(quán)限類(lèi)似,授予一個(gè)數(shù)據(jù)庫(kù)權(quán)限也不意味著擁有另一個(gè)權(quán)限。如果用戶(hù)被授予可以創(chuàng)建新表和視圖,但是還不能訪(fǎng)問(wèn)它們。要訪(fǎng)問(wèn)它們,它還需要單獨(dú)被授予SELECT權(quán)限或更多權(quán)限?!纠?.9】授予king在XSCJ數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)庫(kù)權(quán)限36(3)授予用戶(hù)權(quán)限GRANT最有效率的權(quán)限就是用戶(hù)權(quán)限,對(duì)于需要授予數(shù)據(jù)庫(kù)權(quán)限的所有語(yǔ)句,也可以定義在用戶(hù)權(quán)限上。例如,在用戶(hù)級(jí)別上授予某人CREATE權(quán)限,這個(gè)用戶(hù)可以創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),也可以在所有的數(shù)據(jù)庫(kù)(而不是特定的數(shù)據(jù)庫(kù))中創(chuàng)建新表。MySQL授予用戶(hù)權(quán)限時(shí)priv_type還可以是以下值。CREATEUSER:給予用戶(hù)創(chuàng)建和刪除新用戶(hù)的權(quán)力。SHOWDATABASES:給予用戶(hù)使用該語(yǔ)句查看所有已有的數(shù)據(jù)庫(kù)的定義的權(quán)利。(3)授予用戶(hù)權(quán)限GRANT最有效率的權(quán)限就是用戶(hù)權(quán)限,對(duì)于37在GRANT語(yǔ)法格式中,授予用戶(hù)權(quán)限時(shí)ON子句中使用“*.*”,表示所有數(shù)據(jù)庫(kù)的所有表?!纠?.10】授予Peter對(duì)所有數(shù)據(jù)庫(kù)中的所有表的CREATE、ALTERT和DROP權(quán)限。GRANTCREATE,ALTER,DROPON*.*TOPeter@localhostIDENTIFIEDBY'ppwd';在GRANT語(yǔ)法格式中,授予用戶(hù)權(quán)限時(shí)ON子句中使用“*.*38【例9.11】授予Peter創(chuàng)建新用戶(hù)的權(quán)力。GRANTCREATEUSERON*.*TOPeter@localhost;為了概括權(quán)限,表9.1列出了可以在哪些級(jí)別授予某條SQL語(yǔ)句權(quán)限。---教程p172【例9.11】授予Peter創(chuàng)建新用戶(hù)的權(quán)力。399.2.3權(quán)限的轉(zhuǎn)移和限制GRANT語(yǔ)句的最后可以使用WITH子句。如果指定為WITHGRANTOPTION,則表示TO子句中指定的所有用戶(hù)都有把自己所擁有的權(quán)限授予其他用戶(hù)的權(quán)利,而不管其他用戶(hù)是否擁有該權(quán)限。9.2.3權(quán)限的轉(zhuǎn)移和限制GRANT語(yǔ)句的最后可以使用W40【例9.12】授予David在XS表上的SELECT權(quán)限,并允許其將該權(quán)限授予其他用戶(hù)首先在ROOT用戶(hù)下授予David用戶(hù)SELECT權(quán)限:GRANTSELECTONXSCJ.XSTODavid@localhostIDENTIFIEDBY'123456'WITHGRANTOPTION;2.以David用戶(hù)身份登錄MySQL,登錄方式為:(1)打開(kāi)DOS窗口,然后進(jìn)入mysql安裝目錄下的bin目錄,默認(rèn)安裝的路徑為:C:\ProgramFiles\MySQL\MySQLServer5.1\bin。(2)輸入:mysql-hlocalhost-uDavid-p123456。登錄后界面如圖9.1所示?!纠?.12】授予David在XS表上的SELECT權(quán)限,41圖9.1用戶(hù)登錄界面登錄后,David用戶(hù)只有查詢(xún)XSCJ數(shù)據(jù)庫(kù)中XS表的權(quán)利,它可以把這個(gè)權(quán)限傳遞給其他用戶(hù),這里假設(shè)用戶(hù)Jim已經(jīng)創(chuàng)建:GRANTSELECTONXSCJ.XSTOJim@localhost;說(shuō)明:使用了WITHGRANTOPTION子句后,如果David在該表上還擁有其他權(quán)限,他可以將其他權(quán)限也授予Jim而不僅限于SELECT。圖9.1用戶(hù)登錄界面登錄后,David用戶(hù)只有查詢(xún)XSC42MAX_QUERIES_PER_HOURcount表示每小時(shí)可以查詢(xún)數(shù)據(jù)庫(kù)的次數(shù);MAX_CONNECTIONS_PER_HOURcount表示每小時(shí)可以連接數(shù)據(jù)庫(kù)的次數(shù);MAX_UPDATES_PER_HOURcount表示每小時(shí)可以修改數(shù)據(jù)庫(kù)的次數(shù)。MAX_USER_CONNECTIONScount表示同時(shí)連接MySQL的最大用戶(hù)數(shù)。count是一個(gè)數(shù)值,對(duì)于前三個(gè)指定,count如果為0則表示不起限制作用。WITH子句也可以對(duì)一個(gè)用戶(hù)授予使用限制MAX_QUERIES_PER_HOURcount表示每小43【例9.13】授予Jim每小時(shí)只能處理一條SELECT語(yǔ)句的權(quán)限。GRANTSELECTONXSTOJim@localhostWITHMAX_QUERIES_PER_HOUR1;除了MAX_QUERIES_PER_HOUR,還可以指定MAX_CONNECTIONS_PER_HOUR、MAX_UPDATES_PER_HOUR和MAX_USER_CONNECTIONS。對(duì)于前3個(gè)指定,如果值等于0,就沒(méi)有限制會(huì)起作用?!纠?.13】授予Jim每小時(shí)只能處理一條SELECT語(yǔ)句449.2.4回收權(quán)限REVOKE要從一個(gè)用戶(hù)回收權(quán)限,但不從USER表中刪除該用戶(hù),可以使用REVOKE語(yǔ)句,這條語(yǔ)句和GRANT語(yǔ)句格式相似,但具有相反的效果。要使用REVOKE,用戶(hù)必須擁有mysql數(shù)據(jù)庫(kù)的全局CREATEUSER權(quán)限或UPDATE權(quán)限。9.2.4回收權(quán)限REVOKE要從一個(gè)用戶(hù)回收權(quán)限,但不45語(yǔ)法格式:REVOKEpriv_type[(column_list)][,priv_type[(column_list)]]...ON{tbl_name|*|*.*|db_name.*}FROMuser[,user]...或者:REVOKEALLPRIVILEGES,GRANTOPTIONFROMuser[,user]...說(shuō)明:第一種格式用來(lái)回收某些特定的權(quán)限,第二種格式回收所有該用戶(hù)的權(quán)限。語(yǔ)法格式:REVOKEpriv_type[(column46【例9.14】回收用戶(hù)David在XS表上的SELECT權(quán)限。REVOKESELECTONXSFROMDavid@localhost;由于David用戶(hù)對(duì)XS表的SELECT權(quán)限被回收了,那么包括直接或間接地依賴(lài)于它的所有權(quán)限也回收了,在這個(gè)例子中,Jim也失去了對(duì)XS表的SELECT權(quán)限。但以上語(yǔ)句執(zhí)行之后WITHGRANTOPTION還保留,當(dāng)再次授予David對(duì)于同一個(gè)表的表權(quán)限時(shí),它會(huì)立刻把這個(gè)權(quán)限傳遞給Jim?!纠?.14】回收用戶(hù)David在XS表上的SELECT權(quán)47小結(jié)授權(quán)(grant)撤銷(xiāo)授權(quán)(revoke)小結(jié)授權(quán)(grant)48MySQL的權(quán)限系統(tǒng)圍繞著兩個(gè)概念:
認(rèn)證->確定用戶(hù)是否允許連接數(shù)據(jù)庫(kù)服務(wù)器授權(quán)->確定用戶(hù)是否擁有足夠的權(quán)限執(zhí)行查詢(xún)請(qǐng)求等。
如果認(rèn)證不成功的話(huà),哪么授權(quán)肯定是無(wú)法進(jìn)行的。MySQL的權(quán)限系統(tǒng)圍繞著兩個(gè)概念:
認(rèn)證->確定用戶(hù)是否49createuser:創(chuàng)建新的用戶(hù)賬戶(hù),在創(chuàng)建這個(gè)用戶(hù)的時(shí)候不分配任何權(quán)限,
需要在創(chuàng)建之后通過(guò)grant命令來(lái)給改用戶(hù)分配相應(yīng)的權(quán)限。createuseridentifiedby'123456';
grantselectonmydb.*to;dropuser:刪除一個(gè)用戶(hù)賬戶(hù)dropuserguest;renameuser:重命名一個(gè)用戶(hù)賬號(hào)。createuser:創(chuàng)建新的用戶(hù)賬戶(hù),在創(chuàng)建這個(gè)用戶(hù)的50grant:用于管理訪(fǎng)問(wèn)權(quán)限,也就是給用戶(hù)賬號(hào)授權(quán)。當(dāng)然它同樣可以創(chuàng)建一個(gè)新的用戶(hù)賬戶(hù)。eg:grantselect,insert,update,deleteonnew_db.*toidentifiedby'888';grant權(quán)限on數(shù)據(jù)庫(kù).表to用戶(hù)@訪(fǎng)問(wèn)方式identifiedby密碼grantselectonmydb.*toidentifiedby'123';BTW:如果需要一個(gè)空密碼或者無(wú)密碼的賬戶(hù),必須先用CreateUser命令,然后通過(guò)grant來(lái)分配權(quán)限。如果如下操作:grantallprivilegesonmydb.*to;而在數(shù)據(jù)庫(kù)user表中沒(méi)有先創(chuàng)建visitor用戶(hù),則會(huì)發(fā)生1133錯(cuò)誤grant只能創(chuàng)有密碼的賬戶(hù)。revoke:回收一個(gè)賬戶(hù)權(quán)限grant:用于管理訪(fǎng)問(wèn)權(quán)限,也就是給用戶(hù)賬號(hào)授權(quán)。當(dāng)然它同51使用grant命令,可以給一個(gè)用戶(hù)授予如select,insert,update,delete等其中的一個(gè)或者多個(gè)權(quán)限,主要用法格式為:grant權(quán)限on數(shù)據(jù)庫(kù)對(duì)象to用戶(hù)
grant普通數(shù)據(jù)用戶(hù),查詢(xún)、插入、更新、刪除數(shù)據(jù)庫(kù)中所有表數(shù)據(jù)的權(quán)利。
grantselectontestdb.*to
grantinsertontestdb.*to
grantupdateontestdb.*to
grantdeleteontestdb.*to
或者,用一條MySQL命令來(lái)替代:
grantselect,insert,update,deleteontestdb.*to使用grant命令,可以給一個(gè)用戶(hù)授予如select,ins52grant數(shù)據(jù)庫(kù)開(kāi)發(fā)人員,創(chuàng)建表、索引、視圖、存儲(chǔ)過(guò)程、函數(shù)。。。等權(quán)限。grant創(chuàng)建、修改、刪除MySQL數(shù)據(jù)表結(jié)構(gòu)權(quán)限。
grantcreateontestdb.*to;
grantalterontestdb.*to;
grantdropontestdb.*to;
grant操作MySQL外鍵權(quán)限。
grantreferencesontestdb.*to;
grant操作MySQL臨時(shí)表權(quán)限。
grantcreatetemporarytablesontestdb.*to;
grant操作MySQL索引權(quán)限。
grantindexontestdb.*to;
grant操作MySQL視圖、查看視圖源代碼權(quán)限。
grantcreateviewontestdb.*to;
grantshowviewontestdb.*to;
grant操作MySQL存儲(chǔ)過(guò)程、函數(shù)權(quán)限。
grantcreateroutineontestdb.*to;--now,canshowprocedurestatus
grantalterroutineontestdb.*to;--now,youcandropaprocedure
grantexecuteontestdb.*to;grant數(shù)據(jù)庫(kù)開(kāi)發(fā)人員,創(chuàng)建表、索引、視圖、存儲(chǔ)過(guò)程、函53grant普通DBA管理某個(gè)MySQL數(shù)據(jù)庫(kù)的權(quán)限。grantallprivilegesontestdbto
其中,關(guān)鍵字“privileges”可以省略。grant普通DBA管理某個(gè)MySQL數(shù)據(jù)庫(kù)的權(quán)限54grant高級(jí)DBA管理MySQL中所有數(shù)據(jù)庫(kù)的權(quán)限。
grantallon*.*togrant高級(jí)DBA管理MySQL中所有數(shù)據(jù)庫(kù)的權(quán)55grant作用在存儲(chǔ)過(guò)程、函數(shù)上:
grantexecuteonproceduretestdb.pr_addto
grantexecuteonfunctiontestdb.fn_addto注意:修改完權(quán)限以后一定要刷新服務(wù),或者重啟服務(wù),刷新服務(wù)用:FLUSHPRIVILEGESgrant作用在存儲(chǔ)過(guò)程、函數(shù)上:
grantexec56問(wèn)題:如果一個(gè)MYSQL用戶(hù)的全局權(quán)限全都被設(shè)置為N,該用戶(hù)還能創(chuàng)建并編輯一個(gè)名為test的數(shù)據(jù)庫(kù)嗎?問(wèn)題:如果一個(gè)MYSQL用戶(hù)的全局權(quán)限全都被設(shè)置為N,該用戶(hù)57測(cè)試數(shù)據(jù)庫(kù)無(wú)論MYSQL數(shù)據(jù)庫(kù)在哪種環(huán)境下安裝,所有連接到mysql的用戶(hù)都可以創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)庫(kù)。唯一的條件就是數(shù)據(jù)庫(kù)的名字前面必須是以test開(kāi)始。不但所有的mysql用戶(hù)都可以創(chuàng)建這樣的一個(gè)數(shù)據(jù)庫(kù),而且每一個(gè)用戶(hù)都可以讀取、改變和刪除這個(gè)數(shù)據(jù)庫(kù)中的所欲數(shù)據(jù)。任何人都可以將這個(gè)數(shù)據(jù)庫(kù)整個(gè)刪除。即,test數(shù)據(jù)庫(kù)中的數(shù)據(jù)是沒(méi)有任何保護(hù)的。測(cè)試數(shù)據(jù)庫(kù)無(wú)論MYSQL數(shù)據(jù)庫(kù)在哪種環(huán)境下安裝,所有連接到m589.4界面方式操作用戶(hù)與權(quán)限(1)打開(kāi)MySQLAdministrator,以ROOT用戶(hù)登錄。進(jìn)入主界面后單擊UserAdministration欄,界面左下方會(huì)出現(xiàn)MySQL的用戶(hù)列表,如圖9.2所示。圖9.2用戶(hù)列表9.4界面方式操作用戶(hù)與權(quán)限(1)打開(kāi)MySQLAdm59(2)添加用戶(hù)。單擊圖9.2中的Addnewuser按鈕,在UserInformation欄上填寫(xiě)用戶(hù)名tony和密碼,單擊“ApplyChanges”按鈕即可創(chuàng)建新用戶(hù)。隨后,界面左下方的用戶(hù)列表中就會(huì)新添加一個(gè)tony用戶(hù),如圖9.3所示。刪除用戶(hù)的方法很簡(jiǎn)單,右擊用戶(hù)名,選擇“DeleteUser”即可刪除該用戶(hù)。圖9.3創(chuàng)建新用戶(hù)(2)添加用戶(hù)。單擊圖9.2中的Addnewuser按鈕60(3)授予用戶(hù)權(quán)限。以tony用戶(hù)為例,tony用戶(hù)創(chuàng)建完后并沒(méi)有授予其任何權(quán)限,要授予其權(quán)限,步驟為:選擇tony,單擊SchemaPrivileges欄,選擇要授予權(quán)限的數(shù)據(jù)庫(kù),在AvailablePrivileges框中會(huì)出現(xiàn)權(quán)限列表,選擇相應(yīng)權(quán)限,單擊“<”按鈕,AssignedPrivileges中會(huì)出現(xiàn),即可將該權(quán)限授予用戶(hù),如圖9.4所示。要取消權(quán)限,可選擇AssignedPrivileges框中要取消的權(quán)限,單擊“>”按鈕即可?!?lt;<”按鈕是添加所有權(quán)限,“>>”是取消所有權(quán)限。最后單擊“ApplyChanges”按鈕完成用戶(hù)權(quán)限授予。圖9.4授予權(quán)限(3)授予用戶(hù)權(quán)限。以tony用戶(hù)為例,tony用戶(hù)創(chuàng)建完后619.5表維護(hù)語(yǔ)句9.5.1ANALYZETABLE語(yǔ)句在一個(gè)定義了索引的列上,該列上不同值的數(shù)目被稱(chēng)為該索引列的可壓縮性,可以使用SHOWINDEXFROMtb_name語(yǔ)句來(lái)顯示它。一個(gè)索引列的可壓縮性不是自動(dòng)更新的。就是說(shuō),用戶(hù)在某列創(chuàng)建了一個(gè)索引,而該列的可壓縮性是不會(huì)立即計(jì)算出來(lái)的。這時(shí)需要使用ANALYZETABLE語(yǔ)句來(lái)更新它。語(yǔ)法格式:ANALYZE[LOCAL|NO_WRITE_TO_BINLOG]TABLEtbl_name[,tbl_name]...9.5表維護(hù)語(yǔ)句9.5.1ANALYZETABLE62在MySQL上執(zhí)行的所有更新都將寫(xiě)入到一個(gè)二進(jìn)制日志文件中。這里如果直接使用ANALYZETABLE語(yǔ)句,結(jié)果數(shù)據(jù)也會(huì)寫(xiě)入日志文件中。如果指定了NO_ERITE_TO_BINLOG選項(xiàng),則關(guān)閉這個(gè)功能(LOCAL是NO_ERITE_TO_BINLOG的同義詞),這樣ANALYZETABLE語(yǔ)句也將會(huì)更快完成。【例9.15】更新表XS的索引的可壓縮性,并隨后顯示。ANALYZETABLEXS;SHOWINDEXFROMXS;在MySQL上執(zhí)行的所有更新都將寫(xiě)入到一個(gè)二進(jìn)制日志文件中。639.5.2CHECKTABLE語(yǔ)句這條語(yǔ)句用來(lái)檢查一個(gè)或多個(gè)表是否有錯(cuò)誤,只對(duì)MyISAM和InnoDB表起作用。語(yǔ)法格式:CHECKTABLEtbl_name[,tbl_name]...[option]...其中,option為:QUICK|FAST|MEDIUM|EXTENDED|CHANGED說(shuō)明:●QUICK:不掃描行,不檢查錯(cuò)誤的鏈接,這是最快的方法?!馞AST:檢查表是否已經(jīng)正確關(guān)閉?!馛HANGED:檢查上次檢查后被更改的表,以及沒(méi)有被正確關(guān)閉的表?!馦EDIUM:掃描行,以驗(yàn)證被刪除的鏈接是有效的。也可以計(jì)算各行的關(guān)鍵字校驗(yàn)和,并使用計(jì)算出的校驗(yàn)和驗(yàn)證這一點(diǎn)?!馝XTENDED:對(duì)每行的所有關(guān)鍵字進(jìn)行全面的關(guān)鍵字查找。這可以確保表是100%一致的,但是花的時(shí)間較長(zhǎng)。9.5.2CHECKTABLE語(yǔ)句這條語(yǔ)句用來(lái)檢查一個(gè)64【例9.16】檢查XS表是否正確。CHECKTABLEXS;結(jié)果為:【例9.16】檢查XS表是否正確。659.5.3CHECKSUMTABLE語(yǔ)句對(duì)于數(shù)據(jù)庫(kù)中的每一個(gè)表,都可以使用CHECKSUMTABLE語(yǔ)句獲得一個(gè)校驗(yàn)和。語(yǔ)法格式:CHECKSUMTABLEtbl_name[,tbl_name]...[QUICK|EXTENDED]說(shuō)明:如果表是MyISAM表,如果指定了QUICK,則報(bào)告表校驗(yàn)和,否則報(bào)告NULL。指定EXTENDED則表示無(wú)論表是否是MyISAM表,都只計(jì)算檢驗(yàn)和?!纠?.17】獲得表XS的校驗(yàn)和的值。CHECKSUMTABLEXS;結(jié)果為:9.5.3CHECKSUMTABLE語(yǔ)句對(duì)于數(shù)據(jù)庫(kù)中的669.5.4OPTIMIZETABLE語(yǔ)句如果用戶(hù)不斷地使用DELETE、INSERT和UPDATE語(yǔ)句更新一個(gè)表,那么表的內(nèi)部結(jié)構(gòu)就會(huì)出現(xiàn)很多碎片和未利用的空間。這時(shí)可以使用OPTIMIZETABLE語(yǔ)句來(lái)重新利用未使用的空間,并整理數(shù)據(jù)文件的碎片。OPTIMIZETABLE語(yǔ)句只對(duì)MyISAM、BDB和InnoDB表起作用。語(yǔ)法格式:OPTIMIZE[LOCAL|NO_WRITE_TO_BINLOG]TABLEtbl_name[,tbl_name]...【例9.18】?jī)?yōu)化XS表。OPTIMIZETABLEKC;9.5.4OPTIMIZETABLE語(yǔ)句如果用戶(hù)不斷地679.5.5REPAIRTABLE語(yǔ)句如果一個(gè)表或索引已經(jīng)損壞,可以使用REPAIRTABLE語(yǔ)句嘗試修復(fù)它。REPAIRTABLE只對(duì)MyISAM和ARCHIVE表起作用。REPAIR[LOCAL|NO_WRITE_TO_BINLOG]TABLEtbl_name[,tbl_name]...[QUICK][EXTENDED][USE_FRM]說(shuō)明:REPAIRTABLE語(yǔ)句支持以下選項(xiàng):●QUICK:如果指定了該選項(xiàng),則REPAIRTABLE會(huì)嘗試只修復(fù)索引樹(shù)。●EXTENDED:使用該選項(xiàng),則MySQL會(huì)一行一行地創(chuàng)建索引行,代替使用分類(lèi)一次創(chuàng)建一個(gè)索引?!馯SE_FRM:如果MYI索引文件缺失或標(biāo)題被破壞,則必須使用此選項(xiàng)。9.5.5REPAIRTABLE語(yǔ)句如果一個(gè)表或索引已68另外,還有兩個(gè)表維護(hù)語(yǔ)句:BACKUPTABLE和RESTORETABLE語(yǔ)句。使用BACKUPTABLE語(yǔ)句可以對(duì)一個(gè)或多個(gè)MyISAM表備份。語(yǔ)法格式為:BACKUPTABLEtbl_name[,tbl_name]...TO'/path/to/backup/directory'使用RESTORETABLE語(yǔ)句可以獲取BACKUPTABLE創(chuàng)建的一個(gè)或多個(gè)表的備份,將數(shù)據(jù)讀取到數(shù)據(jù)庫(kù)中。語(yǔ)法格式為:RESTORETABLEtbl_name[,tbl_name]...FROM'/path/to/backup/directory'但是這兩條語(yǔ)句不是很理想,已經(jīng)不推薦使用了,這里只是大概了解一下。另外,還有兩個(gè)表維護(hù)語(yǔ)句:BACKUPTABLE和REST69第9章用戶(hù)和數(shù)據(jù)安全性9.1添加和刪除用戶(hù)9.2授予權(quán)限和回收權(quán)限9.3界面方式操作用戶(hù)與權(quán)限9.4表維護(hù)語(yǔ)句第9章用戶(hù)和數(shù)據(jù)安全性9.1添加和刪除用戶(hù)9.2709.1添加和刪除用戶(hù)9.1.4修改密碼9.1.2刪除用戶(hù)9.1.3修改用戶(hù)名9.1.1添加用戶(hù)9.1.2刪除用戶(hù)9.1.1添加用戶(hù)9.1.3修改用戶(hù)名9.1.2刪除用戶(hù)9.1.1添加用戶(hù)9.1添加和刪除用戶(hù)9.1.4修改密碼9.1.2719.1.1添加用戶(hù)可用CREATEUSER語(yǔ)法添加一個(gè)或多個(gè)用戶(hù),并設(shè)置相應(yīng)的密碼。語(yǔ)法格式:CREATEUSERuser[IDENTIFIEDBY[PASSWORD]'password'][,userDENTIFIEDBY[PASSWORD]'password']]...說(shuō)明:user的格式為:'user_name'@'hostname'user_name為用戶(hù)名,host_name為主機(jī)名,password為該用戶(hù)的密碼。IDENTIFIEDBY子句,為賬戶(hù)給定一個(gè)密碼。特別是要在純文本中指定密碼,需忽略PASSWORD關(guān)鍵詞。如果不想以明文發(fā)送密碼,而且知道PASSWORD()函數(shù)返回給密碼的混編值,則可以指定該混編值,但要加關(guān)鍵字PASSWORD。CREATEUSER用于創(chuàng)建新的MySQL賬戶(hù)。CREATEUSER會(huì)在系統(tǒng)本身的mysql數(shù)據(jù)庫(kù)的user表中添加一個(gè)新記錄。要使用CREATEUSER,必須擁有mysql數(shù)據(jù)庫(kù)的全局CREATEUSER權(quán)限或INSERT權(quán)限。如果賬戶(hù)已經(jīng)存在,則出現(xiàn)錯(cuò)誤。9.1.1添加用戶(hù)可用CREATEUSER語(yǔ)法添加一個(gè)72用戶(hù)名和localhost可以不加引號(hào),但密碼得加單引號(hào)或雙引號(hào)【例9.1】添加兩個(gè)新的用戶(hù),king的密碼為queen,palo的密碼為530415。CREATEUSER'king'@'localhost‘IDENTIFIEDBY'queen','palo'@'localhost'IDENTIFIEDBY'530415';用戶(hù)名和localhost可以不加引號(hào),但密碼得加單引號(hào)或73說(shuō)明:localhost指定了用戶(hù)創(chuàng)建的使用MySQL的連接所來(lái)自的主機(jī)。如果一個(gè)用戶(hù)名和主機(jī)名中包含特殊符號(hào)如“_”,或通配符如“%”,則需要用單引號(hào)將其括起?!?”表示一組主機(jī)。如果兩個(gè)用戶(hù)具有相同的用戶(hù)名但主機(jī)不同,MySQL將其視為不同的用戶(hù),允許為這兩個(gè)用戶(hù)分配不同的權(quán)限集合。如果沒(méi)有輸入密碼,那么MySQL允許相關(guān)的用戶(hù)不使用密碼登錄。但是從安全的角度并不推薦這種做法。剛剛創(chuàng)建的用戶(hù)還沒(méi)有很多權(quán)限。它們可以登錄到MySQL,但是它們不能使用USE語(yǔ)句來(lái)讓用戶(hù)已經(jīng)創(chuàng)建的任何數(shù)據(jù)庫(kù)成為當(dāng)前數(shù)據(jù)庫(kù),因此,它們無(wú)法訪(fǎng)問(wèn)那些數(shù)據(jù)庫(kù)的表,只允許進(jìn)行不需要權(quán)限的操作,例如,用一條SHOW語(yǔ)句查詢(xún)所有存儲(chǔ)引擎和字符集的列表。說(shuō)明:localhost指定了用戶(hù)創(chuàng)建的使用MySQL的連接749.1.2刪除用戶(hù)語(yǔ)法格式:DROPUSERuser[,user_name]...DROPUSER語(yǔ)句用于刪除一個(gè)或多個(gè)MySQL賬戶(hù),并取消其權(quán)限。要使用DROPUSER,必須擁有mysql數(shù)據(jù)庫(kù)的全局CREATEUSER權(quán)限或DELETE權(quán)限。9.1.2刪除用戶(hù)語(yǔ)法格式:75【例9.2】刪除用戶(hù)TOM。
DROPUSERTOM@localhost;如果刪除的用戶(hù)已經(jīng)創(chuàng)建了表、索引或其他的數(shù)據(jù)庫(kù)對(duì)象,它們將繼續(xù)保留,因?yàn)镸ySQL并沒(méi)有記錄是誰(shuí)創(chuàng)建了這些對(duì)象?!纠?.2】刪除用戶(hù)TOM。769.1.3修改用戶(hù)名修改一個(gè)已經(jīng)存在的SQL用戶(hù)的名字。語(yǔ)法格式:RENAMEUSERold_userTOnew_user,[,old_userTOnew_user]...說(shuō)明:old_user為已經(jīng)存在的SQL用戶(hù)。new_user為新的SQL用戶(hù)。RENAMEUSER語(yǔ)句用于對(duì)原有MySQL賬戶(hù)進(jìn)行重命名。使用該語(yǔ)句,必須擁有全局CREATEUSER權(quán)限或mysql數(shù)據(jù)庫(kù)UPDATE權(quán)限。如果舊賬戶(hù)不存在或者新賬戶(hù)已存在,則會(huì)出現(xiàn)錯(cuò)誤。9.1.3修改用戶(hù)名修改一個(gè)已經(jīng)存在的SQL用戶(hù)的名字。77【例9.3】將用戶(hù)king1和king2的名字分別修改為ken1和ken2。RENAMEUSER
'king1'@'localhost'TO'ken1'@'localhost','king2'@'localhost'TO'ken2'@'localhost';【例9.3】將用戶(hù)king1和king2的名字分別修改為k789.1.4修改密碼修改某個(gè)用戶(hù)的登錄密碼,語(yǔ)法格式:SETPASSWORD[FORuser]=
PASSWORD('newpassword')說(shuō)明:如果不加FORuser,表示修改當(dāng)前用戶(hù)的密碼。加了FORuser則是修改當(dāng)前主機(jī)上的特定用戶(hù)的密碼,user為用戶(hù)名。user的值必須以'user_name'@'host_name'的格式給定。9.1.4修改密碼修改某個(gè)用戶(hù)的登錄密碼,語(yǔ)法格式:79【例9.4】將用戶(hù)king的密碼修改為queen1。SETPASSWORDFOR'king'@'localhost'=PASSWORD('queen1');【例9.4】將用戶(hù)king的密碼修改為queen1。SET809.2授予權(quán)限和回收權(quán)限9.2.1兩級(jí)訪(fǎng)問(wèn)控制9.2.2授予權(quán)限9.2.3權(quán)限的轉(zhuǎn)移和限制9.2.4回收權(quán)限9.2授予權(quán)限和回收權(quán)限9.2.1兩級(jí)訪(fǎng)問(wèn)控制819.2.1兩級(jí)訪(fǎng)問(wèn)控制通常情況下,建立一個(gè)數(shù)據(jù)庫(kù)以后,并不是所有的人都可以看到數(shù)據(jù)庫(kù)里的所有數(shù)據(jù)(無(wú)論是修改還是刪除)。為了保護(hù)數(shù)據(jù)不被探查或未經(jīng)授權(quán)的篡改,MySQL采用了一種雙層的訪(fǎng)問(wèn)控制機(jī)制。第一層用來(lái)檢查各位用戶(hù)是否有權(quán)與MySQL進(jìn)行通信。第二層用來(lái)檢查各位用戶(hù)都有權(quán)對(duì)哪些數(shù)據(jù)庫(kù)、數(shù)據(jù)表和數(shù)據(jù)列進(jìn)行哪些操作。9.2.1兩級(jí)訪(fǎng)問(wèn)控制通常情況下,建立一個(gè)數(shù)據(jù)庫(kù)以后,并不82只有在建立連接的檢查完成以后,第二階段的訪(fǎng)問(wèn)控制才開(kāi)始實(shí)施,這種控制細(xì)化到每一條數(shù)據(jù)庫(kù)命令。例如,要執(zhí)行一個(gè)SELECT命令,MySQL會(huì)檢查該用戶(hù)對(duì)數(shù)據(jù)庫(kù)、數(shù)據(jù)表和數(shù)據(jù)列是否具有執(zhí)行這個(gè)命令的權(quán)限。要執(zhí)行一個(gè)INSERT命令,那么MYSQL要檢查是否允許該用戶(hù)改變數(shù)據(jù)庫(kù)、數(shù)據(jù)表直到數(shù)據(jù)列的內(nèi)容。只有在建立連接的檢查完成以后,第二階段的訪(fǎng)問(wèn)控制才開(kāi)始實(shí)施,83MYSQL是如何管理哪個(gè)命令可以執(zhí)行這樣的信息呢?MYSQL使用存儲(chǔ)著privileges的數(shù)據(jù)表進(jìn)行管理的。如果一個(gè)用戶(hù)auser,具有對(duì)數(shù)據(jù)庫(kù)cxdb1的select權(quán)限,那么該用戶(hù)就可以讀取cxdb1中的所有數(shù)據(jù)。如果該用戶(hù)具有全局的select權(quán)限,該用戶(hù)就可以讀取所有存儲(chǔ)于MYSQL的數(shù)據(jù)庫(kù)。MYSQL是如何管理哪個(gè)命令可以執(zhí)行這樣的信息呢?MYSQL84訪(fǎng)問(wèn)權(quán)限系統(tǒng)在設(shè)置訪(fǎng)問(wèn)權(quán)限的時(shí)候,MYSQL提供了一個(gè)準(zhǔn)確、相互銜接的系統(tǒng),在MYSQL文檔中,這個(gè)系統(tǒng)被稱(chēng)為訪(fǎng)問(wèn)權(quán)限系統(tǒng)(accessprivilegesystem),這個(gè)系統(tǒng)里的各個(gè)列表被稱(chēng)為訪(fǎng)問(wèn)控制表ACL。訪(fǎng)問(wèn)權(quán)限系統(tǒng)在設(shè)置訪(fǎng)問(wèn)權(quán)限的時(shí)候,MYSQL提供了一個(gè)準(zhǔn)確、85設(shè)置訪(fǎng)問(wèn)權(quán)限的方式以圖形用戶(hù)界面使用管理程序-最簡(jiǎn)單方便使用INSERT和UPDATE命令直接改變MYSQL使用SQL的命令GRANT和REVOKE。使用Perl腳本程序mysql_setpermission.pl。當(dāng)然,它假設(shè)用戶(hù)安裝并運(yùn)行著Perl。設(shè)置訪(fǎng)問(wèn)權(quán)限的方式以圖形用戶(hù)界面使用管理程序-最簡(jiǎn)單方便86Mysql數(shù)據(jù)庫(kù)由MySQL管理的訪(fǎng)問(wèn)權(quán)限是依靠數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)的,這個(gè)數(shù)據(jù)庫(kù)的名字叫mysql,它由幾個(gè)數(shù)據(jù)表組成,對(duì)應(yīng)著訪(fǎng)問(wèn)權(quán)限的各個(gè)方面。Mysql數(shù)據(jù)庫(kù)由MySQL管理的訪(fǎng)問(wèn)權(quán)限是依靠數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)87數(shù)據(jù)庫(kù)mysql的數(shù)據(jù)表數(shù)據(jù)庫(kù)mysql的數(shù)據(jù)表88Mysql第9章用戶(hù)和數(shù)據(jù)安全性課件89舉例:假定一個(gè)MYSQL用戶(hù)zeuse只能讀取某個(gè)數(shù)據(jù)表的數(shù)據(jù)列,除此之外沒(méi)其他任何權(quán)限。Zeuse(包括用戶(hù)名,主機(jī)名,密碼)必須被輸入到user數(shù)據(jù)表里。Zeuse的所有全局權(quán)限都必須設(shè)置為NZeuse(包括用戶(hù)名,主機(jī)名)還必須要在columns_priv數(shù)據(jù)表中注冊(cè)。在columns_priv數(shù)據(jù)表中,還必須設(shè)定都允許Zeuse訪(fǎng)問(wèn)哪個(gè)數(shù)據(jù)列(數(shù)據(jù)庫(kù)名,數(shù)據(jù)表名,數(shù)據(jù)列名)Select權(quán)限(僅)必須要激活。舉例:假定一個(gè)MYSQL用戶(hù)zeuse只能讀取某個(gè)數(shù)據(jù)表的數(shù)90當(dāng)相應(yīng)等級(jí)的權(quán)限設(shè)置為N時(shí),數(shù)據(jù)表db,host,table_priv,columns_priv以這個(gè)順序依次實(shí)施。即:如果select權(quán)限賦予了user數(shù)據(jù)表中的一個(gè)用戶(hù),那么其他的4個(gè)數(shù)據(jù)表就不再用于檢查這個(gè)用戶(hù)是否允許執(zhí)行SELECT命令。所以,要想對(duì)訪(fǎng)問(wèn)權(quán)限進(jìn)行精確的區(qū)別,就必須把user數(shù)據(jù)表里的全局權(quán)限全部設(shè)置為N.當(dāng)相應(yīng)等級(jí)的權(quán)限設(shè)置為N時(shí),數(shù)據(jù)表db,host,table919.2.2授予權(quán)限新的SQL用戶(hù)不允許訪(fǎng)問(wèn)屬于其他SQL用戶(hù)的表,也不能立即創(chuàng)建自己的表,它必須被授權(quán)。權(quán)限有以下幾組。(1)列權(quán)限:和表中的一個(gè)具體列相關(guān)。例如,使用UPDATE語(yǔ)句更新表XS學(xué)號(hào)列的值的權(quán)限。(2)表權(quán)限:和一個(gè)具體表中的所有數(shù)據(jù)相關(guān)。例如,使用SELECT語(yǔ)句查詢(xún)表XS的所有數(shù)據(jù)的權(quán)限。(3)數(shù)據(jù)庫(kù)權(quán)限:和一個(gè)具體的數(shù)據(jù)庫(kù)中的所有表相關(guān)。例如,在已有的XSCJ數(shù)據(jù)庫(kù)中創(chuàng)建新表的權(quán)限。(4)用戶(hù)權(quán)限:和MySQL所有的數(shù)據(jù)庫(kù)相關(guān)。例如,刪除已有的數(shù)據(jù)庫(kù)或者創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)的權(quán)限。9.2.2授予權(quán)限新的SQL用戶(hù)不允許訪(fǎng)問(wèn)屬于其他SQL92使用GRANT語(yǔ)句可以給某用戶(hù)授予權(quán)限。Grant可以把指定的權(quán)限分配給特定的用戶(hù),如果這個(gè)用戶(hù)不存在,則會(huì)創(chuàng)建一個(gè)用戶(hù)。使用SHOWGRANTS語(yǔ)句可以查看當(dāng)前賬戶(hù)擁有什么權(quán)限。使用GRANT語(yǔ)句可以給某用戶(hù)授予權(quán)限。93
Grant常用格式:其中,權(quán)限1,權(quán)限2,…權(quán)限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個(gè)權(quán)限。
當(dāng)權(quán)限1,權(quán)限2,…權(quán)限n被allprivileges或者all代替,表示賦予用戶(hù)全部權(quán)限。
當(dāng)數(shù)據(jù)庫(kù)名稱(chēng).表名稱(chēng)被*.*代替,表示賦予用戶(hù)操作服務(wù)器上所有數(shù)據(jù)庫(kù)所有表的權(quán)限。
用戶(hù)地址可以是localhost,也可以是ip地址、機(jī)器名字、域名。也可以用’%'表示從任何地址連接。
‘連接口令’不能為空,否則創(chuàng)建失敗。grant權(quán)限1,權(quán)限2,…權(quán)限non數(shù)據(jù)庫(kù)名.表名to用戶(hù)名@用戶(hù)地址identifiedby‘口令’;
Grant常用格式:grant權(quán)限1,權(quán)限2,…權(quán)限n94授予權(quán)限的類(lèi)型(1)授予表權(quán)限和列權(quán)限(2)授予數(shù)據(jù)庫(kù)權(quán)限(3)授予用戶(hù)權(quán)限授予權(quán)限的類(lèi)型(1)授予表權(quán)限和列權(quán)限95(1)授予表權(quán)限和列權(quán)限
授予表權(quán)限時(shí),權(quán)限1,權(quán)限2,…權(quán)限n可以是:●SELECT:給予用戶(hù)使用SELECT語(yǔ)句訪(fǎng)問(wèn)特定的表的權(quán)力。用戶(hù)也可以在一個(gè)視圖公式中包含表。然而,用戶(hù)必須對(duì)視圖公式中指定的每個(gè)表(或視圖)都有SELECT權(quán)限?!馡NSERT:給予用戶(hù)使用INSERT語(yǔ)句向一個(gè)特定表中添加行的權(quán)力?!馜ELETE:給予用戶(hù)使用DELETE語(yǔ)句向一個(gè)特定表中刪除行的權(quán)力?!馯PDATE:給予用戶(hù)使用UPDATE語(yǔ)句修改特定表中值的權(quán)力。(1)授予表權(quán)限和列權(quán)限授予表權(quán)限時(shí),96授予表權(quán)限-續(xù)●REFERENCES:給予用戶(hù)創(chuàng)建一個(gè)外鍵來(lái)參照特定的表的權(quán)力。●CREATE:給予用戶(hù)使用特定的名字創(chuàng)建一個(gè)表的權(quán)力?!馎LTER:給予用戶(hù)使用ALTERTABLE語(yǔ)句修改表的權(quán)力?!馡NDEX:給予用戶(hù)在表上定義索引的權(quán)力。●DROP:給予用戶(hù)刪除表的權(quán)力。●ALL或ALLPRIVILEGES:表示所有權(quán)限名。授予表權(quán)限-續(xù)●REFERENCES:給予用戶(hù)創(chuàng)建一個(gè)外鍵97【例9.5】授予用戶(hù)king在xscj.XS表上的SELECT權(quán)限。
USEXSCJ;GRANTSELECTONXSTOking@localhost;說(shuō)明:這里假設(shè)是在ROOT用戶(hù)中輸入了這些語(yǔ)句,這樣用戶(hù)king就可以使用SELECT語(yǔ)句來(lái)查詢(xún)XS表,而不管是誰(shuí)創(chuàng)建的這個(gè)表。若在TO子句中給存在的用戶(hù)指定密碼,則新密碼將原密碼覆蓋。如果權(quán)限授予了一個(gè)不存在的用戶(hù),MySQL會(huì)自動(dòng)執(zhí)行一條CREATEUSER語(yǔ)句來(lái)創(chuàng)建這個(gè)用戶(hù),但必須為該用戶(hù)指定密碼。【例9.5】授予用戶(hù)king在xscj.XS表上的SELE98USEXSCJ;GRANTSELECT,UPDATEONXSTOliu@localhostIDENTIFIEDBY'LPWD',zhang@localhostIDENTIFIEDBY'ZPWD';【例9.6】用戶(hù)liu和zhang不存在,授予它們?cè)赬S表上的SELECT和UPDATE權(quán)限。USEXSCJ;【例9.6】用戶(hù)liu和zhang不存99授予列權(quán)限時(shí):權(quán)限只能取SELECT、INSERT和UPDATE。權(quán)限值的后面需要加上列名。授予列權(quán)限時(shí):權(quán)限只能取SELECT、INSERT和UPDA100【例9.7】授予king在XS表上的學(xué)號(hào)列和姓名列的UPDATE權(quán)限。GRANTUPDATE(姓名,學(xué)號(hào))ONXSTOking@localhost;【例9.7】授予king在XS表上的學(xué)號(hào)列和姓名列的UPD101(2)授予數(shù)據(jù)庫(kù)權(quán)限例如,在一個(gè)特定的數(shù)據(jù)庫(kù)中創(chuàng)建表和視圖的權(quán)限。授予數(shù)據(jù)庫(kù)權(quán)限時(shí),priv_type可以是以下值:●SELECT:給予用戶(hù)使用SELECT語(yǔ)句訪(fǎng)問(wèn)特定數(shù)據(jù)庫(kù)中所有表和視圖的權(quán)力?!馡NSERT:給予用戶(hù)使用INSERT語(yǔ)句向特定數(shù)據(jù)庫(kù)中所有表添加行的權(quán)力?!馜ELETE:給予用戶(hù)使用DELETE語(yǔ)句刪除特定數(shù)據(jù)庫(kù)中所有表的行的權(quán)力。●UPDATE:給予用戶(hù)使用UPDATE語(yǔ)句更新特定數(shù)據(jù)庫(kù)中所有表的值的權(quán)力。●REFERENCES:給予用戶(hù)創(chuàng)建指向特定的數(shù)據(jù)庫(kù)中的表外鍵的權(quán)力。(2)授予數(shù)據(jù)庫(kù)權(quán)限例如,在一個(gè)特定的數(shù)據(jù)庫(kù)中創(chuàng)建表和視圖的102數(shù)據(jù)庫(kù)權(quán)限-續(xù)●CREATE:給予用戶(hù)使用CREATETABLE語(yǔ)句在特定數(shù)據(jù)庫(kù)中創(chuàng)建新表的權(quán)力。●ALTER:給予用戶(hù)使用ALTERTABLE語(yǔ)句修改特定數(shù)據(jù)庫(kù)中所有表的權(quán)力?!馡NDEX:給予用戶(hù)在特定數(shù)據(jù)庫(kù)中的所有表上定義和刪除索引的權(quán)力?!馜ROP:給予用戶(hù)刪除特定數(shù)據(jù)庫(kù)中所有表和視圖的權(quán)力?!馛REATETEMPORARYTABLES:給予用戶(hù)在特定數(shù)據(jù)庫(kù)中創(chuàng)建臨時(shí)表的權(quán)力?!馛REATEVIEW:給予用戶(hù)在特定數(shù)據(jù)庫(kù)中創(chuàng)建新的視圖的權(quán)力?!馭HOWVIEW:給予用戶(hù)查看特定數(shù)據(jù)庫(kù)中已有視圖的視圖定義的權(quán)力。●CREATEROUTINE:給予用戶(hù)為特定的數(shù)據(jù)庫(kù)創(chuàng)建存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)等權(quán)力?!馎LTERROUTINE:給予用戶(hù)更新和刪除數(shù)據(jù)庫(kù)中已有的存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)等權(quán)力?!馝XECUTEROUTINE:給予用戶(hù)調(diào)用特定數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的權(quán)力?!馤OCKTABLES:給予用戶(hù)鎖定特定數(shù)據(jù)庫(kù)的已有表的權(quán)力?!馎LL或ALLPRIVILEGES:表示以上所有權(quán)限名。在GRANT語(yǔ)法格式中,授予數(shù)據(jù)庫(kù)權(quán)限時(shí)ON關(guān)鍵字后面跟“*”和“db_name.*”?!?”表示當(dāng)前數(shù)據(jù)庫(kù)中的所有表;“db_name.*”表示某個(gè)數(shù)據(jù)庫(kù)中的所有表。數(shù)據(jù)庫(kù)權(quán)限-續(xù)●CREATE:給予用戶(hù)使用CREATE103【例9.8】授予king在XSCJ數(shù)據(jù)庫(kù)中的所有表的SELECT權(quán)限。GRANTSELECTONXSCJ.*TOking@localhostidentifiedby‘123’;說(shuō)明:這個(gè)權(quán)限適用于所有已有的表,以及此后添加到XSCJ數(shù)據(jù)庫(kù)中的任何表?!纠?.8】授予king在XSCJ數(shù)據(jù)庫(kù)中的所有表的SEL104【例9.9】授予king在XSCJ數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)庫(kù)權(quán)限。USEXSCJ;GRANTALLON*TOking@localhost;和表權(quán)限類(lèi)似,授予一個(gè)數(shù)據(jù)庫(kù)權(quán)限也不意味著擁有另一個(gè)權(quán)限。如果用戶(hù)被授予可以創(chuàng)建新表和視圖,但是還不能訪(fǎng)問(wèn)它們。要訪(fǎng)問(wèn)它們,它還需要單獨(dú)被授予SELECT權(quán)限或更多權(quán)限?!纠?.9】授予king在XSCJ數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)庫(kù)權(quán)限105(3)授予用戶(hù)權(quán)限GRANT最有效率的權(quán)限就是用戶(hù)權(quán)限,對(duì)于需要授予數(shù)據(jù)庫(kù)權(quán)限的所有語(yǔ)句,也可以定義在用戶(hù)權(quán)限上。例如,在用戶(hù)級(jí)別上授予某人CREATE權(quán)限,這個(gè)用戶(hù)可以創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),也可以在所有的數(shù)據(jù)庫(kù)(而不是特定的數(shù)據(jù)庫(kù))中創(chuàng)建新表。MySQL授予用戶(hù)權(quán)限時(shí)priv_type還可以是以下值。CREATEUSER:給予用戶(hù)創(chuàng)建和刪除新用戶(hù)的權(quán)力。SHOWDATABASES:給予用戶(hù)使用該語(yǔ)句查看所有已有的數(shù)據(jù)庫(kù)的定義的權(quán)利。(3)授予用戶(hù)權(quán)限GRANT最有效率的權(quán)限就是用戶(hù)權(quán)限,對(duì)于106在GRANT語(yǔ)法格式中,授予用戶(hù)權(quán)限時(shí)ON子句中使用“*.*”,表示所有數(shù)據(jù)庫(kù)的所有表?!纠?.10】授予Peter對(duì)所有數(shù)據(jù)庫(kù)中的所有表的CREATE、ALTERT和DROP權(quán)限。GRANTCREATE,ALTER,DROPON*.*TOPeter@localhostIDENTIFIEDBY'ppwd';在GRANT語(yǔ)法格式中,授予用戶(hù)權(quán)限時(shí)ON子句中使用“*.*107【例9.11】授予Peter創(chuàng)建新用戶(hù)的權(quán)力。GRANTCREATEUSERON*.*TOPeter@localhost;為了概括權(quán)限,表9.1列出了可以在哪些級(jí)別授予某條SQL語(yǔ)句權(quán)限。---教程p172【例9.11】授予Peter創(chuàng)建新用戶(hù)的權(quán)力。1089.2.3權(quán)限的轉(zhuǎn)移和限制GRANT語(yǔ)句的最后可以使用WITH子句。如果指定為WITHGRANTOPTION,則表示TO子句中指定的所有用戶(hù)都有把自己所擁有的權(quán)限授予其他用戶(hù)的權(quán)利,而不管其他用戶(hù)是否擁有該權(quán)限。9.2.3權(quán)限的轉(zhuǎn)移和限制GRANT語(yǔ)句的最后可以使用W109【例9.12】授予David在XS表上的SELECT權(quán)限,并允許其將該權(quán)限授予其他用戶(hù)首先在ROOT用戶(hù)下授予David用戶(hù)SELECT權(quán)限:GRANTSELECTONXSCJ.XSTODavid@localhostIDENTIFIEDBY'123456'WITHGRANTOPTION;2.以David用戶(hù)身份登錄MySQL,登錄方式為:(1)打開(kāi)DOS窗口,然后進(jìn)入mysql安裝目錄下的bin目錄,默認(rèn)安裝的路徑為:C:\ProgramFiles\MySQL\MySQLServer5.1\bin。(2)輸入:mysql-hlocalhost-uDavid-p123456。登錄后界面如圖9.1所示?!纠?.12】授予David在XS表上的SELECT權(quán)限,110圖9.1用戶(hù)登錄界面登錄后,David用戶(hù)只有查詢(xún)XSCJ數(shù)據(jù)庫(kù)中XS表的權(quán)利,它可以把這個(gè)權(quán)限傳遞給其他用戶(hù),這里假設(shè)用戶(hù)Jim已經(jīng)創(chuàng)建:GRANTSELECTONXSCJ.XSTOJim@localhost;說(shuō)明:使用了WITHGRANTOPTION子句后,如果David在該表上還擁有其他權(quán)限,他可以將其他權(quán)限也授予Jim而不僅限于SELECT。圖9.1用戶(hù)登錄界面登錄后,David用戶(hù)只有查詢(xún)XSC111MAX_QUERIES_PER_HOURcount表示每小時(shí)可以查詢(xún)數(shù)據(jù)庫(kù)的次數(shù);MAX_CONNECTIONS_PER_HOURcount表示每小時(shí)可以連接數(shù)據(jù)庫(kù)的次數(shù);MAX_UPDATES_PER_HOURcount表示每小時(shí)可以修改數(shù)據(jù)庫(kù)的次數(shù)。MAX_USER_CONNECTIONScount表示同時(shí)連接MySQL的最大用戶(hù)數(shù)。count是一個(gè)數(shù)值,對(duì)于前三個(gè)指定,count如果為0則表示不起限制作用。WITH子句也可以對(duì)一個(gè)用戶(hù)授予使用限制MAX_QUERIES_PER_HOURcount表示每小112【例9.13】授予Jim每小時(shí)只能處理一條SELECT語(yǔ)句的權(quán)限。GRANTSELECTONXSTOJim@localhostWITHMAX_QUERIES_PER_HOUR1;除了MAX_QUERIES_PER_HOUR,還可以指定MAX_CONNECTIONS_PER_HOUR、MAX_UPDATES_PER_HOUR和MAX_USER_CONNECTIONS。對(duì)于前3個(gè)指定,如果值等于0,就沒(méi)有限制會(huì)起作用?!纠?.13】授予Jim每小時(shí)只能處理一條SELECT語(yǔ)句1139.2.4回收權(quán)限REVOKE要從一個(gè)用戶(hù)回收權(quán)限,但不從USER表中刪除該用戶(hù),可以使用REVOKE語(yǔ)句,這條語(yǔ)句和GRANT語(yǔ)句格式相似,但具有相反的效果。要使用REVOKE,用戶(hù)必須擁有mysql數(shù)據(jù)庫(kù)的全局CREATEUSER權(quán)限或UPDATE權(quán)限。9.2.4回收權(quán)限REVOKE要從一個(gè)用戶(hù)回收權(quán)限,但不114語(yǔ)法格式:REVOKEpriv_type[(column_list)][,priv_type[(column_list)]]...ON{tbl_name|*|*.*|db_name.*}FROMuser[,user]...或者:REVOKEALLPRIVILEGES,GRANTOPTIONFROMuser[,user]...說(shuō)明:第一種格式用來(lái)回收某些特定的權(quán)限,第二種格式回收所有該用戶(hù)的權(quán)限。語(yǔ)法格式:REVOKEpriv_type[(column115【例9.14】回收用戶(hù)David在XS表上的SELECT權(quán)限。REVOKESELECTONXSFROMDavid@localhost;由于David用戶(hù)對(duì)XS表的SELECT權(quán)限被回收了,那么包括直接或間接地依賴(lài)于它的所有權(quán)限也回收了,在這個(gè)例子中,Jim也失去了對(duì)XS表的SELECT權(quán)限。但以上語(yǔ)句執(zhí)行之后WITHGRANTOPTION還保留,當(dāng)再次授予David對(duì)于同一個(gè)表的表權(quán)限時(shí),它會(huì)立刻把這個(gè)權(quán)限傳遞給Jim。【例9.14】回收用戶(hù)David在XS表上的SELECT權(quán)116小結(jié)授權(quán)(grant)撤銷(xiāo)授權(quán)(revoke)小結(jié)授權(quán)(grant)117MySQL的權(quán)限系統(tǒng)圍繞著兩個(gè)概念:
認(rèn)證->確定用戶(hù)是否允許連接數(shù)據(jù)庫(kù)服務(wù)器授權(quán)->確定用戶(hù)是否擁有足夠的權(quán)限執(zhí)行查詢(xún)請(qǐng)求等。
如果認(rèn)證不成功的話(huà),哪么授權(quán)肯定是無(wú)法進(jìn)行的。MySQL的權(quán)限系統(tǒng)圍繞著兩個(gè)概念:
認(rèn)證->確定用戶(hù)是否118createuser:創(chuàng)建新的用戶(hù)賬戶(hù),在創(chuàng)建這個(gè)用戶(hù)的時(shí)候不分配任何權(quán)限,
需要在創(chuàng)建之后通過(guò)grant命令來(lái)給改用戶(hù)分配相應(yīng)的權(quán)限。createuseridentifiedby'123456';
grantselectonmydb.*to;dropuser:刪除一個(gè)用戶(hù)賬戶(hù)dropuserguest;renameuser:重命名一個(gè)用戶(hù)賬號(hào)。createuser:創(chuàng)建新的用戶(hù)賬戶(hù),在創(chuàng)建這個(gè)用戶(hù)的119grant:用于管理訪(fǎng)問(wèn)權(quán)限,也就是給用戶(hù)賬號(hào)授權(quán)。當(dāng)然它同樣可以創(chuàng)建一個(gè)新的用戶(hù)賬戶(hù)。eg:grantselect,insert,update,deleteonnew_db.*toidentifiedby'888';grant權(quán)限on數(shù)據(jù)庫(kù).表to用戶(hù)@訪(fǎng)問(wèn)方式identifiedby密碼grantselectonmydb.*toidentifiedby'123';BTW:如果需要一個(gè)空密碼或者無(wú)密碼的賬戶(hù),必須先用CreateUser命令,然后通過(guò)grant來(lái)分配權(quán)限。如果如下操作:grant
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 老年人健康宣傳
- 健康維持生命課件
- 健康素養(yǎng)課件百度
- 廣西來(lái)賓市高考數(shù)學(xué)試卷
- 健康管理學(xué)課件
- 【可行性報(bào)告】2025年服務(wù)器相關(guān)項(xiàng)目可行性研究報(bào)告
- 2025年中國(guó)玻璃感應(yīng)門(mén)行業(yè)市場(chǎng)調(diào)查研究及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 預(yù)精軋機(jī)行業(yè)深度研究分析報(bào)告(2024-2030版)
- 2025年中國(guó)塑料擠出機(jī)行業(yè)市場(chǎng)調(diào)查研究及投資前景預(yù)測(cè)報(bào)告
- 工字扣行業(yè)深度研究分析報(bào)告(2024-2030版)
- 村文化廣場(chǎng)建設(shè)項(xiàng)目申請(qǐng)報(bào)告書(shū)
- 碳資產(chǎn)管理與碳金融 課件 第9章 碳資產(chǎn)管理案例
- 18《我能行》教學(xué)設(shè)計(jì)(表格式)
- 意外險(xiǎn)產(chǎn)品差異化營(yíng)銷(xiāo)策略-洞察闡釋
- 木質(zhì)纖維素納米纖絲基水凝膠傷口敷料的制備與性能研究
- 融資租賃業(yè)務(wù)風(fēng)險(xiǎn)控制與合規(guī)管理研究
- 設(shè)備移交協(xié)議書(shū)模板
- 慢阻肺診療規(guī)范
- 2025年憲法知識(shí)競(jìng)賽全套題庫(kù)及答案(共150題)
- 黑龍江省普通高中2024年1月學(xué)業(yè)水平合格性考試 數(shù)學(xué)試題(真題)
- 《互聯(lián)網(wǎng)產(chǎn)品開(kāi)發(fā)》教學(xué)教案
評(píng)論
0/150
提交評(píng)論