博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL简单安全的十个设置方法
阅读量:6656 次
发布时间:2019-06-25

本文共 3157 字,大约阅读时间需要 10 分钟。

Mysql的默认安装参数是mysql性能最好的配置方法,但会造成数据部安全,且服务器也面临被入侵的风险,也有可能会在短时间内,出现一些性能的问题

这边文章从不同的角度去配置mysql的参数,提高安全的方法,你不能去限制别人而已攻击你的mysql db server,但你可以让他攻击和破解浪费更多的时间

一:用户和密码设置

刚安装好的mysql是没有密码的,只要能登陆到server主机的都可以无限制的访问和操作mysql 数据库,所以设置密码,是管理mysql数据库的第一步

Mysqladmin -u root  password 密码

因为mysql中的root是超级用户,很多攻击者都是想要获取root的密码,根据这点可以更改root的用户名,降低风险

mysql> update user set user='biao' where user='root';

Query OK, 1 row affected (0.22 sec)

Rows matched: 1  Changed: 1  Warnings: 0

也就是说将root的用户名更改为biao,密码和host都是不变的,之后如果再使用root账户登录,就是会提示你被拒绝的

二:增加用户和权限的设置

如果需要给开发或者维护人员添加账号,对权限进行处理,能赋予只读的就赋予只读的权限,或者对特定数据库名给写的权限,以及对登录IP也可以进行限制

GRANT ALL ON *.* TO 'root'@'%'; 这样是对所有的主机都可以访问,只要root的密码是正确的

也可以是域名

GRANT ALL ON *.* TO  db

也可以是网段

GRANT ALL ON *.* TO  db

也可以通过linuxiptables 定义访问策略

三:删掉mysql的测试库

[root@test02 ~]# mysql -D  test

不需要验证即可登录到库

mysql> drop database test;

Query OK, 1 row affected (0.13 sec)

Test库不需要任何验证都可以登录,不安全,且是测试库,可以删掉

四:禁用LOCAL INFILE

禁用”LOAD DATA LOCAL INFILE”命令,这有助于防止非授权用户访问本地文件。在PHP应用程序中发现有新的SQL注入漏洞时,这样做尤其重要。

此外,在某些情况下,LOCAL INFILE命令可被用于访问操作系统上的其它文件(如/etc/passwd),应使用下现的命令:

mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1

更简单的方法是:

mysql> SELECT load_file("/etc/passwd")

为禁用LOCAL INFILE命令,应当在MySQL配置文件的[mysqld]部分增加下面的参数:

set-variable=local-infile=0

五:移除匿名账户和不用的账户

有些mysql中,数据库的用户名为空,对应host主机的任何人都可以连接到数据库,使用命令检查:

mysql> select user,host from mysql.user where user='';

+------+-----------+

| user | host      |

+------+-----------+

|      | localhost |

|      | test02    |

+------+-----------+

2 rows in set (0.00 sec)

删除这些存在安全隐患的用户名

mysql> delete from mysql.user where user='';

Query OK, 2 rows affected (0.00 sec)

如果需要给相应的主机赋予权限,使用grant语句就可以

六:系统权限的管理

在安装和配置mysql的时候,mysql的主要的配置目录/data/mysql 数据存储目录,/usr/local/mysqlmysql的程序安装目录,一般都是将二者的属主和属组 赋予给 mysql用户和mysql组,再设置权限的时候:chmod -R 774 即可,注意:mysql用户要设置密码

七:mysql的命令历史

在用户访问的mysql控制台中,所有的历史命令都被记录在~/.mysql_history,如果攻击者访问这个文件,就可以获取到mysql的结构信息

Cat  ~/.mysql_history

为了移除和禁用这个文件,可以将日志发送到/dev/null

$export mysql_histfile=/dev/null

八:安全补丁

经常关注mysql官网的相关信息,进行补丁的查看和修复

九:mysql启用日志

用来记录mysql实例对某种条件作出响应时写入的文件,如错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件

错误文件:通过 show variables like log_error' 查看日志的放置路径

Mysql中经常用到的是二进制日志和redo log,二者简单的区别在于:

二进制日志文件会记录所有与mysql相关的日志记录,包括innodbmyisambdb等其他存储引擎日志,而innodbredo log只存储有关的本身事务日志。

二进制日志文件,不管日志的记录格式是statement或者ROW或者mixed,其记录的都是一个事务的具体操作。而innodbredo log记录的关于每个页的更改的物理情况

日志的写入时间:二进制日志写入是在事务提交前进行记录的,而事务进行的过程中,不断有重做日志条目被写入到redo log

启用二进制日志:

log-bin=mysql-bin 一般是放在了mysqldatadir

十:mysql的数据备份

Mysql的备份方式有:mysqldump,直接copy文件,以及在线备份工具:xtrabackup

Mysqldump和直接copy文件对 myisam的存储引擎比较方便,

借用工具:xtrabackup 可以在线备份innodb的数据文件

简单的描述下二者的操作原理

Mysqldump 采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,建议加上--opt参数,快速的导入和导出

对于InnoDBXtraBackup基于InnoDBcrash-recovery功能进行备份。

crash-recovery是这样的:InnoDB维护了一个redo log,又称为 transaction log,也叫事务日志,它包含了InnoDB数据的所有改动情况。InnoDB启动的时候先去检查datafiletransaction log,然后应用所有已提交的事务并回滚所有未提交的事务。

XtraBackup在备份的时候并不锁定表,而是一页一页地复制InnoDB的数据,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走(因为transactions log文件大小有限,写满之后,就会从头再开始写,新数据可能会覆盖到旧的数据,所以一旦变化就要立刻复制走)。在全部数据文件复制完成之后,停止复制logfile

      本文转自天真花语  51CTO博客,原文链接:http://blog.51cto.com/caibird/1338905,如需转载请自行联系原作者

你可能感兴趣的文章
QStringList类常用方法
查看>>
5款让你的旧电脑重获新生的Linux发行版
查看>>
罗森伯格2012区域数据机房建设及运维高层论坛
查看>>
Linux下自动分割Nginx日志文件(三)-----Logrotate
查看>>
Javascript正则表达式
查看>>
vmware workstatiion 11
查看>>
Ubuntu安装配置Mysql
查看>>
RGB565->RGB888
查看>>
LVS(Linux Virtual Server)Linux 虚拟服务器介绍及配置
查看>>
代码 实现UIDatePicker控件 和 Tab Bar 视图切换
查看>>
自我实现内存管理
查看>>
学Java应该学什么?
查看>>
0923异常——练习题目作业
查看>>
创建ios界面的三步骤
查看>>
E:nth-child(n)实现奇偶匹配
查看>>
开始Flask项目
查看>>
结对作业:四则运算网页版
查看>>
POI 导出Excel
查看>>
js子页面获取父页面数据
查看>>
团队冲刺第三天
查看>>