數(shù)據(jù)庫(kù)原理與MySQL應(yīng)用-7 數(shù)據(jù)庫(kù)的安全管理_第1頁(yè)
數(shù)據(jù)庫(kù)原理與MySQL應(yīng)用-7 數(shù)據(jù)庫(kù)的安全管理_第2頁(yè)
數(shù)據(jù)庫(kù)原理與MySQL應(yīng)用-7 數(shù)據(jù)庫(kù)的安全管理_第3頁(yè)
數(shù)據(jù)庫(kù)原理與MySQL應(yīng)用-7 數(shù)據(jù)庫(kù)的安全管理_第4頁(yè)
數(shù)據(jù)庫(kù)原理與MySQL應(yīng)用-7 數(shù)據(jù)庫(kù)的安全管理_第5頁(yè)
已閱讀5頁(yè),還剩83頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第7章數(shù)據(jù)庫(kù)的安全管理數(shù)據(jù)庫(kù)存在的不安全因素非授權(quán)用戶(hù)對(duì)數(shù)據(jù)庫(kù)的惡意存取和破壞

一些黑客和犯罪分子在用戶(hù)存取數(shù)據(jù)庫(kù)時(shí)獵取用戶(hù)名和用戶(hù)口令,然后假冒合法用戶(hù)偷取、修改甚至破壞用戶(hù)數(shù)據(jù)。數(shù)據(jù)庫(kù)中重要或敏感的數(shù)據(jù)被泄露

黑客和敵對(duì)分子千方百計(jì)盜竊數(shù)據(jù)庫(kù)中的重要數(shù)據(jù),一些機(jī)密信息被暴露。安全環(huán)境的脆弱性

數(shù)據(jù)庫(kù)的安全性與計(jì)算機(jī)系統(tǒng)的安全性,包括計(jì)算機(jī)硬件、操作系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等的安全性是緊密聯(lián)系的。操作系統(tǒng)安全的脆弱,網(wǎng)絡(luò)協(xié)議安全保障的不足等都會(huì)造成數(shù)據(jù)庫(kù)安全性的破壞。曾經(jīng)在伊朗以及其他中東國(guó)家發(fā)現(xiàn)過(guò)一種被稱(chēng)為“flame”(火焰)的病毒程序,這個(gè)程序可以讓自己假冒成Windows更新文件隱藏在目標(biāo)計(jì)算機(jī)里。它的作用非常特別,可以隨時(shí)復(fù)制文件、截圖、下載聊天記錄甚至可以遠(yuǎn)程啟動(dòng)計(jì)算機(jī)、激活麥克風(fēng)和攝像頭并偷偷錄下視頻和音頻。這是一種特工病毒,它的作用不是搞破壞而是盡可能的隱藏自己竊取一切有用的信息。“flame”通過(guò)藍(lán)牙系統(tǒng)來(lái)接收指令,并且可以制造假的電子憑證來(lái)隱藏身份,最牛的是當(dāng)它被發(fā)現(xiàn)后還可以立即刪除掉所有記錄痕跡并自我毀滅,這簡(jiǎn)直就跟特工干的事兒一模一樣。7.1數(shù)據(jù)庫(kù)安全性概述數(shù)據(jù)庫(kù)原理與設(shè)計(jì)5數(shù)據(jù)庫(kù)安全技術(shù)用戶(hù)標(biāo)識(shí)與鑒別存取控制視圖審計(jì)數(shù)據(jù)加密1.用戶(hù)標(biāo)識(shí)與鑒別

