IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

数据安全防范 提升需从今日始 - 浅析数据安全

Oracle Life 2012-04-09 12:20:30 累计浏览 2,995 次
本机暂存

    数据安全是一个永不过时的话题,而安全防范需要大家每一个人从日常做起,从细节做起,本文抛砖引玉,旨在提请大家注意安全问题。

数据安全防范 提升需从今日始

         ---数据库安全问题浅析

文/盖国强 eygle@eygle.com

2011年底,众多席卷而来的密码泄露事件弥漫整个网络,当我注视着最常用的几个密码都在互联网上被公开时,除了手忙脚乱的在各大网站修改密码,剩下的就是深深的遗憾。几乎所有从事IT行业的人,都深知安全的重要,可是放在实际执行中,又往往习惯性失明,忽视了自己周围本应能够达到的力所能及之安全,很多专业人士就以这样或者那样的侥幸心理放任了风险的存在,并一步一步走向了安全危机。

笔者从事数据库工作超过十年,并且在一直不遗余力的推广数据库技术与数据库安全知识,在此我愿意和大家分享一下我对于数据库安全的理解。

基于对于数据安全的服务和思考,我将数据库安全概括为五大方面(如下图所示),即:

   软件安全、备份安全、访问安全、防护安全和管理安全

dbsecurity01.png

在这五大安全方向中,可能出现两种性质的安全问题第一,由于内部管理不善而导致的数据安全问题;第二,由于外部恶意攻击入侵所带来的安全安问题。通常我们把安全问题狭义化为后者,这实际上是片面的,在数据安全问题上,前者造成的数据损失、数据损毁,其发生率和影响度都远远超过后者。

下面我们对数据安全的五大方面做一下简要的分析和探讨:

.软件安全是指我们选择的数据库产品、版本是否稳定安全;厂商所能提供的补丁集和BUG修正是否及时。很多用户在部署数据库软件时,仅仅选择了最容易获得的初始版本发布(如Oracle Database 10.2.0.1或者Oracle Database 11.2.0.1等),遗漏了可能已经存在的补丁修正,并且在运行维护中并不能够及时跟踪软件更新,也无法获得BUG信息、补丁修正和安全告警,这就使得软件本身的很多风险隐患得不到修正。如果软件安全无法保证,数据库安全的基础也就丧失了。

.备份安全是指用户数据能否得到及时有效的备份保全,能否在故障灾难之后获得及时的恢复和挽救。很多企业在数据灾难之后因为缺乏有效备份而一蹶不振,根据Gartner 2009年的一份调查报告显示,在经历了数据完全丢失而导致系统停运的企业中,有2/5再也没能恢复运营,余下的企业也有1/3在两年内宣告破产,由此可见,由于备份安全问题导致的企业伤害可能远远大于黑客攻击。

.访问安全是指用户数据库的访问来源和访问方式是否安全可控。通常数据库系统处于IT系统的核心,其安全架构涉及主机、系统、存储、网络等诸多方面,如果没有明确的访问控制,缺乏足够的访问分析与管理,那么数据库的安全将是混乱和无法控制的,最基本的访问安全要实现程序控制、网络隔离、来源约束等。

.安全防范是指通过主动的安全手段对数据库安全进行增强、监控、防护、屏蔽或阻断,诸如数据加密、审计、数据防火墙等技术都在这一范畴之内。我们必须认识到,在IT技术高度发展的今天,风险是无处不在、层出不穷的,可能我们从未思考过的安全问题,每天都在不断涌现,所以在数据库环境中采取主动式防护,可以帮助我们监控分析和屏蔽很多未知风险,已经有很多成熟的产品和技术可以用于安全防范。

.管理安全是指在企业数据的日常管理维护范畴内,能否充分保证数据安全。诸如DBA的维护、文件的管理、参数或数据结构的变更等等都可能引入数据风险,管理安全要求我们通过规范、制度以及技术手段去确保维护管理安全。2011年陕西移动曾经发生过近1400万手机用户数据泄露的安全事故,最终查明就是因为维护人员的数据窃取导致的数据泄露,而除此之外,很多维护性误删除、误更新等故障也威胁过无数用户的数据安全。

对于数据库安全来说,通常我们认为缺乏的并非技术手段,更多的是缺乏规范和安全认知,如果用户都能够严格的遵循安全守则并应用现有的安全技术手段,数据库的安全性就能够大幅增强,我们的安全事故发生率也会大大降低。

下面就让我们以Oracle数据库为例,探索一下Oracle数据库的安全机制和安全实现。

Oracle数据库自1977年肇始之初,就一直将安全置于首位,"Oracle"这个名字就是来自于美国中央情报局投资的项目代码,而CIA也正是Oracle最早期的用户之一。接触过Oracle数据库的人都应当熟悉一个类似如下图所示的错误"ORA-00942:表或视图不存在",这个简单的错误提示,最初就是在CIA的要求之下作为一项安全防范设定的,这个提示的安全意义在于:避免提供任何具体的实质性提示性信息,以预防黑客的攻击性尝试。由此可见,安全防范可以从每一个细节入手,安全是一项全面整体的技术实现,并非孤立的存在。

dbsecurity02.png

接下来让我们从Oracle数据库的密码机制上来深入了解一下Oracle的加密机制,虽然我们知道早在Oracle 数据库版本8的年代,就已经提供了强大丰富的数据库加密功能,但是直至今日,恐怕半数以上的数据库中,仍然存放着用户的明文密码,并且未采用任何数据库安全增强机制。这也就是我认为最重要的安全问题:我们并不缺乏安全防范手段,而是缺乏对于安全风险的认知。

