国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > php教程 > [置顶] Web安全——数据库(MySQL)

[置顶] Web安全——数据库(MySQL)

来源:程序员人生   发布时间:2016-12-02 09:39:03 阅读次数:3291次


简介

 

数据安全是现在互联网安全非常重要1个环节。而且1旦数据出现问题是不可逆的,乃至是灾害性的。

 

有1些防护措施应当在前面几个博文说过了,就不再赘述。比如通过防火墙控制,通过系统的用户控制,通过Web利用的控制等。

 

想说的是,任何1个节点都不是单独存在的。

 

场景

 

1、确保利用本身安全。

2、控制系统用户对数据库的访问权限。

3、控制数据库用户对数据库的访问权限。

4、确保数据库敏感数据的安全。

5、确保数据库全部数据的完全性。

6、规范平常运维操作

7、公道的划分业务。

 

解决方案

 

利用安全

 

删除默许的数据库和用户

 

mysql初始化后会自动生成空用户和test库,这会对数据库构成要挟,我们全部删除。

 

mysql> drop database test;

mysql> use mysql;

mysql> delete from db;

mysql> delete from user where not(host=”localhost” and user=”root”);

mysql> flush privileges;

 

制止数据库从本地直接加载内容

 

在某些情况下,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

 

控制用户的权限

 

这里用户,指的是数据库里的用户。

 

控制访问的ip。

 

只允许信任的ip访问,其他的ip都应当谢绝。

比如:只允许办公网络,还有业务服务器对应的网络可以访问。

 

辨别角色

 

辨别角色,给不同的权限。角色的划分需要根据具体的使用处景。

 

下面简单举例:

 

1、角色:view。权限:只允许查询数据,不允许做任何修改。场景:业务正确性验证时

2、角色:update。权限:允许修改数据,但是不允许修改数据结构。场景:程序运行

3、角色:operate。权限:允许修改表结构,允许新增和修改表,不允许删除表,不允许删库。场景:产品要发布的时候才可使用,通过升级sql方式履行。

4、.....

 

加密敏感信息

 

要使用md5,sha等算法加密。这样即便数据丢失,也能减少损失。比如:登录密码,支付密码等。

 

保证数据的完全性

 

1、解决单点故障。主从,主主。

2、需要备份与还原。

 

规范平常操作

 

1、如果没有特殊需求,应当使用最小的用户。比如只使用查看的用户。

2、有需要修改数据或结构的操作,可以斟酌两人1起。或可以斟酌做成功能,减少人为直接操作数据库

3、在测试环境上测试OK,才往正式环境履行。

 

业务的划分

 

少用数据库

 

可以通过缓存,静态化。尽量少的使用数据库。能不使用数据库是最安全。

 

分库分表

 

敏感的数据和经常使用的数据,最好从表的设计上隔离。比如:用户的详情信息和支付信息最好分开。

 

优化sql

 

这个也非常重要,常常就是由于不重要sql的优化,所以数据库对应的服务器资源吃满不提供服务。

 

验证方法

 

通过不同的账号操作,判断有无对应的权限。

更多文章请关注天涯博客

简介

 

数据安全是现在互联网安全非常重要1个环节。而且1旦数据出现问题是不可逆的,乃至是灾害性的。

 

有1些防护措施应当在前面几个博文说过了,就不再赘述。比如通过防火墙控制,通过系统的用户控制,通过Web利用的控制等。

 

想说的是,任何1个节点都不是单独存在的。

 

场景

 

1、确保利用本身安全。

2、控制系统用户对数据库的访问权限。

3、控制数据库用户对数据库的访问权限。

4、确保数据库敏感数据的安全。

5、确保数据库全部数据的完全性。

6、规范平常运维操作

7、公道的划分业务。

 

解决方案

 

利用安全

 

删除默许的数据库和用户

 

mysql初始化后会自动生成空用户和test库,这会对数据库构成要挟,我们全部删除。

 

mysql> drop database test;

mysql> use mysql;

mysql> delete from db;

mysql> delete from user where not(host=”localhost” and user=”root”);

mysql> flush privileges;

 

制止数据库从本地直接加载内容

 

在某些情况下,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

 

控制用户的权限

 

这里用户,指的是数据库里的用户。

 

控制访问的ip。

 

只允许信任的ip访问,其他的ip都应当谢绝。

比如:只允许办公网络,还有业务服务器对应的网络可以访问。

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生