當(dāng)前最常用的鑒別方法。即用什么來(lái)標(biāo)識(shí)一個(gè)用戶(hù),又怎樣去識(shí)別它。用戶(hù)的個(gè)人特征識(shí)別:如用戶(hù)的聲音、指紋、簽名等。用戶(hù)的特有東西識(shí)別:如用戶(hù)的磁卡、鑰匙等。用戶(hù)的自定義識(shí)別:如用戶(hù)設(shè)置口令、密碼和一組預(yù)定的問(wèn)答等。2.存取控制策略(1)定義用戶(hù)權(quán)限,并將用戶(hù)權(quán)限登記到數(shù)據(jù)字典中。用戶(hù)對(duì)某一數(shù)據(jù)對(duì)象的操作權(quán)力稱(chēng)為權(quán)限。某個(gè)用戶(hù)應(yīng)該具有何種權(quán)限是個(gè)管理問(wèn)題和政策問(wèn)題而不是技術(shù)問(wèn)題。DBMS的功能就是保證這些決定的執(zhí)行。DBMS系統(tǒng)必須提供適當(dāng)?shù)恼Z(yǔ)言來(lái)定義用戶(hù)權(quán)限,這些定義經(jīng)過(guò)編譯后存放在數(shù)據(jù)字典中,被稱(chēng)做安全規(guī)則或授權(quán)規(guī)則。(2)合法權(quán)限檢查當(dāng)用戶(hù)發(fā)出存取數(shù)據(jù)庫(kù)的操作請(qǐng)求后,DBMS查找數(shù)據(jù)字典,根據(jù)安全規(guī)則進(jìn)行合法權(quán)限檢查,若用戶(hù)的操作請(qǐng)求超出了定義的權(quán)限,系統(tǒng)將拒絕執(zhí)行此操作。通過(guò)視圖用戶(hù)只能查看和修改他們所能看到的數(shù)據(jù)。①建立視圖score_db。CREATEVIEWscore_dbASSELECT*FROMscoreWHEREcnam=’數(shù)據(jù)庫(kù)’;示例②為用戶(hù)授予操作視圖的權(quán)限。GRANTSELECTONscore_dbTO王莎;視圖+授權(quán)常用的安全性控制方法3.視圖機(jī)制

審計(jì)功能把用戶(hù)對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來(lái)放入“審計(jì)日志”中,稱(chēng)為審計(jì)跟蹤。

審計(jì)員可以利用審計(jì)日志監(jiān)控?cái)?shù)據(jù)庫(kù)中的各種行為,重現(xiàn)導(dǎo)致數(shù)據(jù)庫(kù)現(xiàn)有狀況的一系列事件,找出非法存取數(shù)據(jù)的人、時(shí)間和內(nèi)容等。

還可以通過(guò)對(duì)審計(jì)日志分析,對(duì)潛在的威脅提前采取措施加以防范。審計(jì)通常是很費(fèi)時(shí)間和空間的,所以DBMS往往都將其作為可選特征,審計(jì)功能一般主要用于安全性要求較高的部門(mén)。4.審計(jì)跟蹤數(shù)據(jù)加密是防止數(shù)據(jù)庫(kù)中數(shù)據(jù)在存儲(chǔ)和傳輸中失密的有效手段。加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)(稱(chēng)為明文)變換為不可直接識(shí)別的格式(稱(chēng)為密文),從而使得不知道解密算法的人無(wú)法獲知數(shù)據(jù)的內(nèi)容。

由于數(shù)據(jù)加密與解密也是比較費(fèi)時(shí)的操作,而且數(shù)據(jù)加密與解密程序會(huì)占用大量系統(tǒng)資源,因此數(shù)據(jù)加密功能通常也作為可選特征。5.數(shù)據(jù)加密7.2MySQL的安全設(shè)置數(shù)據(jù)庫(kù)原理與設(shè)計(jì)137.2.1權(quán)限表1.user表user表字段可以分為4類(lèi),用戶(hù)列、權(quán)限列、安全列和資源控制列。(1)用戶(hù)列用戶(hù)列常用的字段有Host、User、authentication_string,分別表示主機(jī)名、用戶(hù)名和密碼。當(dāng)添加、刪除、修改或者查看用戶(hù)信息時(shí),其實(shí)就是對(duì)user表進(jìn)行增、刪、改、查的操作。【例7-1】查詢(xún)user表中相關(guān)用戶(hù)字段信息。SELECTHost,User,authentication_stringFROMmysql.user;(2)權(quán)限列user表中包含了幾十個(gè)以_priv結(jié)尾的與權(quán)限有關(guān)的字段,這些權(quán)限不僅包括查詢(xún)權(quán)限、修改權(quán)限等普通權(quán)限,還包括關(guān)閉服務(wù)器權(quán)限、超級(jí)權(quán)限和加載用戶(hù)等高級(jí)權(quán)限?!纠?-2】查詢(xún)localhost主機(jī)下的用戶(hù)的select、insert、update權(quán)限。SELECTselect_priv,insert_priv,update_priv,User,HostFROMmysql.userWHEREHost='localhost';(3)安全列安全列有12個(gè)字段,其中ssl用于加密,x509標(biāo)準(zhǔn)可用于標(biāo)識(shí)用戶(hù),plugin字段是用于驗(yàn)證用戶(hù)身份的插件,如果該字段為空,服務(wù)器就使用內(nèi)建授權(quán)驗(yàn)證機(jī)制驗(yàn)證用戶(hù)身份?!纠?-3】查詢(xún)服務(wù)器是否支持ssl功能。SHOWVARIABLESLIKE'have_openssl';(4)資源控制列資源控制列的字段用來(lái)限制用戶(hù)使用的資源,包括4個(gè)字段。①max_questions:用戶(hù)每小時(shí)允許執(zhí)行的查詢(xún)操作次數(shù)。②max_updates:用戶(hù)每小時(shí)允許執(zhí)行的更新操作次數(shù)。③max_connections:用戶(hù)每小時(shí)允許執(zhí)行的連接操作次數(shù)。④max_user_connections:用戶(hù)允許同時(shí)建立的連接次數(shù)?!纠?-4】查詢(xún)r(jià)oot用戶(hù)的4個(gè)資源控制字段的信息。SELECTmax_questions,max_updates,max_connections,max_user_connectionsFROMmysql.userWHEREUser='root';2.db表

