互联网就像空气,彻底的融入我们的生活之中。因此我们愈发习惯把越来越多的数据保存在网上以换取更便捷的服务。不过,随之而来的安全事件无不让人触目惊心。
安华金和数据库安全攻防实验室(DBSecLabs )回忆2015年整年发生的数据泄露事件,2015年一月机锋论坛包括用户名、邮箱、加密密码的2300万用户信息泄漏。随后国内10多家酒店大量客户开房信息泄漏、中国广东人寿10W保单泄漏、大麦网600万用户信息和网易邮箱过亿用户信息泄漏……一连串的信息泄漏事件无不令人提心吊胆。覆巢之下安有完卵,全球第二大比特币交易网站Bitstamp遭到黑客入侵,新型银行木马Emotet盗取德国国民网银证书,就连一直以安全著称的瑞士银行在互联网的世界也难逃被黑客入侵的噩梦。
数据库漏洞研究起源
大数据时代的来临,各个行业数据量成 BT 级增长。 数据库被广泛使用在各种新的场景中,在某些场景下面临的安全威胁是数据库现有安全机制无法防护的。可以看到的是:数据库的优良性能和落后的安全机制成为鲜明的对比。
虽然数据库安全设计最初是按照美国国防部的标准制定而成,不过那些安全标准与现实安全的意义有着很大的差别。纵然大部分商用数据库都通过了安全标准检验,但随着功能的开发和部署在危险的网络环境中,安全短板就成为其“阿克琉斯之踵”。
1996年开始数据库安全进入安全团队视野,同年4月份Oracle被披露出第一个安全漏洞开始,随着新版本和新功能的出现漏洞呈震荡增长趋势。2014年当年被披露的各大数据库漏洞高达129个。
2011-2015主流数据库漏洞数量
今年截止到2015 年12 月份初被确认数据库漏洞一共 76个,比2014年下降了 53 个,减幅达到41%。这与各大数据库公司开发自己的代码审计工具有着密不可分的联系。
2015年漏洞分布
2015年数据库漏洞分布
今年曝出的76个数据库漏洞中,MySQL漏洞数占据全年漏洞总数的62%,共计47个。漏洞主要集中在5.5 和5.6 这两个主流版本中。
安华金和数据库安全攻防实验室通过分析发现MySQL 的47 个漏洞散落在12个MySQL 组件和一个未知组件上。众所周知MySQL 是一款易拆合的轻量级数据库,因此12 个组件中有很多是非必备组件。举个例子来说innoDB存在的6 个漏洞,如果您的业务不需要 innoDB,则建议禁止innoDB的使用。
MySQL漏洞分布组件
因此,安华金和数据库安全攻防实验室建议使用 MySQL 的公司、团体和个人及时对自己的 MySQL 数据库进行补丁升级。有研发能力的单位最好对MySQL源码进行审计,修复其中的问题。关闭与自己业务无关的组件,编译出适合自己应用需求的定制化MySQL。
同样Oracle数据库也被爆出 14 个漏洞,位居其次。这些漏洞集中于 Java vm、XDB 和Core RDBMS中。Core RDBMS 是Oracle数据库的最核心组件,在 windows下以一个Oracle.exe进程出现,而Linux下则是分成多个进程,这些进程负责着不同的功能,以此保证 Oracle 数据库的正常运行。Java VM是java 虚拟机负责运行 Oracle中的Java 代码,例如 Oracle图形化安装程序。 XDB 的漏洞往往来自于 XDB, 是负责处理 XML 的组件。 XDB 有2 个对外端口是HTTP和 FTP。这2个端口经常会给数据库带来缓冲区溢出漏洞—一种无需身份验证的高危漏洞。
Oracle漏洞分布组件
不过Oracle数据库漏洞常年居高不下与其自身复杂的逻辑密不可分。
2015年数据库漏洞—按厂商分类
2015年Oracle漏洞数占了总漏洞数的83%。这与它旗下两款数据库占据的市场份额和支持的功能复杂度有着密切关系。我们应该知道,各厂商产品的漏洞数量不仅与产品自身的安全性有关,而且也和厂商的产品数量、产品的复杂度、受研究者关注程度等多种因素有关。因此,我们不能简单地认为公开漏洞数量越多的厂商产品越不安全。其实 Oracle无论是性能还是安全性在同业者中都处于前列。
2015年数据库漏洞威胁类型
将漏洞按照其危害程度分为:高危漏洞,中危漏洞,低危漏洞三大类。2015年7大主流数据库中均存在高危漏洞。
2015年数据库漏洞—按威胁程度分类
其中高危漏洞占漏洞总数的12%,中危漏洞数量最多占据了58%,低威胁漏洞占30%。
威胁等级比例
12%的高危漏洞将是安华金和关注的重点。因此建议:高危漏洞必须及时处理。在某些特定情况下低危、中危漏洞也会达到高危漏洞的危害程度,所以对于低危漏洞也要及时修复。
2015年数据库漏洞利用趋势
数据库安全发展到现在,绕过身份验证依旧是对数据库安全最大的威胁。今年的 9个高危漏洞中的 3 个是针对身份验证绕过的。它们分别采用的是缓冲区溢出、通讯协议破解和默认口令三张种方式。虽然缓冲区溢出和通讯协议破解的漏洞越来越少,一旦出现将是数据库的噩梦。
2015年SQL 注入依旧是漏洞中的主流,80%以上的漏洞都属于SQL注入范畴,利用数据库系统 SQL 语言漏洞,通过对低权限用户进行升级权限来获取更多数据库内的敏感信息。作为数据库管理员应严格分配用户权限,防止分配给用户过高权限,对非必要服务请进行禁用或卸载,防止其中存在的漏洞被黑客利用,对数据库造成入侵。
2016年数据库安全建议
面对日益严峻的数据库安全形式,数据库加固应该从三个方面进行:严格限制弱口令、及时排出配置问题、定期升级补丁。也可以从时间节点上划分为三个阶段:入侵前的检查防护,事中的防御阻断,入侵事后审计追踪。事前防护阶段的重点在于排查,定期对整个网络环境进行弱点扫描,网络中任何一点的漏洞都可能导致最后的数据泄露。可以定期请专人对整个网络做渗透测试,同时通过数据库漏洞扫描器等相关产品对整个环境进行安全检查。
在事中阻断防御时,防御的重点在于准确判断哪些语句属于入侵语句。推荐在 Web 前端部署 WAF 来解决大部分针对 Web 的入侵行为,同时数据库前部署专业的数据库防火墙。
在事后通过对用户访问数据库行为的记录、审计分析,帮助用户事后进行数据泄密行为的追根溯源,提高数据资产安全。
结束语
回顾近年来安华金和数据库安全攻防实验室(DBSecLabs )对数据库漏洞的研究,我们发现任何一款数据库漏洞的出现和防治都会遵循某些特定的规律。虽然每年漏洞出现的数量并非稳定下降,但数据库自身出现漏洞的几率越来越低。漏洞数量不能稳定下降主要有两方面的原因:
1.很多数据库为了方便用户扩展了大量接口和功能,新功能在最初的版本总是受到自身漏洞和兼容性漏洞的双重困扰。
2.黑客利用漏洞的能力越来越强,以前很多被发现的漏洞其实是无法被利用的,黑客逐渐把其中一些无法利用的漏洞变成可利用。同时黑客也会特别关注与某些行业,数据库漏洞攻击往往也集中在这些行业领域。
最后,也是最重要的,大部分数据库漏洞攻击者依然是以获利为目的。数据库跟随业务逐渐从后台走向前台;从内外走向外网;从实体走向虚拟(云)。部署环境的发展给了黑客更多入侵数据库的机会。
完整版报告下载地址:

