当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL数据库安全配置介绍第1/2页

MySQL数据库安全配置介绍第1/2页

2017年12月12日  | 移动技术网IT编程  | 我要评论

3、外部网络安全

mysql数据库安装好以后,unix平台的user表是这样的:

mysql> use mysql;

database changed

mysql> select host,user,password,select_priv,grant_priv from user;

4 rows in set (0.00 sec)

windows平台的user表是这样的:

mysql> use mysql;

database changed

mysql> select host,user,password,select_priv,grant_priv from user;

4 rows in set (0.00 sec)

我们先来看unix平台的user表。其中redhat只是我试验机的机器名,所以实际上unix平台的mysql默认只允许本机才能连接数据库。但是缺省root用户口令是空,所以当务之急是给root用户加上口令。给数据库用户加口令有三种方法:

1)在shell提示符下用mysqladmin命令来改root用户口令:

shell>mysqladmin -uroot password test

这样,mysql数据库root用户的口令就被改成test了。(test只是举例,我们实际使用的口令一定不能使用这种易猜的弱口令)

2)用set password修改口令:

mysql> set password for root@localhost=password('test');

这时root用户的口令就被改成test了。

3)直接修改user表的root用户口令:

mysql> use mysql;

mysql> update user set password=password('test') where user='root';

mysql> flush privileges;

这样,mysql数据库root用户的口令也被改成test了。其中最后一句命令flush privileges的意思是强制刷新内存授权表,否则用的还是缓冲中的口令,这时非法用户还可以用root用户及空口令登陆,直到重启mysql服务器。

我们还看到user为空的匿名用户,虽然它在unix平台下没什么权限,但为了安全起见我们应该删除它:

mysql> delete from user where user='';

windows版本mysql的user表有很大不同,我们看到host字段除了localhost还有是%。这里%的意思是允许任意的主机连接mysql服务器,这是非常不安全的,给攻击者造成可乘之机,我们必须删除host字段为%的记录:

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连接,增加安全性。(非常推荐)

6)mysql的更多mysqld启动选项请见mysql手册4.16.4 mysqld command-line options

references

mysql manual(http://www.mysql.com/documentation/)

晏子的mysql管理员指南(http://clyan.hongnet.com/)

access granted(http://www.devshed.com/server_side/mysql/access)

2

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网