db表中存儲(chǔ)了用戶(hù)對(duì)某個(gè)數(shù)據(jù)庫(kù)的操作權(quán)限,決定用戶(hù)能從哪個(gè)主機(jī)存取哪個(gè)數(shù)據(jù)庫(kù)。(1)用戶(hù)列db表的用戶(hù)列有3個(gè)字段Host、User、Db,分別表示主機(jī)名、用戶(hù)名和數(shù)據(jù)庫(kù)名,具體表示從某個(gè)主機(jī)連接某個(gè)用戶(hù)對(duì)某個(gè)數(shù)據(jù)庫(kù)的操作權(quán)限。(2)權(quán)限列db表中有19個(gè)權(quán)限字段,其中create_routine_priv和alter_routine_priv兩個(gè)字段表明用戶(hù)是否有創(chuàng)建和修改存儲(chǔ)過(guò)程的權(quán)限。3.tables_priv表

tables_priv表用來(lái)對(duì)單個(gè)表設(shè)置操作權(quán)限,包括8個(gè)字段。(1)Host、Db、User、Table_name分別表示主機(jī)名、數(shù)據(jù)庫(kù)名、用戶(hù)名和表名。(2)Grantor表示修改該記錄的用戶(hù)。(3)Timestamp表示修改該記錄的時(shí)間。(4)Table_priv表示對(duì)表進(jìn)行操作的權(quán)限,包括select、insert、update、delete、create、drop、grant、references、index和alter。(5)Column_priv表示對(duì)表中的列進(jìn)行操作的權(quán)限,包括select、insert、update和refrences。4.column_priv表

column_priv表用來(lái)對(duì)表中的某一列設(shè)置操作權(quán)限。包括7個(gè)字段,分別是Host、Db、User、Table_name、Column_name、Timestamp、Column_priv。其中Column_name用來(lái)指定對(duì)哪些數(shù)據(jù)列具有操作權(quán)限。5.proc_priv表

