MySQL数据库配置技巧

二叶头条

二叶头条

2016-02-19 14:07

今天图老师小编给大家介绍下MySQL数据库配置技巧,平时喜欢MySQL数据库配置技巧的朋友赶紧收藏起来吧!记得点赞哦~

用root用户启动远程服务一直是安全大忌,因为如果服务程序出现问题,远程攻击者极有可能获得主机的完全控制权。MySQL从3.23.15版

本开始时作了小小的改动,默认安装后服务要用mysql用户来启动,不允许root用户启动。如果非要用root用户来启动,必须加上--user=root

的参数(./safe_mysqld --user=root &)。因为MySQL中有LOAD DATA INFILE和SELECT ... INTO OUTFILE的SQL语句,如果是root用户启动了

MySQL服务器,那么,数据库用户就拥有了root用户的写权限。不过MySQL还是做了一些限制的,比如LOAD DATA INFILE只能读全局可读的文件

,SELECT ... INTO OUTFILE不能覆盖已经存在的文件。

本地的日志文件也不能忽视,包括shell的日志和MySQL自己的日志。有些用户在本地登陆或备份数据库的时候为了图方便,有时会在命令行参

数里直接带了数据库的密码,如:

shell/usr/local/mysql/bin/mysqldump -uroot -ptest testtest.sql
shell/usr/local/mysql/bin/mysql -uroot -ptest

这些命令会被shell记录在历史文件里,比如bash会写入用户目录的.bash_history文件,如果这些文件不慎被读,那么数据库的密码就会泄漏

。用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。如果数据库用户用SQL语句修改了数据库密码,也会

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

因.mysql_history文件而泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。
另外这两个文件我们也应该不让它记录我们的操作,以防万一。

shellrm .bash_history .mysql_history
shellln -s /dev/null .bash_history
shellln -s /dev/null .mysql_history

上门这两条命令把这两个文件链接到/dev/null,那么我们的操作就不会被记录到这两个文件里了。
编程需要注意的一些问题

不管是用哪种程序语言写连接MySQL数据库的程序,有一条准则是永远不要相信用户提交的数据!
对于数字字段,我们要使用查询语句:SELECT * FROM table WHERE ID=''234'',不要使用SELECT * FROM table WHERE ID=234这样的查询语句

。MySQL会自动把字串转换为数字字符并且去除非数字字符。如果用户提交的数据经过了mysql_escape_string处理,这样我们就可以完全杜绝

了sql inject攻击,关于sql inject攻击请参考下面链接的文章:
http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
http://www.ngssoftware.com/papers/advanced_sql_injection.pdf

各种编程语言该注意的问题:

1)所有Web程序:
a)尝试在Web表单输入单引号和双引号来测试可能出现的错误,并找出原因所在。
b)修改URL参数带的%22 (''"''), %23 (''#''), 和 %27 ('''''')。
c)对于数字字段的变量,我们的应用程序必须进行严格的检查,否则是非常危险的。
d)检查用户提交的数据是否超过字段的长度。
e)不要给自己程序连接数据库的用户过多的访问权限。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

2)PHP:
a)检查用户提交的数据在查询之前是否经过addslashes处理,在PHP 4.0.3以后提供了基于MySQL C API的函数mysql_escape_string()。

3)MySQL C API:
a)检查查询字串是否用了mysql_escape_string() API调用。

4)MySQL++:
a)检查查询字串是否用了escape和quote处理。

5)Perl DBI:
a)检查查询字串是否用了quote()方法。

6)Java JDBC:
a)检查查询字串是否用了PreparedStatement对象。

4、一些小窍门

1)如果不慎忘记了MySQL的root密码,我们可以在启动MySQL服务器时加上参数--skip-grant-tables来跳过授权表的验证 (./safe_mysqld

--skip-grant-tables &),这样我们就可以直接登陆MySQL服务器,然后再修改root用户的口令,重启MySQL就可以用新口令登陆了。

2)启动MySQL服务器时加上--skip-show-database使一般数据库用户不能浏览其它数据库。

3)启动MySQL服务器时加上--chroot=path参数,让mysqld守护进程运行在chroot环境中。这样SQL语句LOAD DATA INFILE和SELECT ... INTO

OUTFILE就限定在chroot_path下读写文件了。这里有一点要注意,MySQL启动后会建立一个mysql.sock文件,默认是在/tmp目录下。使用了

chroot后,MySQL会在chroot_path/tmp去建立mysql.sock文件,如果没有chroot_path/tmp目录或启动MySQL的用户没有这个目录写权限就不能

建立mysql.sock文件,MySQL会启动失败。比如我们加了--chroot=/usr/local/mysql/启动参数,那么最好建立一个启动MySQL的用户能写的
/usr/local/mysql/tmp目录,当然我们也可以用--socket=path来指定mysql.sock文件的路径,但这个path一定要在chroot_path里面。

4)启动MySQL服务器时加上--log-slow-queries[=file]参数,这样mysqld会把SQL命令执行时间超过long_query_time的写入file文件。如果没

有指定=file,mysqld默认会写到数据目录下的hostname-slow.log。如果只指定了filename,没有指定路径,那么mysqld也会把filename写到

数据目录下。我们通过这个日志文件可以找出执行时间超长的查询语句,然后尽可能的优化它减轻MySQL服务器的负担。

5)如果我们只需本机使用MySQL服务,那么我们还可以加上--skip-networking启动参数使MySQL不监听任何TCP/IP连接,增加安全性。

展开更多 50%)
分享

猜你喜欢

MySQL数据库配置技巧

编程语言 网络编程
MySQL数据库配置技巧

mysql 主从数据库配置

编程语言 网络编程
mysql 主从数据库配置

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

osworkflow的数据库配置(mysql)

编程语言 网络编程
osworkflow的数据库配置(mysql)

Mysql数据库的安全配置、实用技巧

MySQL mysql数据库
Mysql数据库的安全配置、实用技巧

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL数据库安全配置指南(一)

编程语言 网络编程
MySQL数据库安全配置指南(一)

MySQL数据库安全配置指南(二)

编程语言 网络编程
MySQL数据库安全配置指南(二)

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

MySQL教程:相关的环境变量

MySQL教程:相关的环境变量

vba Do Until

vba Do Until
下拉加载更多内容 ↓