MySQL数据加密以及安全维护

数据库可谓公司核心了,你是否对公司的数据有有效的安全措施呢?你是如何有效管理你的MySQL呢?这里不探讨其它数据库和云数据库,博主只分享自己一些生产经验,热爱开源热爱分享,感谢支持和指正!

抛出几个问题,当然我也会从以下几点对数据库安全进行探讨:

1)你是如何管理数据库数据权限?

2)如何管理MySQL密码?

3)如何对数据库进行日志管理和行为审计?

4)如何对数据库备份?

5)如何对数据库备份加密?

6)如何跨机房保障数据安全?

......

安全维护措施:

1、如何管理数据数据权限?

MySQL数据加密以及安全维护

root权限一定要只允许本机登陆,并且MySQL安全目录权限一定要只允许本地,root用户一定要密钥认证登陆系统(这涉及到系统安全的优化)而且MySQL的安装目录权限一定要合理设置,并且mysql用户不可登陆,只作为启动用。MySQL的binlog要合理管理,配置好权限。

MySQL数据加密以及安全维护

2)如何管理MySQL密码?

先说说常用的修改MySQL用户密码常用的的几种方式:

1、mysqladmin -u root password "newpass"
如果已经配置了密码:
mysqladmin -uroot -prenzhiyuan password '123456'
 
2、用SET PASSWORD命令
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('renzhiyuan');
Query OK, 0 rows affected (0.00 sec)
 
mysql>
 
3、UPDATE
mysql> UPDATE user SET Password = PASSWORD('123456') WHERE user = 'root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0
 
mysql>
 
查看:
mysql> select user,host,password from user;
+--------+---------------+-------------------------------------------+
| user  | host          | password                                  |
+--------+---------------+-------------------------------------------+
| root  | localhost    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root  | 127.0.0.1    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  +--------+---------------+-------------------------------------------+
5 rows in set (0.00 sec)
 
mysql>
 
MySQL在其内部是不存放用户的明文密码的,基本安全算是满足了。MySQL实际上是使用了两次SHA1夹杂一次unhex的方式对用户密码进行了加密,因此一般来说密文是通过不可逆加密算法得到的。这样即使敏感信息泄漏,除了暴力破解是无法快速从密文直接得到明文的。
 
mysql> select password('mypassword'),concat('*',sha1(unhex(sha1('mypassword'))));
+-------------------------------------------+---------------------------------------------+
| password('mypassword')                    | concat('*',sha1(unhex(sha1('mypassword')))) |
+-------------------------------------------+---------------------------------------------+
| *FABE5482D5AADF36D028AC443D117BE1180B9725 | *fabe5482d5aadf36d028ac443d117be1180b9725  |
+-------------------------------------------+---------------------------------------------+
1 row in set (0.47 sec)
 
mysql>

2.1)那么问题来了?不安全因素是什么?

2.1.1)MySQL的历史命令记录:

[root@mysql ~]# cat .mysql_history
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('renzhiyuan');
show databases;
use mysql;
select host,password,user from user;
grant all on *.* to root@'192.168.1.243' identified by 'renzhiyuan';
flush privileges;
show databases;
flush privileges;
[root@mysql ~]#

2.2.2)查看binlog可以查到明文密码(5.6后版本进行了修复)

2.3.3)以通过授权表直接越过密码。

2.4.4)明文登陆MySQL带来的安全问题

......

2.3)既然这样?如何有效的保护mysql的密码呢?

2.3.1)选择合适的版本(比如5.6.x)

2.3.2)登陆MySQL的时候,要禁止明文,防止别人通过历史命令查看。

2.3.3)管理好mysql的历史命令文件(默认在用户的.mysql_history下)

2.4.4)MySQL用户权限要慎重给,mysql相关核心文件权限要设置好,比如my.cnf,启动文件等

2.5.5)日志记录,行为审计

......

3)如何对数据库进行日志管理和行为审计?

3.1)操作日志管理

.mysql_history

要对历史命令文件进行安全维护

3.2)用户命令行为审计

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/48eafc3875507a52ba6a868d3d7b3c0f.html