proc_priv表用來(lái)對(duì)存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)設(shè)置操作權(quán)限,(1)Host、Db、User分別表示主機(jī)名、數(shù)據(jù)庫(kù)名和用戶(hù)名。(2)Routine_name表示存儲(chǔ)過(guò)程或存儲(chǔ)函數(shù)的名稱(chēng)。(3)Routine_type表示存儲(chǔ)過(guò)程或存儲(chǔ)函數(shù)的類(lèi)型。(4)Grantor表示插入或修改該記錄的用戶(hù)。(5)Proc_priv表示擁有的權(quán)限,包括excute、alterroutine、grant三種。(6)Timestamp表示存儲(chǔ)記錄更新的時(shí)間。7.2.2用戶(hù)管理MySQL的用戶(hù)包括root用戶(hù)和普通用戶(hù),root用戶(hù)是超級(jí)管理員,擁有對(duì)整個(gè)MySQL服務(wù)器完全控制的權(quán)限,而普通用戶(hù)只能擁有賦予給它的權(quán)限。在MySQL數(shù)據(jù)庫(kù)中,為了防止非授權(quán)用戶(hù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取,DBA可以創(chuàng)建登錄用戶(hù)、修改用戶(hù)信息和刪除用戶(hù)。1.創(chuàng)建用戶(hù)CREATEUSER用戶(hù)[IDENTIFIEDBY'密碼'][,用戶(hù)[IDENTIFIEDBY'密碼']]…;【說(shuō)明】①用戶(hù)的格式:用戶(hù)名@主機(jī)名主機(jī)名即用戶(hù)連接MySQL時(shí)所在主機(jī)的名字。如果在創(chuàng)建時(shí)只給出了賬號(hào)的用戶(hù)名,而沒(méi)有指定主機(jī)名,則主機(jī)名會(huì)默認(rèn)為是“%”,表示一組主機(jī);localhost表示本地主機(jī)。②IDENTIFIEDBY子句指定創(chuàng)建用戶(hù)時(shí)的密碼?!纠?-6】創(chuàng)建本機(jī)用戶(hù)tempuser,其密碼為temp。CREATEUSERtempuser@localhostIDENTIFIEDBY'temp';

創(chuàng)建的新用戶(hù)的詳細(xì)信息自動(dòng)保存在系統(tǒng)數(shù)據(jù)庫(kù)mysql的user表中,執(zhí)行如下SQL語(yǔ)句,可查看數(shù)據(jù)庫(kù)服務(wù)器的用戶(hù)信息。USEmysql;SELECT*FROMuserWHEREuser='tempuser';2.修改用戶(hù)密碼SETPASSWORDFOR用戶(hù)='新密碼';【例7-7】修改用戶(hù)賬號(hào)tempuser的密碼為123456。SETPASSWORDFORtempuser@localhost='123456';【例7-8】修改root超級(jí)用戶(hù)的密碼為root。SETPASSWORDFORroot@localhost='root';3.修改用戶(hù)名RENAMEUSER舊用戶(hù)名TO新用戶(hù)名[,舊用戶(hù)名TO新用戶(hù)名][,…];【例7-9】修改普通用戶(hù)tempuser的用戶(hù)名為temp_U。RENAMEUSERtempuser@localhostTOtemp_U@localhost;USEmysql;SELECT*FROMuserWHEREuser='temp_U'andhost='localhost';4.刪除用戶(hù)DROPUSER用戶(hù)[,…];【例7-10】刪除用戶(hù)temp_U。DROPUSERtemp_U@localhost;USEmysql;SELECT*FROMuserWHEREuser='temp_U'andhost='localhost';7.2.3權(quán)限管理權(quán)限管理主要是對(duì)登錄到MySQL服務(wù)器的數(shù)據(jù)庫(kù)用戶(hù)進(jìn)行權(quán)限驗(yàn)證。所有用戶(hù)的權(quán)限都存儲(chǔ)在MySQL的權(quán)限表中。合理的權(quán)限管理能夠保證數(shù)據(jù)庫(kù)系統(tǒng)的安全,不合理的權(quán)限設(shè)置會(huì)給數(shù)據(jù)庫(kù)系統(tǒng)帶來(lái)危害。權(quán)限管理主要包括兩個(gè)內(nèi)容:授予權(quán)限和取消權(quán)限。1.授予權(quán)限(1)授予MySQL字段級(jí)別權(quán)限GRANT

權(quán)限名稱(chēng)(列名[,列名,…])[,權(quán)限名稱(chēng)(列名[,列名,…]),…]

ONTABLE數(shù)據(jù)庫(kù)名.表名或視圖名

TO用戶(hù)[,用戶(hù),…];在MySQL中,針對(duì)不同的數(shù)據(jù)庫(kù)資源,可以將權(quán)限分為五類(lèi),即MySQL字段級(jí)別權(quán)限、MySQL表級(jí)別權(quán)限、MySQL存儲(chǔ)程序級(jí)別權(quán)限、MySQL數(shù)據(jù)庫(kù)級(jí)別權(quán)限和MySQL服務(wù)器管理員級(jí)別權(quán)限。

系統(tǒng)數(shù)據(jù)庫(kù)mysql的系統(tǒng)表columns_priv中記錄了用戶(hù)字段級(jí)別權(quán)限的驗(yàn)證信息?!纠?-11】創(chuàng)建新用戶(hù)column_user,并為其授予對(duì)fruits表中列的操作權(quán)限。CREATEUSERcolumn_user@localhostIDENTIFIEDBY'password';GRANT

SELECT(f_name,f_price),UPDATE(f_price),REFERENCES(s_id)

ONTABLEfruitsales.fruits

TOcolumn_user@localhost;SELECT*FROMmysql.columns_priv;以column_user用戶(hù)連接MySQL服務(wù)器SELECTf_name,f_priceFROMfruitsales.fruits;SELECTf_idFROMfruitsales.fruits;(2)授予MySQL表級(jí)別權(quán)限GRANT

權(quán)限名稱(chēng)[,權(quán)限名稱(chēng),…]

ONTABLE數(shù)據(jù)庫(kù)名.表名或數(shù)據(jù)庫(kù)名.視圖名

TO用戶(hù)[,用戶(hù),…];

系統(tǒng)數(shù)據(jù)庫(kù)mysql的系統(tǒng)表tables_priv中記錄了用戶(hù)MySQL表級(jí)別權(quán)限的驗(yàn)證信息?!纠?-12】創(chuàng)建新用戶(hù)table_user,并為其授予對(duì)fruits表的操作權(quán)限。CREATEUSERtable_user@localhostIDENTIFIEDBY'password';GRANTALTER,SELECT,INSERT(f_id,f_name,f_price)

ONTABLEfruitsales.fruits

TOtable_user@localhost;SELECT*FROMmysql.tables_privWHEREhost='localhost'anduser='table_user';以table_user用戶(hù)連接MySQL服務(wù)器ALTERTABLEfruitsales.fruits

ADDf_originVARCHAR(50);

DESCfruitsales.fruits;【例7-13】創(chuàng)建新用戶(hù)view_user,授予其只能查詢(xún)供應(yīng)商101水果銷(xiāo)售情況信息。CREATEUSERview_user@localhostIDENTIFIEDBY'password';USEfruitsales;CREATEVIEWs101_od

ASSELECTs_name,o_num,f_name,quantityFROMfruitsf,orderitemso,supplierssWHEREf.f_id=o.f_idANDf.s_id=s.s_idANDs.s_id=101;GRANTSELECTON

s101_od

TOview_user@localhost;以view_user用戶(hù)連接MySQL服務(wù)器SELECT*FROMfruitsales.s101_od;(3)授予MySQL存儲(chǔ)程序級(jí)別權(quán)限GRANT權(quán)限名稱(chēng)[,權(quán)限名稱(chēng),…]

ONFUNCTION|PROCEDURE數(shù)據(jù)庫(kù)名.函數(shù)名|數(shù)據(jù)庫(kù)名.存儲(chǔ)過(guò)程名

TO用戶(hù)[,用戶(hù),…];

系統(tǒng)數(shù)據(jù)庫(kù)mysql的系統(tǒng)表procs_priv中記錄了用戶(hù)MySQL存儲(chǔ)程序級(jí)別權(quán)限的驗(yàn)證信息。【例7-14】創(chuàng)建新用戶(hù)proc_user,并為其授予對(duì)fruitsales數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程的操作權(quán)限。CREATEUSERproc_user@localhostIDENTIFIEDBY'password';DELIMITER@@CREATEPROCEDUREfruitsales.test_p()BEGINSELECT*FROMfruitsales.fruits;END@@GRANTEXECUTEONPROCEDUREfruitsales.test_pTOproc_user@localhost;以proc_user用戶(hù)連接MySQL服務(wù)器CALLfruitsales.test_p;(4)授予MySQL數(shù)據(jù)庫(kù)級(jí)別權(quán)限GRANT權(quán)限名稱(chēng)[,權(quán)限名稱(chēng),…]

ON

數(shù)據(jù)庫(kù)名.*TO用戶(hù)[,用戶(hù),…];

系統(tǒng)數(shù)據(jù)庫(kù)mysql的系統(tǒng)表db中記錄了用戶(hù)MySQL數(shù)據(jù)庫(kù)級(jí)別權(quán)限的驗(yàn)證信息?!纠?-15】創(chuàng)建新用戶(hù)database_user,并為其授予對(duì)fruitsales數(shù)據(jù)庫(kù)的操作權(quán)限。CREATEUSERdatabase_user@localhostIDENTIFIEDBY'password';GRANTCREATE,SELECT,DROPONfruitsales.*

TOdatabase_user@localhost;以database_user用戶(hù)連接MySQL服務(wù)器CREATETABLEfruitsales.test(idINTNOTNULLPRIMARYKEY,nameVARCHAR(10));DROPTABLEfruitsales.test;(5)授予MySQL服務(wù)器管理員級(jí)別權(quán)限GRANT權(quán)限名稱(chēng)[,權(quán)限名稱(chēng),…]

ON

*.*

TO用戶(hù)[,用戶(hù),…];

系統(tǒng)數(shù)據(jù)庫(kù)mysql的系統(tǒng)表user中記錄了用戶(hù)MySQL服務(wù)器管理員級(jí)別權(quán)限的驗(yàn)證信息?!纠?-16】創(chuàng)建新用戶(hù)server_user,并為其授予對(duì)所有數(shù)據(jù)庫(kù)的操作權(quán)限。CREATEUSERserver_user@localhostIDENTIFIEDBY'password';GRANTALLPRIVILEGES

ON*.*

TOserver_user@localhost;以sever_user用戶(hù)連接MySQL服務(wù)器CREATEDATABASEtest_db;(6)權(quán)限的轉(zhuǎn)移權(quán)限的轉(zhuǎn)移通過(guò)在GRANT語(yǔ)句中使用WITHGRANTOPTION子句來(lái)實(shí)現(xiàn)。如果指定為WITHGRANTOPTION,則表示TO子句中的所有用戶(hù)都具有把自己所擁有的權(quán)限授予給其他用戶(hù)的權(quán)利,而無(wú)論那些其它用戶(hù)是否擁有該權(quán)限。【例7-17】創(chuàng)建新用戶(hù)u1和u2,為u1賦予對(duì)fruits表增刪改查的權(quán)限,并且u1能夠?qū)⑺鶕碛械臋?quán)限再賦予給u2。CREATEUSERu1@localhostIDENTIFIEDBY'123';CREATEUSERu2@localhostIDENTIFIEDBY'456';GRANTSELECT,INSERT,UPDATE,DELETEONfruitsales.fruits

