阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL数据加密以及安全维护

102次阅读
没有评论

共计 4524 个字符,预计需要花费 12 分钟才能阅读完成。

数据库可谓公司核心了,你是否对公司的数据有有效的安全措施呢?你是如何有效管理你的 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)用户命令行为审计

避免一些用户在系统用明文登陆,将用户在服务器系统执行的命令都记录下来,当然,生产服务器是不允许不专业的人进去的,只是一些公司对安全没有足够重视。

3.3)对数据库用户增删改查进行记录

可以通过对数据库进行配置,听过二进制日志查找那些误操作记录。

4)如何对数据库备份?

数据库备份可谓是王道,选择有效数据库备份也很重要,选择合理的用户,不管是 shell,还是 py,如何有效避免密码问题,不管是用环境变量方式还是脚本加密方式,逻辑备份还是增量备份,三点比较重要:

4.1)备份的效率和完整性

4.2)备份的数据加密

4.3)备份的异地维护

4.4)脚本备份的安全维护

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

5.1)对数据库备份,然后对 tar xz zip 压缩然后加密

5.2)备份局域网传输对备份目录进行安全维护

5.3)异地备份,或者传输数据注意加密传输

eg:

[root@MySQL ~]# ll
总用量 66352
-rw-r–r– 1 root root 67940718 12 月 21 2016 2016-12-21-07-00-01.sql
[root@MySQL ~]# du -sh 2016-12-21-07-00-01.sql
65M 2016-12-21-07-00-01.sql
[root@MySQL ~]# tar -czf – 2016-12-21-07-00-01.sql |openssl enc -e -aes256 -out MySQLbak_$(date +%F-%H-%M-%S).tar.gz
enter aes-256-cbc encryption password:
Verifying – enter aes-256-cbc encryption password:  #加密密码
[root@MySQL ~]# ll
总用量 76536
-rw-r–r– 1 root root 67940718 12 月 21 2016 2016-12-21-07-00-01.sql
-rw-r–r– 1 root root 10426544 1 月  28 13:23 MySQLbak_2016-01-28-13-23-10.tar.gz
[root@MySQL ~]# du -sh *
65M 2016-12-21-07-00-01.sql
10M MySQLbak_2016-01-28-13-23-10.tar.gz
[root@MySQL ~]# mv 2016-12-21-07-00-01.sql /opt/
[root@MySQL ~]# ll
总用量 10184
-rw-r–r– 1 root root 10426544 1 月  28 13:23 MySQLbak_2016-01-28-13-23-10.tar.gz
[root@MySQL ~]# ll
总用量 10184
-rw-r–r– 1 root root 10426544 1 月  28 13:23 MySQLbak_2016-01-28-13-23-10.tar.gz
[root@MySQL ~]# openssl enc -d -aes256 -in MySQLbak_2016-01-28-13-23-10.tar.gz |tar xz -C /root/
enter aes-256-cbc decryption password:  #错误密码
 
gzip: stdin: not in gzip format
tar: Child died with signal 13
tar: Error is not recoverable: exiting now
error writing output file
[root@MySQL ~]# openssl enc -d -aes256 -in MySQLbak_2016-01-28-13-23-10.tar.gz |tar xz -C /root/
enter aes-256-cbc decryption password:    #正确密码
[root@MySQL ~]# ll
总用量 76536
-rw-r–r– 1 root root 67940718 12 月 21 2016 2016-12-21-07-00-01.sql
-rw-r–r– 1 root root 10426544 1 月  28 13:23 MySQLbak_2016-01-28-13-23-10.tar.gz
[root@MySQL ~]#

MySQL 数据加密以及安全维护

MySQL 数据加密以及安全维护

enc – openssl 命令使用加密进行编码

-e – 用来加密输入文件的 enc 命令选项,这里是指前一个 tar 命令的输出

-aes256 – 加密用的算法

-out – 用于指定输出文件名的 enc 命令选项,这里文件名是 secured.tar.gz

-d – 用于解密文件

-C – 提取内容到指定目录

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

6.1)主从 ssl 加密

MySQL 数据加密以及安全维护

6.2)对 tcp 层和 ip 层进行 acl 限制

…..

本文是博主的一些经验和看法,要是大家有别的好建议,可以提出,感谢开源,感谢分享!

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/140772.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计4524字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中