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