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