函数和存储过程的区别?
函数和存储过程对SQLSERVER来说有很大的区别:1.在SQLSERVER2K以前,没有自定义函数UDF,只有系统函数。 2.无论系统函数和UDF,在系统启动是就进行编译并加载,所以UDF的效率比SP要高,SP只是在调用时才加载(扩展的存储过程除外)。 3.有些函数getdate,exec..都在UDF里不能用!4.函数必须有返回值,SP则不一定。 5.函数可以包括在from子句中,SP则不可以。 6.在SQLSERVE2K中SP可以DEBUG,UDF不可以。
用户定义函数函数是由一个或多个Transact-SQL语句组成的子程序,可用于封装代码以便重新使用。 Microsoft®SQLServer™2000并不将用户限制在定义为Transact-SQL语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。 可使用CREATEFUNCTION语句创建、使用ALTERFUNCTION语句修改、以及使用DROPFUNCTION语句除去用户定义函数。 每个完全合法的用户定义函数名(database___name)必须唯一。 必须被授予CREATEFUNCTION权限才能创建、修改或除去用户定义函数。 不是所有者的用户在Transact-SQL语句中使用某个函数之前,必须先给此用户授予该函数的适当权限。 若要创建或更改在CHECK约束、DEFAULT子句或计算列定义中引用用户定义函数的表,还必须具有函数的REFERENCES权限。 在函数中,区别处理导致删除语句并且继续在诸如触发器或存储过程等模式中的下一语句的Transact-SQL错误。 在函数中,上述错误会导致停止执行函数。 接下来该操作导致停止唤醒调用该函数的语句。 用户定义函数的类型SQLServer2000支持三种用户定义函数:标量函数内嵌表值函数多语句表值函数存储过程存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。 存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。 存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。 存储过程可包含程序流、逻辑以及对数据库的查询。 它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。 可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点:可以在单个存储过程中执行一系列SQL语句。 可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。 存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。
存储过程可能单独完成一些内容,可以单独进行。 函数可以在试子中调用,比如可以进行一些计算等,不能单独执行。
mysql 支持的表类型有哪些
Mysql表类型都有哪些是一定需要知道的,下面就为您介绍七种Mysql表类型,希望能对您学习Mysql表类型有所帮助,需要的朋友可以了解下学习Mysql数据库,Mysql表类型都有哪些是一定需要知道的,下面就为您介绍七种Mysql表类型,希望能对您学习Mysql表类型有所帮助。 MySQL作为当前最为流行的免费数据库服务引擎,已经风靡了很长一段时间,不过也许也有人对于MySQL的内部环境不很了解,尤其那些针对并发性处理的机制。 今天,我们先了解一下Mysql表类型,以及它们的一些简单性质。 截至目前,MySQL一共向用户提供了包括DBD、HEAP、ISAM、MERGE、MyIAS、InnoDB以及Gemeni这7种Mysql表类型。 其中DBD、InnoDB属于事务安全类表,而其他属于事务非安全类表。 DBDBerkeley DB(DBD)表是支持事务处理的表,由Sleepycat软件公司开发。 它提供MySQL用户期待已久的功能--事务控制。 事务控制在任何数据库系统中都是一个极有价值的功能,因为它们确保一组命令能成功地执行或回滚。 HEAPHEAP表是MySQL中存取数据最快的表。 这是因为他们使用存储在动态内存中的一个散列索引,不过如果MySQL或服务器崩溃,这些内存数据将会丢失。 ISAMISAM表是早期MySQL版本的缺省表类型,直到MyIASM开发出来。 建议不要再使用它。 MERGEMERGE是一个有趣的新类型,在3.23.25之后出现。 一个MERGE表实际上是又一个MyISAM表的集合,合并而成的一个表,主要是为了效率的考虑,因为这样不仅仅可以提高速度、搜索效率、修复效率而且还节省了磁盘空间。 MyIASMMyIASM基于了IASM代码,应该可以说是IASM的衍生品,不过增加了不少有用的扩展。 它是MySQL的默认数据表类型,基于了传统的ISAM类型,ISAM是Indexed Sequential Access Method(有索引的顺序访问方法)的缩写,一般来说,它是存储记录和文件的标准方法。 与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具。 ISAM表格可以被压缩,而且它们支持全文搜索,不过它们是事务不安全的,而且也不支持外键。 如果事务回滚将会造成不完全回滚,从而不具备原子性。 所以假如忽略事务以及访问并发性的话,并且需要执行大量的SELECT检索语句的话,MyISAM将是最好的选择。 InnoDBInnoDB是MySQL 4.0之后推出的一种比较新的数据表类型,这种类型是事务安全的。 它与BDB类型具有相同的特性,它们还支持外键。 InnoDB表格速度很快具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它。 如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,同样应该使用InnoDB表。 对于支持事务的InnoDB类型的表来说,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动提交,严重影响了速度。 可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打开也可以),将大大提高性能。 GemeniGemeni表,据听说也是在MySQL 4.0之后推出的,不过截至当前,很少有针对它的介绍,同样应用也就更少了,我们暂时不作介绍。 MySQL的数据表类型很多,其中比较重要的是MyISAM,InnoDB这两种。 这两种类型各有优缺点,需要根据实际情况选择适合的,MySQL支持对不同的表设置不同的类型。 下面做个简单的对比:MyISAM表类型是一种比较成熟稳定的表类型,但是MyISAM对一些功能不支持。
sql 与 T-SQL是什么关系?
SQL全称是“结构化查询语言(Structured Query Language)” SQL(Structured Query Language)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 参考网址:*********************************************** T-SQL是标准 SQL 程式设计语言的增强版,它是用来让应用程式与 SQL Server 沟通的主要语言。 T-SQL 提供标准 SQL的DDL 和 DML 功能,加上延伸的函数、系统预存程序以及程式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。 参考网址:***************** 补充: 你可以理解成T-sql是SqlServer支持的sql语法,他不是软件,装了SqlServer就ok了。 ***************** --- 以上,希望对你有所帮助。
发表评论