TO

u1@localhost

WITHGRANTOPTION;以u(píng)1用戶(hù)連接MySQL服務(wù)器GRANTSELECTONfruitsales.fruitsTO

u2@localhost;以u(píng)2用戶(hù)連接MySQL服務(wù)器SELECT*FROMfruitsales.fruits;2.撤消權(quán)限(1)撤消所有權(quán)限REVOKE

ALLPRIVILEGES,GRANTOPTION

FROM用戶(hù)[,用戶(hù),…];【例7-18】撤消例7-11用戶(hù)column_user@localhost的所有權(quán)限。SELECT*FROMmysql.columns_priv

WHEREuser='column_user'ANDhost='localhost';REVOKE

ALLPRIVILEGES,GRANTOPTION

FROMcolumn_user@localhost;

SELECT*FROMmysql.columns_privWHEREuser='column_user'ANDhost='localhost';(2)撤消指定權(quán)限REVOKE權(quán)限名稱(chēng)[(列名[,列名,…])][,權(quán)限名稱(chēng)[(列名[,列名,…])],…]ON*.*|數(shù)據(jù)庫(kù)名.*|數(shù)據(jù)庫(kù)名.表名或視圖名FROM用戶(hù)[,用戶(hù),…];【例7-19】撤消例7-14用戶(hù)database_user@localhost的CREAT和DROP權(quán)限。SELECT*FROMdbWHEREhost='localhost'anduser='database_user';REVOKE

