MySQL安全配置详解(3)_MySQL教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:MySQL中实现高性能高并发计数器方案
现在有很多的项目,对计数器的实现甚是随意,比如在实现网站文章点击数的时候,是这么设计数据表的,如:article_id, article_name, article_content, article_author, article_view在article_view中记录该文章的浏览量。诈一看似乎没有问题。对于小站,比如本博客,就


1. 主机层:
1) windows可以通过windows防火墙
2) Linux下可以通过iptables
来限制允许访问mysql端口的IP地址
//只允许指定的IP进行访问
iptables -A INPUT -p tcp -s xxxx.xxxx.xxxx.xxxx/24 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp -s xxxx.xxxx.xxxx.xxxx/24 --dport 3306 -j ACCEPT
..
iptables -P INPUT DROP
 

可以看到,这种方法的缺点是硬编码导致灵活性低,如果mysql的默认端口3306被修改了(例如8890),则这条iptables规则也需要相应的修改


mysql> select host,user,password from user;
+-----------+------+----------------+
| host | user | password |
+-----------+------+----------------+
| localhost | root | *832EB84CB764129D05D498ED9CA7E5CE9B8F83EB |
| . | root | *832EB84CB764129D05D498ED9CA7E5CE9B8F83EB |
| :: | root | *832EB84CB764129D05D498ED9CA7E5CE9B8F83EB |
| localhost | | |
+-----------+------+----------------+
 

这几行记录表明了root这个账户只能是本机登录,在部署的过程中,我们可以为指定账户添加某个安全的跳板机,并保证这个跳板机IP是不变的。

0×2: 修改mysql的端口
windows下可以修改配置文件my.ini来实现,linux可以修改配置文件my.cnf来实现。


port = 3306
 

对mysql端口的修改可以从一定程度上防止端口扫描工具的扫描。

0×3: 限制连接用户的数量
数据库的某用户多次远程连接,会导致性能的下降和影响其他用户的操作,有必要对其进行限制。可以通过限制单个账户允许的连接数量来实现,设置my.cnf文件的mysqld中的max_user_connections变量来完成。GRANT语句也可以支持资源控制选项来限制服务器对一个账户允许的使用范围。


#vi /etc/my.cnf
[mysqld]
max_user_connections 2
 

4. 密码策略安全

这里所谓的密文策略安全包括Mysql自身的账户密码的安全、也包括网站用户的密码安全。

0×1: mysql账户密码

因为mysql本身没有抗穷举的帐号锁定机制,所以对于mysql自身的登录帐号,尤其是root帐号,需要遵循"密码强度策略"设置高强度的密码,保证攻击者从穷举帐号攻击这条路无法获得合适的投资收益比。

0×2: 网站用户的密码

数据库管理员无法规定用户的网站使用什么样的密码策略,这完全取决于用户自己的编码习惯、或者说是站长所使用的CMS的编码习惯。这方面,mysql无法做的更多,但也许可以做的是建立一个针对网站密码穷举、脱库攻击的日志追溯系统,当发生脱库攻击时能第一时间给用户提供"事发现场"的更多信息。或者数据库管理员主动进行可控的撞库测试,提前帮助用户发生潜在的撞库、脱库风险。

5. Mysql日志

启动Mysql的日志不仅可以为我们提供性能热点的分析,还可以帮助我们加固Mysql数据库的安全,例如:


1. 从日志中获得典型SQL注入语句
2. 利用正则模型从日志中捕获注入攻击的发生
3. 在脱库、数据泄漏之后获得关于受攻击数据库的情况、泄漏范围等数据
 

mysql有以下几种日志,它们都在my.ini中进行配置:


1. 错误日志:-log-err
log-error=E:/wamp/logs/mysql_error.log

2. 查询日志(记录所有SQL语句):-log
log=E:/wamp/logs/mysql.log

3. 慢查询日志:-log-slow-queries
1) 查看慢查询时间
show variables like "long_query_time";默认10s
2) 查看慢查询配置情况
show status like "%slow_queries%";
3) 查看慢查询日志路径
show variables like "%slow%";
//存储位置、长SQL的阈值
E:\wamp\bin\mysql\mysql5.6.12\data\LittleHann-PC-slow.log
long_query_time=5

4. 更新日志:-log-update

5. 二进制日志:-log-bin//记录除select语句之外的所有sql语句到日志中,可以用来恢复数据文件log-bin=E:/wamp/logs/bin
 

查看日志开启情况:


show variables like 'log_%';
+-------------------------------------+
| Variable_name | Value |
+-------------------------------------+
| log_bin | ON |
| log_bin_basename | E:\wamp\bin\mysql\mysql5.6.12\data\mysql-bin |
| log_bin_index | E:\wamp\bin\mysql\mysql5.6.12\data\mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| log_error | E:\wamp\logs\mysql.log |
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | OFF |
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| log_throttle_queries_not_using_indexes | 0 |
| log_warnings | 1 |
+-------------------------------------+

6. Mysql数据库服务所在主机安全配置

安全问题是一个综合的纵深问题,Mysql的安全配置和所在系统(*iux、windows)的安全配置密切相关。

0×1: mysql进程运行账号
所谓"mysql进程运行账户",即以什么样的身份权限来启动mysqld这个服务进程的。对于操作系统来说,每一个进程都有一个对应的"进程运行帐号",这个进程运行帐号决定了这个应用程序可以获得哪些操作系统的权限。

分享:创建MySQL从库
我们知道Oracle有DataGuard实时备份数据,可以做主备切换,而MySQL也有自己的一套备库方案,称之为主从复制。 搭建MySQL从库是为了实时同步主库数据,同时也可以分担主库的读压力,对数据库端做成读写分离结构。 搭建MySQL主从库注意点: 1.主库和从库的 server-id 一

来源:模板无忧//所属分类:MySQL教程/更新时间:2014-11-03
相关MySQL教程