诚然,我们对于安全的认识是随着不断出现的安全事故逐步增强的,但是希望大家都能够有计划的逐步增强对于数据库的安全防范,主动规划推进数据安全与从挫折中学习提高实有天壤之别。对于2011年底的密码泄露事件,如果各大网站能够采取基本的技术手段对用户密码进行一定的加密,那么这次密码泄露的安全事件就不会显得那么初级和惹人恐慌,想一想明文密码和MD5加密串的区别?前者基本上意味着数据库从未从安全角度进行过任何思考和增强。

Oracle数据库的用户信息及密码存储于一个名为USER$的数据表中(所有者为SYS用户),我们可以通过基于USER$表建立的DBA_USERS视图来查询和获得这些信息,包括加密的口令串。

在Oracle Database 11g之前,用户口令通过DES加密算法进行加密,使用用户名作为"Salt"(Salt指加密过程对加密数据额外使用的干扰字串,可以使用随机或固定的Salt),密码最长为30个字符,所有字母被强制转换为大写。从Oracle 7 至 Oracle 10g,加密一直使用username和password串连之后进行HASH运算,例如sys/temp1和system/p1将会获得相同的HASH加密输出。

从Oracle Database 11g开始,Oracle允许最多使用30个字符、大小写混合方式作为密码,同时支持DES和SHA-1算法进行加密(SHA-1算法支持大小写混合,通过初始化参数SEC_CASE_SENSITIVE_LOGON开关),使用password||salt的方式进行HASH加密。

以下是Oracle 9i数据库中口令的加密形式,DBA_USERS视图的PASSWORD字段显示了加密后的密钥:

dbsecurity03.png

在Oracle 11g中,密码从DBA_USERS视图中隐藏起来,这进一步的增强了安全性,即便具有访问视图权限的用户,也无法获得口令的加密串,由此我们也可以看出Oracle数据库软件的安全增强历程:

dbsecurity04.png

口令的加密内容存储在底层的核心表(USER$是Oracle数据库的元数据表之一,仅超级用户或DBA用户才能访问)中,以下PASSWORD字段存储的是DES加密值,SPARE4存储的是SHA-1加密信息:

dbsecurity05.png

关于口令的维护,Oracle支持各种约束性限制(通过 utlpwdmg.sql 脚本启用),诸如复杂程度、长度、有效期、失败登陆次数等等,通过这些增强,Oracle的口令限制可以定制出非常稳固的安全解决方案,如果你从未接触和研究过这些手段,那么可能就说明你的数据库还缺乏足够的第一层的安全防守。 

如果我们能够从Oracle的安全策略入手,学习一下Oracle的口令安全解决方案,那么就能够构建一套较为完善的基本安全解决方案。从Oracle的第一个Internet版本 Oracle 8i(1998年发布)开始,Oracle就提供了一个加密包DBMS_OBFUSCATION_TOOLKIT 用于数据安全防护,这个加密包支持DES , 3DES 和 MD5加密算法。

 通过非常简单的封装调用,DBMS_OBFUSCATION_TOOLKIT 包就能够实现数据加密,以下是一个简单的示例输出,对于给定字符串进行MD5加密,以RAW方式返回加密结果(通过创建稳固的函数,可以实现用户登陆时的即时加密、比较、认证):

dbsecurity06.png

从Oracle Database 10g开始,DBMS_CRYPTO包被引入到数据库中,该程序包支持更广泛的加密算法,并用于替代DBMS_OBFUSCATION_TOOLKIT包,在新的版本中,诸如DES, 3DES, AES, RC4, MD5, SHA-1, MD4, HMAC_MD5, HMAC_SH1等等加密算法和加密方式都被支持。

通过选定的加密算法和加密方式,可以对重要数据进行加密和解密,我们不仅可以实现对于密码或数值、字符数据的加密,甚至可以对类似LOB等非结构化数据进行加密。以下范例是使用DES算法CBC模式和PKCS5补码规则的加密解密实现,示例模拟对于信用卡卡号的处理过程,金融类企业数据的安全性更为突出,需要进行安全加密的类型更为丰富:

dbsecurity07.png

在本文最后我想重申的是,对于不同的数据库产品,都存在足够成熟的安全实现手段,应用这些安全手段就能够实现对于数据的基本保护,对于我们技术人最重要的是:认识和重视数据安全问题,并逐步推动企业或组织应用安全手段进行数据安全增强

重视数据,保护数据,重视数据安全问题,这是每一位技术人的共同使命!

同分类推荐文章

  1. 绿盟科技《APT组织研究年鉴》(2026 版)正式发布 (2026-06-16 20:21:10)
  2. 【已复现】Linux内核Fragnesia权限提升漏洞(CVE-2026-46300) (2026-06-15 10:53:58)
  3. 企业文档安全最佳实践(二):给文档上“身份证”——手动标密与智能自动标密 (2026-06-12 17:18:33)

查看更多 安全 文章 →

建议继续学习

  1. Facebook 网站架构 (累计阅读 11,107)
  2. 腾讯php程序员面试题目答案 (累计阅读 8,970)
  3. 分布式系统的事务处理 (累计阅读 7,382)
  4. PHP Extension开发基础 (累计阅读 6,642)
  5. 如何设计用户登录 (累计阅读 6,641)
  6. MySQL 5.6 测试之 Replication(主从复制) (累计阅读 6,267)
  7. 用 redis 实现和保护 12306 (累计阅读 5,623)
  8. 数据库的堆表与索引组织表的数据存储格式讨论 (累计阅读 5,595)
  9. 给学PHP、工作中在用PHP的朋友们推荐几本书 (累计阅读 5,362)
  10. Django框架ORM操作详解 (累计阅读 5,140)