CREATE,DROP

ONfruitsales.*

FROMdatabase_user@localhost;SELECT*FROMmysql.dbWHEREhost='localhost'anduser='database_user';7.2.4角色管理MySQL的權(quán)限設(shè)置是非常復(fù)雜的,權(quán)限的類(lèi)型也非常多,這就為DBA有效地管理數(shù)據(jù)庫(kù)權(quán)限帶來(lái)了困難。另外,數(shù)據(jù)庫(kù)的用戶(hù)通常有幾十個(gè)、幾百個(gè)、甚至成千上萬(wàn)個(gè)。如果管理員為每個(gè)用戶(hù)授予或者撤銷(xiāo)相應(yīng)的權(quán)限,則這個(gè)工作量是非常龐大的。為了簡(jiǎn)化權(quán)限管理,MySQL提供了角色的概念。角色是具有名稱(chēng)的一組相關(guān)權(quán)限的集合,即將不同的權(quán)限集合在一起就形成了角色。可以使用角色為用戶(hù)授權(quán),同樣也可以撤銷(xiāo)角色。由于角色集合了多種權(quán)限,所以當(dāng)為用戶(hù)授予角色時(shí),相當(dāng)于為用戶(hù)授予了多種權(quán)限。這樣就避免了向用戶(hù)逐一授權(quán),從而簡(jiǎn)化了用戶(hù)權(quán)限的管理。1.創(chuàng)建角色CREATEROLE角色;【說(shuō)明】角色格式:角色名@主機(jī)名。【例7-20】分別在本地主機(jī)上創(chuàng)建應(yīng)用程序角色app、運(yùn)維人員角色ops、開(kāi)發(fā)人員讀角色dev_read、開(kāi)發(fā)人員寫(xiě)角色dev_write。CREATEROLEapp@localhost,ops@localhost,dev_read@localhost,dev_write@localhost;SELECT*FROMmysql.userWHEREhost='localhost'ANDuserIN('app','ops','dev_read','dev_write');2.授予角色權(quán)限只需將GRANT語(yǔ)句TO后的用戶(hù)改為角色即可。【例7-21】分別授予角色app數(shù)據(jù)讀寫(xiě)權(quán)限、角色ops訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)權(quán)限、角色dev_read讀取權(quán)限、角色dev_write寫(xiě)權(quán)限。GRANTSELECT,INSERT,UPDATE,DELETEONfruitsales.*TOapp@localhost;GRANTALLPRIVILEGESONfruitsales.*TOops@localhost;GRANTSELECTONfruitsales.*TOdev_read@localhost;GRANTINSERT,UPDATE,DELETEONfruitsales.*TOdev_write@localhost;3.授予用戶(hù)角色GRANT

