Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1356063
  • 博文数量: 107
  • 博客积分: 1715
  • 博客等级: 上尉
  • 技术积分: 3168
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-18 18:42
个人简介

阿里巴巴DBA,原去哪儿网DBA。专注于MySQL源码研究、DBA运维、CGroup虚拟化及Linux Kernel源码研究等。 github:https://github.com/HengWang/ Email:king_wangheng@163.com 微博 :@王恒-Henry QQ :506437736

文章分类

全部博文(107)

文章存档

2014年(2)

2013年(38)

2012年(67)

分类: 数据库开发技术

2013-04-07 23:58:53


目的

基于之前参与安全数据库GBase 8S的开发,以及一直以来从事数据库运维和开发工作,谈谈自己对数据库安全的一些看法,欢迎大家多多讨论。

安全策略

         数据库的安全策略可以从三个方面着手:系统层、数据库层以及应用层,通过这三个方面的整体的制定安全策略,可以有效的提高数据库的安全。

系统层安全策略

         由于本人对系统层的安全策略不甚了解,因此对系统层的安全策略,仅仅将自己遇到的集中安全策略进行简单介绍。

1、权限控制方面

首先在访问控制方面,通过用户权限的控制,实现用户操作的限制。此外通过使用跳板机策略,进一步控制用户的访问,这样多层权限控制的方式,可以有效提高对用户操作的安全性。

2、磁盘镜像策略

         通过对磁盘做镜像,防止因硬件原因造成的数据丢失。一般数据库生产环境下,采用raid10raid5的方式,保证数据库中数据的安全。

         系统层的安全,是数据库安全的基础,只有保证了系统层的安全可靠,才能保证数据库的安全。

数据库层安全策略

         基于本人参与安全数据库GBase 8S的研发工作,对数据库安全规范有一定的认识。并且一直以来DBA的工作中,也发现了很多数据库安全的问题。以下从几个方面介绍,数据库的安全策略。

1、数据库备份

         对于DBA来说,只要有备份,所有的问题基本就解决了很大一部分。而对于数据库备份的策略,可以根据不同的应用,指定不同的策略。常规的数据库备份时不可避免的,而日常操作的备份策略对快速回滚极其有帮助。例如对于核心数据,在进行updatedelete之前,可以通过备份操作的数据,从而实现快速回滚,具体将在以下案例分析中说明。除了数据备份之外,日志备份也是非常重要。日志备份可以对历史操作进行追踪,可以定位数据变更的操作记录,对于查找问题,非常有帮助。

2、权限控制

         对用户进行细粒度的权限控制,可以有效提高数据库的安全。细粒度的权限控制主要对操作的权限和访问的范围进行控制。此外,数据库用户空密码问题在数据库安全方面,是一个很大的问题,将在以下的案例分析中进行说明。这种权限控制是自主访问控制(DAC),是访问控制的最基本方式。

3、强制访问控制

         在国家安全数据库等级中,强制访问控制是必不可少的一个功能。强制访问控制是通过对主体和客体都标记相应的访问安全等级的方式,实现访问的控制,这样不仅可以达到控制用户的访问权限,还可以从数据安全层面,限制用户的访问内容。

4、审计策略

         尽管大多数数据库都有完善的日志系统,然而对于核心系统的审计是不可缺少的。通过审计可以有效的监控用户的操作,提高数据操作的跟踪能力。Oracle数据库本身提供审计功能,而对于MySQL社区版本来说,仅仅提供了审计的插件接口,没有提供具体的审计策略(企业版有审计功能)。本人之前基于MySQL 5.5的审计插件接口,简单的写过一个审计实现策略(https://github.com/HengWang/mysql-audit),供大家参考。此外,也收到了一些朋友的建议,在接下来业余时间里,我会继续完善和修改,希望得到大家的支持和建议。

5、数据加密

         数据加密对性能影响较大,数据加密的策略可以通过软件加密和硬件加密两种方式进行加密。GBase 8S安全数据库支持软件加密和硬件加密两种方式,保证数据加密存储。软件加密主要通过一些加密算法,实现对数据进行加密存储,这种方式会对数据库的性能影响较大;硬件加密主要通过硬件加密卡(PCIPCI-E)进行加密,这种方式可以减少对数据库的性能影响,但成本较大。

应用安全策略

         应用安全策略主要从SQL层面,对数据库操作进行严格的review和测试,这样可以有效的减少数据库的误操作。此外从代码开发中,也要防止SQL注入的问题。

案例分析

案例1

         日常操作中,往往会因为一时疏忽,使得操作的条件错误(where条件忘记、少写等),导致操作需要回滚。而如果在操作之前对操作的数据进行备份,那么如果需要回滚,对相应的数据进行恢复即可,回滚时间较短。如果操作前没有备份,那么对于MySQL用户来说,如果binlog策略是row模式,还可以通过反操作将数据回滚。如果是其他策略的话,那么就要通过常规备份恢复和binlog恢复结合的方式进行回滚。

案例2

         对于MySQL数据库来说,初始化安装后,root用户为空密码。如果在系统层没有做好安全策略的话,数据库的所有数据都会被全部删除,并且也无法跟踪删除操作的实际用户。造成的后果是DBA团队承担责任,如果有数据备份,可以通过较长时间将数据恢复。如果没有数据备份,那么就灾难了。

结论

系统层的安全策略是基础,数据库层安全是核心,应用层安全是保证。基于以上三个层面的安全策略,根据不同的应用,制定属于自己应用的安全操作规则,可以有效的提高数据库的安全。

================================================================

附录:

为了保持文章的完整性,详细的案例内容另外撰文,案例分析及更详细的处理过程,参考《数据库安全--案例篇http://blog.chinaunix.net/uid-26896862-id-3662188.html 

阅读(2388) | 评论(2) | 转发(2) |
给主人留下些什么吧!~~

king_wangheng2013-04-09 22:02:53

Bean_lee:去阿里巴巴了啊,厉害啊。

哈哈,混口饭吃!

回复 | 举报

Bean_lee2013-04-09 09:22:34

去阿里巴巴了啊,厉害啊。