数据库安全应用 使用MySQL的23个注意事项
使用【shǐ yòng】🥇MySQL,安全问【ān quán wèn】👥题不能不注意👰。以下是MySQL提示的23个注意【gè zhù yì】事项:
1.如果客户端和【hù duān hé】🕧服务器端的连接需要🚟跨越并通过不【tōng guò bú】可信任的网络🕘,那么就需要使【xū yào shǐ】用【yòng】SSH隧道来加密该🍣连接的🎨通信【tōng xìn】。
2.用set password语句来😣修改用户的密码,三个步【sān gè bù】骤【zhòu】💧,先“mysql -u root”登陆数据库系【jù kù xì】统📤,然后【rán hòu】🔝“mysql> update mysql.user set password=password('newpwd')”,最后执【zuì hòu zhí】🗺行“flush privileges”就可以了。
3.需要提防的攻击有【jī yǒu】👷,防偷听、篡改🥞、回放、拒绝服🐁务等,不涉及可用性和容错【hé róng cuò】方面📶。对所有【duì suǒ yǒu】的连接【de lián jiē】、查询🐕、其他操【qí tā cāo】🍨作使用【zuò shǐ yòng】基于【jī yú】ACL即访问控制列表的安全措施来完成🌹。也有一【yě yǒu yī】些对【xiē duì】➡SSL连接的支持💕。
4.除了root用户外的其他任何用【rèn hé yòng】🏴户不允【hù bú yǔn】🕝许访问mysql主数据库中的【kù zhōng de】👖user表;
加密后【jiā mì hòu】🕟存放在user表中的【biǎo zhōng de】加密后【jiā mì hòu】🕟的用户🀄密码一🛩旦泄露😰,其他人【qí tā rén】可以随🥍意用该【yì yòng gāi】用户名/密码相【mì mǎ xiàng】应的数据库;
5.用grant和🛥revoke语句来【yǔ jù lái】进行用🕣户访问【hù fǎng wèn】🤮控制的【kòng zhì de】工作;
6.不使用【yòng】🙈明文密🌙码【mǎ】🌟,而是使【ér shì shǐ】用【yòng】🙈md5()和🤲sha1()等单向的哈系函数来设置密【shè zhì mì】码【mǎ】🌟;
7.不选用字典中的字来做密码;
8.采用防👧火墙来【huǒ qiáng lái】去掉50%的外部【de wài bù】🎬危险,让数据♏库系统躲在防🤮火墙后【huǒ qiáng hòu】面工作,或放置【huò fàng zhì】在DMZ区域中;
9.从因特网上用【wǎng shàng yòng】nmap来扫描【lái sǎo miáo】3306端口【duān kǒu】🏴,也可用telnet server_host 3306的方法🍛测试,不能允许从非【xǔ cóng fēi】信任网络中访💿问数据🍪库服务器的【qì de】3306号【hào】🚇TCP端口【duān kǒu】🏴,因此需要在防火墙或【huǒ qiáng huò】🗂路由器上做设定🖲;
10.为了防😔止被恶意传入非法参数,例如where ID=234,别人却输入🕊where ID=234 OR 1=1导致全🕜部显示,所以在web的表单📝中使用【zhōng shǐ yòng】''或""来用字🏷符串【fú chuàn】🕧,在动态【zài dòng tài】URL中加入%22代表双【dài biǎo shuāng】📨引号【yǐn hào】🚄、%23代表井号、%27代表单【dài biǎo dān】📻引号【yǐn hào】🚄;传递未检查过【jiǎn chá guò】的值给mysql数据库是非常【shì fēi cháng】危险的;
11.在传递🔺数据给mysql时检查【shí jiǎn chá】一下大小【xiǎo】🥜;
12.应用程🦋序需要连接到数据库【shù jù kù】应该使【yīng gāi shǐ】💾用一般【yòng yī bān】的用户🤲帐号,只开放少数必要的权限给该【xiàn gěi gāi】🍆用户🤲;
13.在各编【zài gè biān】程接口(C C++ PHP Perl Java JDBC等【děng】🎣)中使用特定【tè dìng】🕡‘逃脱字符🔉’函数;
在因特🏻网上使用【yòng】mysql数据库时一定少用【yòng】传输明文【shū míng wén】💄的数据✒,而用【ér yòng】SSL和SSH的加密【de jiā mì】🏷方式数🕸据来传输【shū】;
14.学会使【xué huì shǐ】🛰用【yòng】tcpdump和strings工具来查看传【chá kàn chuán】📳输数据🌂的安全🕓性,例如tcpdump -l -i eth0 -w -src or dst port 3306 | strings。以普通【yǐ pǔ tōng】🍐用户来【yòng hù lái】启动mysql数据库服务;
15.不使用【bú shǐ yòng】到表的【dào biǎo de】联结符号🌦,选用的🍞参数 --skip-symbolic-links;
16.确信在mysql目录中只有启动数据【dòng shù jù】🛃库服务⛲的用户才可以【cái kě yǐ】对文件有读和【yǒu dú hé】🍍写的权限【xiàn】🌫;
17.不许将process或super权限付🎾给非管🍼理用户,该🔎mysqladmin processlist可以列举出当【jǔ chū dāng】前执行【qián zhí háng】的查询【de chá xún】文本;super权限可【quán xiàn kě】👫用于切【yòng yú qiē】📌断客户端连接、改变服【gǎi biàn fú】务器运😠行参数【háng cān shù】状态、控制拷😾贝复制数据库【shù jù kù】的服务🍁器;
18.file权限不付给管【fù gěi guǎn】📐理员以外的用户【hù】🏕,防止出现load data '/etc/passwd'到表中再用【zài yòng】select 显示出👻来的问🔑题【tí】;
19.如果不🎷相信🍳DNS服务公司的服【sī de fú】务,可以在【kě yǐ zài】🚈主机名称允许【chēng yǔn xǔ】表中只👵设置IP数字地【shù zì dì】址;
20.使🚁用max_user_connections变量来使🚁mysqld服务进程【chéng】🚣,对一个🎡指定帐【zhǐ dìng zhàng】户限定连接数【lián jiē shù】;
21.grant语句也支持资【zhī chí zī】源控制【yuán kòng zhì】🍄选项🆖;
22.启动🎛mysqld服务进程的安全选项【quán xuǎn xiàng】🌖开关,--local-infile=0或【huò】1 若是🤝0则客户端程序就无法🏈使用【yòng】local load data了,赋权的【fù quán de】一个例😗子【zǐ】👕grant insert(user) on mysql.user to 'user_name'@'host_name';若使用【yòng】🥌--skip-grant-tables系统将【xì tǒng jiāng】🗾对任何🚊用【yòng】户的访问不做任何访问控🚑制【zhì】,但可以【dàn kě yǐ】用【yòng】mysqladmin flush-privileges或【huò】mysqladmin reload来开启访问控🚑制【zhì】;默认情况是【kuàng shì】show databases语句对所有用【suǒ yǒu yòng】户开放📈,可以用【kě yǐ yòng】--skip-show-databases来关闭掉【diào】。
23.碰到Error 1045(28000) Access Denied for user 'root'@'localhost' (Using password:NO)错误时【cuò wù shí】📔,你需要重新设💐置密码【zhì mì mǎ】,具体方法是:先用--skip-grant-tables参数启🖐动【dòng】mysqld,然后执🐐行【háng】🗑mysql -u root mysql,mysql>update user set password=password('newpassword') where user='root';mysql>Flush privileges;,最后重新启动【xīn qǐ dòng】mysql就可以【jiù kě yǐ】了。(文🏔/fen)
关键词:数据库,MySQL
阅读本文后您有什么感想? 已有 人给出评价!
- 1
- 1
- 1
- 1
- 6
- 1