角色[,角色,…]TO用戶(hù)[,用戶(hù),…];【例7-22】分別將角色授予新用戶(hù)app01、ops01、dev01、dev02、dev03。CREATEUSERapp01@localhostIDENTIFIEDBY'000000';CREATEUSERops01@localhostIDENTIFIEDBY'000000';CREATEUSERdev01@localhostIDENTIFIEDBY'000000';CREATEUSERdev02@localhostIDENTIFIEDBY'000000';CREATEUSERdev03@localhostIDENTIFIEDBY'000000';創(chuàng)建新的用戶(hù)賬號(hào)GRANTapp@localhostTOapp01@localhost;GRANTops@localhostTOops01@localhost;GRANTdev_read@localhostTOdev01@localhost;GRANTdev_read@localhost,dev_write@localhostTOdev02@localhost,dev03@localhost;給用戶(hù)賬號(hào)分配角色setglobalactivate_all_roles_on_login=ON;用戶(hù)使用角色權(quán)限前,必須要先激活角色以dev01用戶(hù)連接MySQL服務(wù)器SELECT*FROMfruitsales.suppliers;4.撤消用戶(hù)角色REVOKE角色[,角色,…]FROM用戶(hù)[,用戶(hù),…];【例7-23】撤消用戶(hù)dev01的角色dev_read。REVOKEdev_read@localhostFROMdev01@localhost;以dev01用戶(hù)連接MySQL服務(wù)器SELECT*FROMfruitsales.suppliers;5.刪除角色DROPROLE角色[,角色,…];【例7-24】刪除角色app和ops。DROPROLE'app'@'localhost','ops'@'localhost';7.2.5密碼管理**1.Windows系統(tǒng)下丟失MySQLroot登錄密碼的解決方法(1)授予MySQL字段級(jí)別權(quán)限(1)以管理員身份打開(kāi)“命令提示符”窗口,關(guān)閉MySQL服務(wù),進(jìn)入MySQL的bin目錄,執(zhí)行命令及執(zhí)行結(jié)果如圖7-1所示。(2)開(kāi)啟安全模式下的MySQL服務(wù),執(zhí)行命令及執(zhí)行結(jié)果如圖7-2所示,命令執(zhí)行后光標(biāo)一直在閃爍。(3)在不關(guān)閉圖7-2窗口的基礎(chǔ)上,重新打開(kāi)一個(gè)“命令提示符”窗口,登錄MySQL,執(zhí)行命令及執(zhí)行結(jié)果如圖7-3所示。(4)使用UPDATE語(yǔ)句將root的密碼置空。在MySQL8.0版本的安全模式下,如果root用戶(hù)的密碼不為空,就無(wú)法直接修改。SQL語(yǔ)句及執(zhí)行結(jié)果如圖7-4所示。(5)執(zhí)行完圖7-4中的語(yǔ)句后,需要刷新一下,如果不刷新將會(huì)報(bào)錯(cuò),SQL語(yǔ)句及執(zhí)行結(jié)果如圖7-5所示。(6)刷新之后使用ALTERUSER語(yǔ)句修改用戶(hù)的密碼,SQL語(yǔ)句及執(zhí)行結(jié)果如圖7-6所示。(7)退出MySQL,SQL語(yǔ)句及執(zhí)行結(jié)果如圖7-7所示。(8)關(guān)閉圖7-7和圖7-2所示的兩個(gè)“命令提示符”窗口。(9)重新打開(kāi)一個(gè)新的“命令提示符”窗口,重啟MySQL服務(wù),執(zhí)行命令及執(zhí)行結(jié)果如圖7-8所示。(10)MySQL服務(wù)啟動(dòng)成功之后,root用戶(hù)用新密碼登錄MySQL,執(zhí)行命令及執(zhí)行結(jié)果如圖7-9所示。執(zhí)行結(jié)果顯示,在Windows下重新設(shè)置root用戶(hù)密碼成功。2.密碼管理(1)密碼過(guò)期策略手動(dòng)設(shè)置賬號(hào)密碼過(guò)期的SQL語(yǔ)句格式如下:

