數據庫安全(quán)應用 使(shǐ)用MySQL的(de)23個注意(yì)事項
使用(yòng)MySQL,安全問題不(bú)能不注意。以下是MySQL提示的23個(gè)注意事(shì)項:
1.如果客戶端和服務器端的連接需要(yào)跨越(yuè)並通過不可信(xìn)任的網絡,那麽就需要使用(yòng)SSH隧(suì)道來加密該連接的通信。
2.用set password語句(jù)來(lái)修改用戶的密碼,三個(gè)步驟,先“mysql -u root”登(dēng)陸(lù)數據庫係統,然後“mysql> update mysql.user set password=password('newpwd')”,最後(hòu)執行“flush privileges”就可以(yǐ)了。
3.需要提(tí)防的攻擊有,防偷聽、篡(cuàn)改(gǎi)、回放、拒絕服務等,不涉及(jí)可用(yòng)性和(hé)容(róng)錯方麵。對所(suǒ)有的(de)連接、查詢、其他操作使用基於ACL即訪問控製列(liè)表的安全措施來完(wán)成。也有一(yī)些對(duì)SSL連接(jiē)的支(zhī)持。
4.除了root用(yòng)戶外的其他任何用戶不允許訪問mysql主數據庫(kù)中(zhōng)的user表(biǎo);
加密後存放(fàng)在user表(biǎo)中的加密(mì)後的用戶密碼一(yī)旦泄露,其他(tā)人可以隨意用該用戶名/密碼相(xiàng)應的(de)數據(jù)庫;
5.用grant和revoke語句來(lái)進(jìn)行用(yòng)戶訪問控(kòng)製的工作;
6.不使(shǐ)用明(míng)文密碼,而是使用md5()和sha1()等單向的哈係(xì)函數來設置密碼;
7.不選用(yòng)字典(diǎn)中的字來做密(mì)碼;
8.采用防火牆來(lái)去掉50%的外部危(wēi)險,讓數據庫係統躲(duǒ)在防火牆(qiáng)後麵工作,或放置(zhì)在DMZ區域中;
9.從(cóng)因特網上用nmap來(lái)掃描3306端口,也可用telnet server_host 3306的方法測試,不(bú)能允許從非信任網絡(luò)中訪問數據庫服務器(qì)的3306號(hào)TCP端口,因此需要在防火牆或路由器上做設定;
10.為了防止被惡意(yì)傳入非法參數,例如where ID=234,別人卻輸入(rù)where ID=234 OR 1=1導(dǎo)致全部顯(xiǎn)示,所以(yǐ)在web的表單(dān)中使用''或""來用字(zì)符串,在動態URL中(zhōng)加(jiā)入%22代表雙引號、%23代(dài)表井號、%27代表單(dān)引(yǐn)號;傳(chuán)遞未檢(jiǎn)查過的值給(gěi)mysql數據庫(kù)是非常危(wēi)險的(de);
11.在傳遞數(shù)據給mysql時檢查一(yī)下(xià)大小;
12.應用程序需要連(lián)接(jiē)到數據庫應(yīng)該(gāi)使用一(yī)般(bān)的用戶帳號,隻(zhī)開放少(shǎo)數必要的權限(xiàn)給該用戶;
13.在各(gè)編程接口(C C++ PHP Perl Java JDBC等)中(zhōng)使用特定‘逃脫字符(fú)’函數;
在因特網(wǎng)上使用mysql數(shù)據庫時一定少用傳輸(shū)明文(wén)的數據,而(ér)用SSL和SSH的加密方(fāng)式數據來傳輸;
14.學會使用(yòng)tcpdump和strings工(gōng)具來查看傳輸數(shù)據的安全性,例如tcpdump -l -i eth0 -w -src or dst port 3306 | strings。以普通用戶來啟動mysql數據庫服務;
15.不(bú)使用到表的聯結(jié)符號(hào),選用(yòng)的參數 --skip-symbolic-links;
16.確信在mysql目錄中隻有啟(qǐ)動數據庫服務的用戶才可以對(duì)文件有讀和寫的權限;
17.不許將process或super權限付給非管(guǎn)理(lǐ)用戶,該mysqladmin processlist可以列舉出當前執行的查詢文本;super權限可用於切斷(duàn)客戶端(duān)連接、改(gǎi)變服務器運行參數(shù)狀(zhuàng)態、控製拷(kǎo)貝複(fù)製數據庫(kù)的服務器(qì);
18.file權(quán)限(xiàn)不付給(gěi)管理員(yuán)以外的用(yòng)戶,防(fáng)止(zhǐ)出現load data '/etc/passwd'到表中再用select 顯示出來(lái)的問題;
19.如果不相信DNS服務公司的服務,可以在(zài)主(zhǔ)機名稱允許表中隻(zhī)設置(zhì)IP數字地址;
20.使用max_user_connections變(biàn)量來使mysqld服務進程(chéng),對一個指定帳戶限定連(lián)接數;
21.grant語句也支(zhī)持資源控製選項;
22.啟動mysqld服務進(jìn)程(chéng)的安全選項開關,--local-infile=0或1 若是0則客戶端程序就無法使用local load data了(le),賦(fù)權(quán)的(de)一個(gè)例子grant insert(user) on mysql.user to 'user_name'@'host_name';若使(shǐ)用--skip-grant-tables係統(tǒng)將對任何(hé)用戶的訪問不做任何訪問控製(zhì),但可以用mysqladmin flush-privileges或mysqladmin reload來開啟訪問控製;默認情(qíng)況(kuàng)是(shì)show databases語句對所有用戶開放(fàng),可以(yǐ)用--skip-show-databases來關閉掉。
23.碰到Error 1045(28000) Access Denied for user 'root'@'localhost' (Using password:NO)錯誤時,你需要重新(xīn)設置(zhì)密碼,具體(tǐ)方法是(shì):先(xiān)用--skip-grant-tables參數啟(qǐ)動mysqld,然後執行mysql -u root mysql,mysql>update user set password=password('newpassword') where user='root';mysql>Flush privileges;,最後重新啟(qǐ)動mysql就可以了。(文/fen)
關鍵詞:數據庫,MySQL
閱讀本文後(hòu)您有什麽感想(xiǎng)? 已有 人(rén)給(gěi)出評價!
- 1
- 1
- 1
- 1
- 6
- 1