在線設(shè)計(jì)平臺(tái)有什么用長(zhǎng)春seo網(wǎng)站優(yōu)化
1.?數(shù)據(jù)庫(kù)安全性概述
數(shù)據(jù)庫(kù)存在的不安全因素:
-
非授權(quán)用戶對(duì)數(shù)據(jù)庫(kù)的惡意存取和破壞;
-
數(shù)據(jù)庫(kù)中重要或敏感的數(shù)據(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ù)安全性的破壞。
數(shù)據(jù)庫(kù)的安全性:
-
指保護(hù)數(shù)據(jù)庫(kù),防止不合法的使用,以免數(shù)據(jù)的泄露、更改或破壞。
數(shù)據(jù)庫(kù)的完整性與安全性的區(qū)別:
-
安全性:保護(hù)數(shù)據(jù)以防止非法用戶故意造成的破壞,確保合法用戶做其想做的事情。
-
完整性:保護(hù)數(shù)據(jù)以防止合法用戶無(wú)意中造成的破壞,確保用戶所做的事情是正確的。
為了保護(hù)數(shù)據(jù)庫(kù),防止故意的破壞,可以在從低到高的5個(gè)級(jí)別上設(shè)置各種安全措施:
-
物理控制:計(jì)算機(jī)系統(tǒng)的機(jī)房和設(shè)備應(yīng)加以保護(hù),通過(guò)加鎖或?qū)iT(mén)監(jiān)護(hù)等防止系統(tǒng)場(chǎng)地被非法進(jìn)入,從而進(jìn)行物理破壞。
-
法律保護(hù):通過(guò)立法、規(guī)章制度防止授權(quán)用戶以非法的形式將其訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限轉(zhuǎn)授給非法者。
-
操作系統(tǒng)支持:無(wú)論數(shù)據(jù)庫(kù)系統(tǒng)是多么安全,操作系統(tǒng)的安全弱點(diǎn)均可能成為人侵?jǐn)?shù)據(jù)庫(kù)的手段,應(yīng)防止未經(jīng)授權(quán)的用戶從S處著手訪問(wèn)數(shù)據(jù)庫(kù)。
-
網(wǎng)絡(luò)管理:由于大多數(shù)DBMS都允許用戶通過(guò)網(wǎng)絡(luò)進(jìn)行遠(yuǎn)程訪問(wèn),所以網(wǎng)絡(luò)軟件內(nèi)部的安全性是很重要的。
-
DBMS實(shí)現(xiàn):DBMS的安全機(jī)制的職責(zé)是檢查用戶的身份是否合法及使用數(shù)據(jù)庫(kù)的權(quán)限是否正確。
要實(shí)現(xiàn)數(shù)據(jù)庫(kù)安全,DBMS必須提供下列支持:
-
安全策略說(shuō)明。
即安全性說(shuō)明語(yǔ)言。如支持授權(quán)的SQL語(yǔ)言。
-
安全策略管理。
即安全約束目錄的存儲(chǔ)結(jié)構(gòu)、存取控制方法和維護(hù)機(jī)制。
-
安全性檢查。
執(zhí)行“授權(quán)”及其檢驗(yàn),認(rèn)可“他能做他想做的事情嗎?”。
-
用戶識(shí)別。
即標(biāo)識(shí)和確認(rèn)用戶,確定“他就是他說(shuō)的那個(gè)人嗎?”。
現(xiàn)代 DBMS 一般采用“自主”(discretionary)和“強(qiáng)制”(mandatory)兩種存取控制方法來(lái)解決安全性問(wèn)題。
在自主存取控制方法中,每個(gè)用戶對(duì)各個(gè)數(shù)據(jù)對(duì)象被授予不同的存取權(quán)力(authority)或特權(quán)(privilege),哪些用戶對(duì)哪些數(shù)據(jù)對(duì)象有哪些存取權(quán)力都按存取控制方案執(zhí)行,但并不完全固定。
在強(qiáng)制存取控制方法中,所有的數(shù)據(jù)對(duì)象被標(biāo)定一個(gè)密級(jí),所有的用戶也被授予一個(gè)許可證級(jí)別。
對(duì)于任一數(shù)據(jù)對(duì)象,凡具有相應(yīng)許可證級(jí)別的用戶就可以存取,否則不能。
2. 數(shù)據(jù)庫(kù)安全性控制
計(jì)算機(jī)系統(tǒng)的安全模型:
-
當(dāng)用戶進(jìn)入計(jì)算機(jī)系統(tǒng)時(shí),系統(tǒng)首先根據(jù)輸入的用戶標(biāo)識(shí)(如用戶名)進(jìn)行身份的鑒定,只有合法的用戶才準(zhǔn)許進(jìn)入系統(tǒng)。
-
對(duì)已進(jìn)入計(jì)算機(jī)系統(tǒng)的用戶,DBMS還要進(jìn)行存取控制,只允許用戶在所授予的權(quán)限之內(nèi)進(jìn)行合法的操作。
-
操作系統(tǒng)應(yīng)能保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)必須由DBMS訪問(wèn),而不允許用戶越過(guò)DBMS,直接通過(guò)操作系統(tǒng)或其他方式訪問(wèn)。
-
數(shù)據(jù)最后通過(guò)加密的方式存儲(chǔ)到數(shù)據(jù)庫(kù)中,即便非法者得到了已加密的數(shù)據(jù),也無(wú)法識(shí)別數(shù)據(jù)內(nèi)容。
數(shù)據(jù)庫(kù)安全技術(shù):用戶標(biāo)識(shí)與鑒別、存取控制、視圖、審計(jì)、數(shù)據(jù)加密。
2.1 用戶標(biāo)識(shí)與鑒別
最常用的鑒別方法:
即用什么來(lái)標(biāo)識(shí)一個(gè)用戶,又怎樣去識(shí)別它。
用戶的個(gè)人特征識(shí)別:
-
使用每個(gè)人所具有的個(gè)人特征,如聲音、指紋、簽名等來(lái)識(shí)別用戶是當(dāng)前最有效的方法,但是有以下兩個(gè)問(wèn)題必須解決。
-
專門(mén)設(shè)備:要能準(zhǔn)確地記錄、存儲(chǔ)和存取這些個(gè)人特征。
-
識(shí)別算法:要能較準(zhǔn)確地識(shí)別出每個(gè)人的聲音、指紋或簽名。這里關(guān)鍵問(wèn)是要讓“合法者被拒絕”和”非法者被接受”的誤判率達(dá)到應(yīng)用環(huán)境可接受的程度。百分之百正確(即誤判率為零)幾乎是不可能的。
-
-
另外,其實(shí)代價(jià)也不得不考慮,這不僅是經(jīng)濟(jì)上的代價(jià),還包括識(shí)別算法執(zhí)行的時(shí)同和空間代價(jià)。它影響整個(gè)安全子系統(tǒng)的代價(jià)/性能比。
用戶的特有物品識(shí)別:
-
讓每一用戶持有一個(gè)他特有的物件,例如磁卡、鑰匙等。在識(shí)別時(shí),將其插人一個(gè)“閱讀器”,它讀取其面上的磁條中的信息。該方法是目前一些安全系統(tǒng)中較常用的一種方法、但用在數(shù)據(jù)庫(kù)系統(tǒng)中要考慮以下兩點(diǎn)。
-
需要專門(mén)的閱讀裝置。
-
要求有從閱讀器抽取信息及與DBMS接口的軟件
-
-
該方法的優(yōu)點(diǎn)是比個(gè)人特征識(shí)別更簡(jiǎn)單、有效,代價(jià)/性能比更好;缺點(diǎn)是用戶容易忘記帶磁卡或鑰匙等,也可能丟失甚至被別人竊取。
用戶的自定義識(shí)別:
-
使用只有用戶自己知道的定義內(nèi)容來(lái)識(shí)別用戶是最常用的一種方法一般用口令或密碼,有時(shí)用只有用戶自己能給出正確答案的一組問(wèn)題,有時(shí)還可以兩者兼用。在使用這類方法時(shí)要注意以下幾點(diǎn)。
-
標(biāo)識(shí)的有效性:口令、密碼或問(wèn)題答案要盡可能準(zhǔn)確地標(biāo)識(shí)每一個(gè)用戶;
-
內(nèi)容的簡(jiǎn)易性:口令或密碼要長(zhǎng)短適中,問(wèn)答過(guò)程不要太煩瑣
-
本身的安全性:為了防止口令、密碼或問(wèn)題答案的泄露或失竊,應(yīng)經(jīng)常改變
-
-
實(shí)現(xiàn)這種方法需要專門(mén)的軟件來(lái)進(jìn)行用戶名或用戶ID及其口令的登記、維護(hù)與檢驗(yàn)等,但它不需要專門(mén)的硬件設(shè)備,較之以上的方法這是其優(yōu)點(diǎn)。
-
其主要的缺點(diǎn)是口令、密碼或問(wèn)題答案容易被人竊取,因此還可以用更復(fù)雜的方法。
例如,每個(gè)用戶都預(yù)先約定好一個(gè)計(jì)算過(guò)程或函數(shù),在鑒別用戶身份時(shí),系統(tǒng)提供一個(gè)隨機(jī)數(shù),用戶根據(jù)自己預(yù)先約定的計(jì)算過(guò)程或函數(shù)進(jìn)行計(jì)算,而系統(tǒng)根據(jù)用戶的計(jì)算結(jié)果是否正確進(jìn)一步鑒定用戶身份。
2.2 存儲(chǔ)控制策略
定義用戶權(quán)限,并將用戶權(quán)限登記到數(shù)據(jù)字典中:
-
權(quán)限:用戶對(duì)某一數(shù)據(jù)對(duì)象的操作權(quán)力。
-
某個(gè)用戶應(yīng)該具有何種權(quán)限是個(gè)管理問(wèn)題和政策問(wèn)題而不是技術(shù)問(wèn)題。
-
DBMS系統(tǒng)必須提供適當(dāng)?shù)恼Z(yǔ)言來(lái)定義用戶權(quán)限,這些定義經(jīng)過(guò)編譯后存放在數(shù)據(jù)字典中,被稱做安全規(guī)則或授權(quán)規(guī)則。
-
使用代碼:
GRANT SELECT ON dept TO user1@localhost;
合法權(quán)限檢查:
-
當(dāng)用戶發(fā)出存取數(shù)據(jù)庫(kù)的操作請(qǐng)求后,DBMS查找數(shù)據(jù)字典,根據(jù)安全規(guī)則進(jìn)行合法權(quán)限檢查,若用戶的操作請(qǐng)求超出了定義的權(quán)限,系統(tǒng)將拒絕執(zhí)行此操作。
-
以u(píng)ser1用戶登錄數(shù)據(jù)庫(kù):
SELECT * FROM department;
自主存取控制(DAC):
-
在自主存取控制方法中,用戶對(duì)于不同的數(shù)據(jù)庫(kù)對(duì)象有不同的存取權(quán)限,不同的用戶對(duì)同一對(duì)象也有不同的權(quán)限,而且用戶還可將其擁有的存取權(quán)限轉(zhuǎn)授給其他用戶。
-
因此,自主存取控制非常靈活。
強(qiáng)制存取控制(MAC):
-
在強(qiáng)制存取控制方法中,每一個(gè)數(shù)據(jù)庫(kù)對(duì)象被標(biāo)以一定的密級(jí),每一個(gè)用戶也被授予某一個(gè)級(jí)別的許可證。對(duì)于任意一個(gè)對(duì)象,只有具有合法許可證的用戶才可以存取。
-
因此,強(qiáng)制存取控制相對(duì)比較嚴(yán)格。
2.3 自主存取控制
用戶使用數(shù)據(jù)庫(kù)的方式稱為”授權(quán)“。權(quán)限有兩種,即訪問(wèn)數(shù)據(jù)權(quán)限和修改數(shù)據(jù)庫(kù)結(jié)構(gòu)的權(quán)限。
權(quán)限類型:
-
自主存取控制的權(quán)限類型分為兩種,即角色權(quán)限和數(shù)據(jù)庫(kù)對(duì)象權(quán)限。
-
角色權(quán)限:給角色授權(quán),并為用戶分配角色,用戶的權(quán)限為其角色權(quán)限之和。角色權(quán)限由 DBA 授予。
-
數(shù)據(jù)庫(kù)對(duì)象權(quán)限:不同的數(shù)據(jù)庫(kù)對(duì)象,可提供給用戶不同的操作。該權(quán)限由DBA或該對(duì)象的擁有者(Owner)授予用戶。
-
角色的授權(quán)與取消:
-
授權(quán)命令的語(yǔ)法如下:
GRANT <角色類型> [,<角色類型>] T0 <用戶> [IDENTIFIED BY <ロ令>] <角色類型>::= Connect|Resource|DBA
Connect
表示該用戶可連接到DBMS;Resource
表示用戶可訪問(wèn)數(shù)據(jù)庫(kù)資源;DBA
表示該用戶為數(shù)據(jù)庫(kù)管理員;IDENTIFIED BY
用于為用戶設(shè)置一個(gè)初始口令。
-
取消命令的語(yǔ)法如下:
REVOKE <角色管理>[,<角色管理>] FROM <用戶>
數(shù)據(jù)庫(kù)對(duì)象的授權(quán)與取消:
-
授權(quán)命令的語(yǔ)法如下:
GRANT <權(quán)限> 0N <表名> TO <用戶>[,<用戶>] [WITH GRANT OPTION] <權(quán)限>::= ALL PRIVILEGES|SELECT|INSERT|DELETE|UPDATE[ (<列名>[ ,<列名>])]
WITH GRANT OPTION
表示得到授權(quán)的用戶,可將其獲得的權(quán)限轉(zhuǎn)授給其他用戶;ALL PRIVILEGES
表示所有的操作權(quán)限。
-
取消命令的語(yǔ)法如下:
REVOKE <權(quán)限> ON <表名> EROM <用戶>[,<用戶>]
數(shù)據(jù)庫(kù)對(duì)象除了表以外,還有其他對(duì)象,例如視圖等,但由于表的授權(quán)最具典型意義,而且表的授權(quán)也最復(fù)雜,所以此處只以表的授權(quán)為例來(lái)說(shuō)明數(shù)據(jù)庫(kù)對(duì)象的授權(quán)語(yǔ)法其他對(duì)象的授權(quán)語(yǔ)法與之類似,只是在權(quán)限上不同。
2.4 強(qiáng)制存取控制
控制思路:
-
為每個(gè)數(shù)據(jù)對(duì)象(文件、記錄或字段等)賦予一定的密級(jí)。
系統(tǒng)運(yùn)行時(shí),采用兩條簡(jiǎn)單規(guī)則:
-
用戶只能查看比它級(jí)別低或同級(jí)的數(shù)據(jù);
-
用戶只能修改和它同級(jí)的數(shù)據(jù)。
強(qiáng)制存取控制是對(duì)數(shù)據(jù)本身進(jìn)行密級(jí)標(biāo)記,無(wú)論數(shù)據(jù)如何復(fù)制,標(biāo)記與數(shù)據(jù)都是一個(gè)不可分的整體,只有符合密級(jí)標(biāo)記要求的用戶才可以操縱數(shù)據(jù),從而提供了更高級(jí)別的安全性。
強(qiáng)制存取控制的優(yōu)點(diǎn)是系統(tǒng)能執(zhí)行“信息流控制”。前面介紹的授權(quán)方法,允許凡有權(quán)查看保密數(shù)據(jù)的用戶就可以把這種數(shù)據(jù)復(fù)制到非保密的文件中,造成無(wú)權(quán)用戶也可以接觸保密的數(shù)據(jù)。強(qiáng)制存取控制可以避免這種非法的信息流動(dòng)。
3. 視圖機(jī)制
視圖機(jī)制指通過(guò)視圖用戶只能查看和修改他所能看到的數(shù)據(jù)。
視圖+授權(quán)常用的安全性控制方法。
示例:
# 建立視圖score_db。CREATE ?VIEW score_db ? ASSELECT ?* ? FROM score ? WHERE cname=’數(shù)據(jù)庫(kù)’; # 為用戶授予操作視圖的權(quán)限。GRANT ?SELECT ?ON score_dbTO 王莎;
4. 安全級(jí)別與審計(jì)跟蹤
4.1 安全級(jí)別
TCSEC/TDI將系統(tǒng)安全性分為4等7級(jí):
-
D級(jí)。
最低安全級(jí)別。
保留D級(jí)的目的是為了將一切不符合更高標(biāo)準(zhǔn)的系統(tǒng),統(tǒng)統(tǒng)歸于D級(jí)。
-
C1級(jí)。
實(shí)現(xiàn)數(shù)據(jù)的所有權(quán)與使用權(quán)的分離,進(jìn)行自主存取控制DAC,保護(hù)或限制用戶權(quán)限的傳播。
-
C2級(jí)。
提供受控的存取保護(hù)。
即將C1級(jí)的自主存取控制進(jìn)一步細(xì)化,通過(guò)身份注冊(cè)、審計(jì)和資源隔離以支持“責(zé)任”說(shuō)明。
-
B1級(jí)。
標(biāo)記安全保護(hù)。
即對(duì)每一客體和主體分別標(biāo)以一定的密級(jí)和安全證等級(jí),實(shí)施強(qiáng)制存取控制MAC以及審計(jì)等安全機(jī)制。
-
B2級(jí)。
建立安全策略的形式化模型,并能識(shí)別和消除隱通道。
-
B3級(jí)。
提供審計(jì)和系統(tǒng)恢復(fù)過(guò)程,且指定安全管理員(通常是DBA)。
-
A1級(jí)。
驗(yàn)證設(shè)計(jì),提供B3級(jí)保護(hù)的同時(shí)給出系統(tǒng)的形式化設(shè)計(jì)說(shuō)明和驗(yàn)證,以確信各安全保護(hù)真正實(shí)現(xiàn)。、
即安全機(jī)制是可靠的,且對(duì)安全機(jī)制能實(shí)現(xiàn)指定的安全策略給出數(shù)學(xué)證明。
4.2 審計(jì)跟蹤
-
審計(jì)功能把用戶對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來(lái)放入“審計(jì)日志”中,稱為審計(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)。
5.?數(shù)據(jù)加密
數(shù)據(jù)加密是防止數(shù)據(jù)庫(kù)中數(shù)據(jù)在存儲(chǔ)和傳輸中失密的有效手段。
加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)(稱為明文)變換為不可直接識(shí)別的格式(稱為密文),從而使得不知道解密算法的人無(wú)法獲知數(shù)據(jù)的內(nèi)容。
由于數(shù)據(jù)加密與解密也是比較費(fèi)時(shí)的操作,而且數(shù)據(jù)加密與解密程序會(huì)占用大量系統(tǒng)資源,因此數(shù)據(jù)加密功能通常也作為可選特征。
6. 統(tǒng)計(jì)數(shù)據(jù)庫(kù)的安全性
統(tǒng)計(jì)數(shù)據(jù)庫(kù)查詢的僅僅是某些記錄的統(tǒng)計(jì)值,例如求記錄數(shù)、和、平均值等,不允許用戶查詢單個(gè)記錄的信息。
-
例如:人口調(diào)查數(shù)據(jù)庫(kù),它包含大量的記錄,但其目的只是向公眾提供統(tǒng)計(jì)、匯總信息,而不是提供單個(gè)記錄的內(nèi)容。
在統(tǒng)計(jì)數(shù)據(jù)庫(kù)中,雖然不允許用戶查詢單個(gè)記錄的信息,但是用戶可以通過(guò)處理足夠多的匯總信息來(lái)分析出單個(gè)記錄的信息,這就給統(tǒng)計(jì)數(shù)據(jù)庫(kù)的安全性帶來(lái)嚴(yán)重的威脅。
7. MySQL的安全設(shè)置
7.1 用戶管理
MySQL的用戶包括root用戶和普通用戶。
-
root用戶是超級(jí)管理員,擁有對(duì)整個(gè)MySQL服務(wù)器完全控制的權(quán)限。
-
普通用戶只能擁有賦予給它的權(quán)限。
為了防止非授權(quán)用戶對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取,DBA可以創(chuàng)建登錄用戶、修改用戶信息和刪除用戶。
創(chuàng)建登錄用戶:
CREATE ?USER ? 用戶 ?[IDENTIFIED ?BY [PASSWORD] '密碼'][,用戶 ?[IDENTIFIED ?BY [PASSWORD] '密碼']]…;
-
用戶的格式:
用戶名@
主機(jī)名;沒(méi)有指定主機(jī)名,則主機(jī)名默認(rèn)為“%
”,表示一組主機(jī);localhost
表示本地主機(jī)。 -
IDENTIFIED BY
子句指定創(chuàng)建用戶時(shí)的密碼。
示例:創(chuàng)建用戶TEMPUSER,其口令為test。
CREATE USER tempuser@localhost IDENTIFIED BY 'temp';
示例:創(chuàng)建的新用戶的詳細(xì)信息自動(dòng)保存在系統(tǒng)數(shù)據(jù)庫(kù)mysql的user表中。
USE mysql; SELECT * FROM user WHERE user='tempuser';
修改用戶密碼:
SET PASSWORD FOR 用戶='新密碼';
示例:修改用戶賬號(hào)tempuser的密碼為123456。
SET PASSWORD FOR tempuser@localhost='123456';
修改用戶名:
RENAME USER 舊用戶名 TO 新用戶名[,舊用戶名 TO 新用戶名][,…];
示例:修改普通用戶tempuser的用戶名為temp_U。
RENAME USER tempuser@localhost TO temp_U@localhost;
刪除用戶:
DROP ?USER 用戶名[,…];
示例:刪除用戶temp_U。
DROP USER temp_U@localhost; ? USE mysql; SELECT * FROM user WHERE user='temp_U' and host='localhost';
7.2 權(quán)限管理
授予權(quán)限。
授予MySQL字段級(jí)別權(quán)限:
GRANT 權(quán)限名稱(列名[,列名,…])[, 權(quán)限名稱(列名[,列名,…]),…]ON ?TABLE 數(shù)據(jù)庫(kù)名.表名或視圖名TO 用戶[,用戶,…];
-
Column_priv權(quán)限表提供的權(quán)限名稱:
示例:為用戶column_user授予對(duì)emp表中列的操作權(quán)限。
CREATE USER column_user@localhost IDENTIFIED BY 'password'; ? GRANT SELECT(ename,sal,empno),UPDATE(sal) ? ON TABLE scott1.emp TO column_user@localhost; ? SELECT * FROM mysql.columns_priv;
授予MySQL表級(jí)別權(quán)限:
GRANT 權(quán)限名稱[, 權(quán)限名稱,…]ON ?TABLE 數(shù)據(jù)庫(kù)名.表名或數(shù)據(jù)庫(kù)名.視圖名TO 用戶[,用戶,…];
示例:為用戶table_user授予對(duì)emp表的操作權(quán)限。
CREATE USER table_user@localhost IDENTIFIED BY 'password'; ? GRANT ALTER,SELECT,INSERT(empno,ename) ON TABLE scott1.empTO table_user@localhost; ? SELECT * FROM mysql.tables_privWHERE host='localhost' and user='table_user';
授予MySQL存儲(chǔ)程序級(jí)別權(quán)限:
GRANT 權(quán)限名稱[, 權(quán)限名稱,…]ON ?FUNCTION|PROCEDURE 數(shù)據(jù)庫(kù)名.函數(shù)名 | 數(shù)據(jù)庫(kù)名.存儲(chǔ)過(guò)程名TO 用戶[,用戶,…];
示例:為用戶proc_user授予存儲(chǔ)過(guò)程的操作權(quán)限。
CREATE USER proc_user@localhost IDENTIFIED BY 'password'; ? GRANT ?EXECUTE ?ON PROCEDURE scott1.emp_p TO proc_user@localhost; ? GRANT ?ALTER ROUTINE,EXECUTE ?ON FUNCTION scott1.sum_fnTO proc_user@localhost; ? SELECT * FROM mysql.procs_priv;
授予MySQL數(shù)據(jù)庫(kù)級(jí)別權(quán)限:
GRANT 權(quán)限名稱[, 權(quán)限名稱,…] ?ON ? 數(shù)據(jù)庫(kù)名.*TO 用戶[,用戶,…];
示例:為用戶database_user授予對(duì)scott1數(shù)據(jù)庫(kù)的操作權(quán)限。
CREATE USER database_user@localhost IDENTIFIED BY 'password'; ? GRANT ?GRANT CREATE,SELECT,DROPON scott1.*TO database_user@localhost; ? SELECT * FROM mysql.db ?WHERE host='localhost' and db='scott1';
授予MySQL服務(wù)器管理員級(jí)別權(quán)限:
GRANT 權(quán)限名稱[, 權(quán)限名稱,…] ?ON ?*.* ?TO 用戶[,用戶,…];
示例:為用戶server_user授予對(duì)所有數(shù)據(jù)庫(kù)的操作權(quán)限。
CREATE USER server_user@localhost IDENTIFIED BY 'password'; ? GRANT ALL PRIVILEGES ON *.*TO server_user@localhost; ? SELECT * FROM mysql.userWHERE host='localhost' and user='server_user';
權(quán)限的轉(zhuǎn)移:
WITH GRANT OPTION
-
如果使用了WITH GRANT OPTION子句,則表示TO子句中的所有用戶都具有把自己所擁有的權(quán)限授予給其他用戶的權(quán)利。
示例:創(chuàng)建新用戶u1和u2,為u1賦予對(duì)dept表增刪改查的權(quán)限,并且u1能夠?qū)⑺鶕碛械臋?quán)限再賦予給u2。
CREATE USER u1@localhost IDENTIFIED BY '123'; CREATE USER u2@localhost IDENTIFIED BY '456'; ? GRANT SELECT,INSERT,UPDATE,DELETE ON company.deptTO u1@localhostWITH GRANT OPTION;
撤銷(xiāo)權(quán)限:
撤消所有權(quán)限:
REVOKE ?ALL ?PRIVILEGES,GRANT ?OPTIONFROM 用戶[,用戶,…];
示例:撤消用戶column_user@localhost的所有權(quán)限。
REVOKE ALL PRIVILEGES,GRANT OPTIONFROM column_user@localhost;
撤消指定權(quán)限:
REVOKE 權(quán)限名稱[(列名[,列名,…])][,權(quán)限名稱[(列名[,列名,…])],…]ON ?*.* | 數(shù)據(jù)庫(kù)名.* | 數(shù)據(jù)庫(kù)名.表名或視圖名FROM 用戶[,用戶,…];
示例:撤消用戶database_user@localhost的CREAT和DROP權(quán)限。
REVOKE ?CREATE,DROP ON scott1.*FROM database_user@localhost; ? SELECT * FROM mysql.dbWHERE host='localhost' and user='database_user';
7.3 角色管理
角色是具有名稱的一組相關(guān)權(quán)限的組合,即將不同的權(quán)限集合在一起就形成了角色。
角色的優(yōu)勢(shì):
-
當(dāng)為用戶授予角色時(shí),相當(dāng)于為用戶授予了多種權(quán)限。
-
避免了向用戶逐一授權(quán),從而簡(jiǎn)化了用戶權(quán)限的管理。
創(chuàng)建角色:
CREATE ROLE 角色名;
-
角色格式:
'角色名'@'主機(jī)名'。
示例:分別在本地主機(jī)上創(chuàng)建應(yīng)用程序角色app、運(yùn)維人員角色ops、開(kāi)發(fā)人員讀角色dev_read、開(kāi)發(fā)人員寫(xiě)角色dev_write。
CREATE ROLE 'app'@'localhost','ops'@'localhost','dev_read'@'localhost','dev_write'@'localhost'; ? SELECT * FROM mysql.userWHERE host='localhost' and user IN('app','ops','dev_read','dev_write');
授予角色權(quán)限:
示例:分別授予角色app數(shù)據(jù)讀寫(xiě)權(quán)限、角色ops訪問(wèn)數(shù)據(jù)庫(kù)權(quán)限、角色dev_read讀取權(quán)限、角色dev_write寫(xiě)權(quán)限。
GRANT SELECT,INSERT,UPDATE,DELETEON SCOTT1.* ?TO 'app'@'localhost'; ? GRANT ALL PRIVILEGESON SCOTT1.* ?TO 'ops'@'localhost'; ? GRANT ?SELECT ON SCOTT1.* ?TO 'dev_read'@'localhost'; ? GRANT ?INSERT,UPDATE,DELETEON SCOTT1.* ?TO 'dev_write'@'localhost';
授予用戶角色:
GRANT 角色[,角色, ...] TO 用戶[,用戶, ...]
示例:分別將角色授予新用戶app01、ops01、dev01、dev02、dev03。
GRANT 'app'@'localhost' TO 'app01'@'localhost'; ? GRANT 'ops'@'localhost' TO 'ops01'@'localhost'; ? GRANT 'dev_read'@'localhost' TO 'dev01'@'localhost'; ? GRANT 'dev_read'@'localhost','dev_write'@'localhost'TO ?'dev02'@'localhost','dev03'@'localhost';
用戶在使用據(jù)夜色權(quán)限前必須先激活角色,設(shè)置語(yǔ)句如下:
SET GLOBAL activate_all_roles_on_login = ON
撤銷(xiāo)用戶角色:
REVOKE 角色[,角色,…] FROM 用戶[,用戶,…];
示例:撤消用戶app01的角色app。
REVOKE 'app'@'localhost' FROM 'app01'@'localhost'; ? SHOW GRANTS FOR 'app01'@'localhost' USING 'app'@'localhost';
刪除角色:
DROP ROLE ? 角色[,角色,…];
示例:刪除角色app和ops。
DROP ROLE 'app'@'localhost','ops'@'localhost';