ALTERUSER用戶(hù)PASSWORDEXPIRE;【例7-25】將用戶(hù)pwd賬號(hào)的密碼設(shè)置為過(guò)期。CREATEUSERpwd@localhostIDENTIFIEDBY'123456';SELECTuser,host,password_last_changed,password_lifetime,password_expiredFROMmysql.userWHEREuser='pwd'ANDhost='localhost';ALTERUSERpwd@localhostPASSWORDEXPIRE;

以pwd用戶(hù)連接MySQL服務(wù)器,將會(huì)顯示密碼過(guò)期重置的窗口,在窗口中重新設(shè)置新密碼,如圖7-10所示。因?yàn)槊艽a過(guò)期后,只有重新設(shè)置了新密碼,該用戶(hù)才能正常使用。為每個(gè)用戶(hù)單獨(dú)設(shè)置密碼過(guò)期策略的SQL語(yǔ)句

ALTERUSER用戶(hù)PASSWORDEXPIRE

INTERVALnDAY|NEVER|DEFAULT;①I(mǎi)NTERVALnDAY:設(shè)置密碼過(guò)期的天數(shù);②NEVER:設(shè)置密碼永不過(guò)期;③DEFAULT:延用全局密碼過(guò)期策略。ALTERUSERpwd@localhostPASSWORDEXPIREINTERVAL90DAY;SELECTuser,host,password_last_changed,password_lifetime,password_expiredFROMmysql.userWHEREuser='pwd'ANDhost='localhost';設(shè)置pwd用戶(hù)賬號(hào)密碼每90天過(guò)期【例7-26】設(shè)置用戶(hù)pwd密碼過(guò)期策略。ALTERUSERpwd@localhostPASSWORDEXPIRENEVER;SELECTuser,host,password_last_changed,password_lifetime,password_expiredFROMmysql.userWHEREuser='pwd'ANDhost='localhost';設(shè)置密碼永不過(guò)期SETPERSISTdefault_password_lifetime=180;設(shè)置全局密碼過(guò)期策略,每隔180天過(guò)期延用全局密碼過(guò)期策略ALTERUSERpwd@localhostPASSWORDEXPIREDEFAULT;SELECTuser,host,password_last_changed,password_lifetime,password_expiredFROMmysql.userWHEREuser='pwd'ANDhost='localhost';(2)密碼重用策略

賬號(hào)的歷史密碼包含過(guò)去該賬號(hào)所使用的密碼。MySQL基于以下規(guī)則來(lái)限制密碼重用。①如果

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論