神奇的SQL事件探查器,你可知道?
因开发中的项目基于第三方公司开发的项目,数据库都是直接的依赖关系,而且也不知道那公司开发的项目源码和数据库表之间的关系,安装的过程中也是我从未所见的“流氓”(具体可以参见你见到过垄断主义的软件吗? )。因此首先遇到的问题是分析它的数据库结构以及它的软件到底对数据库进行了什么样的操作?故通过朋友的介绍,发现了SQL事件探查器的确是一个跟踪SQL语句执行的好工具,这里我分享给大家:
SQL事件探查器是SQL Server提供的一个图形工具,通过该工具主要可以实现如下功能:(摘录如下)
1、监视SQL Server实例的性能。
2、调试Transact-SQL语句和存储过程。
3、识别执行慢的查询。
4、在工程开发阶段,通过单步执行语句测试SQL语句和存储过程,以确认代码按预期运行。
5、通过捕捉生产系统中的事件并在测试系统中重播它们来解决SQL Server中的问题。这对测试和调试很有用,并使得用户可以不受干扰地继续使用生产系统。
6、审核和复查在SQL Server实例中发生的活动。这使得安全管理员得以复查任何的审核事件,包括登录尝试的成功与失败,以及访问语句和对象的权限成功与失败。
需要注意的是:运行SQL 事件探查器时,必须确保系统至少有10MB的可用空间,否则SQL 事件探查器的所有功能都将停止。
我们可以看到这个SQL的事件探查器的确很强大,SQL Server里面的执行的每一个动作,都可以在SQL事件探查器里看的一清二楚,这对于性能调剂,后期维护等等都是有非常大的帮助的。但是,问题也就来了,在你的软件开发完毕后,作为软件的开发方而言并不希望使用软件的使用者通过SQL事件探查器来跟踪SQL语句。那么这种情况该怎么办呢?有没有什么办法不能让SQL事件探查器跟踪到呢?
下面我们来探索这个问题:
假设你数据库里面有一张表:Organization,里面有一个字段是password,那么当你执行下面的SQL语句的时候:
那么你会吃惊的发现,在SQL事件探查器里面显示如下内容:

— 在该事件文本中找到“password”。
— 出于安全原因,已用该注释替换此文本。
这样,就看不到你执行的SQL语句的内容了。
但是,你可以会说,如果在我的Organization里面没有password字段的话还不是要显示出来?确认如此,但是官方介绍说:只要在查询的过程中,任意地方出现关键词:password,encryption,sp_setapprole之一,整个查询过程都将被隐藏,任意地方,当然也包括注释中。例如执行下面的语句:
/*保护SQL语句*/
SELECT 1 FROM [Organization1]
同样的我们在SQl事件探查器里面看到的是:

总结:
这样就很清楚的明白:如果要避免SQL语句在SQL事件探查器里面被跟踪的话,只需要添加一个关键词的注释就可以把SQL语句保护起来了。
可喜的是,我开发的系统所依赖的第三方系统软件并没有对此SQL语句做保护,故可以通过SQL事件探查器分析软件对数据库进行了那些操作,进一步分析数据库表的结构。
可以想象一下如果软件中的SQL语句都做了保护的话,如果只能过产品或者发布好的软件要来分析数据库表的结构是何等的困难?
微软发布SQL Server 2008 SP2 官方下载
微软宣布SQL Server 2008 SP2开发下载,用户可以从微软下载中心获取SP服务包和功能包升级。SP2主要包括一些兼容性功能,帮助实现与SQL Server 2008 R2的兼容,还包括一些基于SQL Server社区用户反馈的产品改进,以及SP1以来的所有补丁。
SQL Server 2008 SP2 新增功能如下:
— SQL Server实用工具在部署PS2后,可使用实用工具控制点将SQL Server 2008数据库引擎实例注册为SQL Server的托管实例。
— 数据层应用程序(DAC)
安装SP2后,SQL Server 2008数据库引擎的实例支持所有DAC操作。用户可以部署、升级、注册、提取和删除DAC。SP2不会升级SQL Server 2008客户端工具来支持DAC,若要执行DAC操作,应运用SQL Server 2008 R2客户端工具(例如SQL Server Management Studio)。
数据层应用程序是一个包含由应用程序使用的所有数据库对象和实例对象的实体。DAC提供一个单元来创作、部署和管理数据层对象。
— SharePoint集成模式下的Reporting Services
SQL Server 2008 SP2提供了关于Reporting Services与SharePoint 2010集成方面的更新。Microsoft SQL Server 2008 SP2还提供用于SharePoint 2007产品的新的外接程序。这个新的外接程序支持将SharePoint 2007技术与SQL Server 2008 R2报表服务器集成。
— 15K分区的改进
SQL Server 2008 SP2在企业版本、开发者版本和评估版本中引用了在表和索引中最多支持15000个分区的功能。
官方下载SQL Server 2008 SP2:
http://www.microsoft.com/downloads/details.aspx?FamilyID=8fbfc1de-d25e-4790-88b5-7dda1f1d4e17&displayLang=zh-cn
SQL Server 2008 SP2精简版:
http://www.microsoft.com/downloads/details.aspx?FamilyID=40acf55f-0715-4bb0-9735-d02fc2c8a7af&displayLang=zh-cn
SQL Server 2008 SP2功能包:
http://www.microsoft.com/downloads/details.aspx?FamilyID=1b2bd555-cb5b-47b9-88c7-3f89f3b43779&displayLang=zh-cn
如何斩断SQL注入式攻击的疯狂大魔掌
近年来,SQL注入式攻击一直如幽灵般困扰着众多企业,成为令企业毛骨悚然的梦魇。从八月中旬以来,新一轮的大规模SQL注入式攻击袭掠了大量的网站,连苹果公司的网站也未能幸免。这种猖獗的攻击向业界招示其日渐流行的趋势,黑客们也越来越喜欢这种可以渗透进入企业的基础架构和数据库资源的攻击方式。
关于对付SQL注入攻击的方法已经有许多讨论,但是为什么还是有大量的网站不断地遭受其魔掌呢?安全研究人员认为,现在正是重新梳理最佳方法来对付大规模的SQL注入攻击的时候,从而减轻与注入攻击相关的风险。笔者在此介绍的这些方法未必是革命性的创举,但是又有多少企业真正按照要求全面地实施这些方法呢?
下面,我们将一一谈论这些方法:
使用参数化查询
企业应当制定并强化自行开发软件的安全编码指南,要求开发人员使用参数化查询来构建SQL查询,这样就可以将数据与代码区分开来。
对于多数SQL查询来说,开发人员需要指明某类标准,为此,就需要利用参数化查询,其实就是在运行时可传递的参数。参数化查询就是在SQL语句中有一个或多个嵌入参数的查询。这种将参数嵌入到SQL语句中的方法与动态构造SQL字符串相比,不易产生错误。下面我们看一个在.NET应用程序中使用参数化查询的例子。假设我们想给张三增加工资500元,可参考如下的代码。这些代码范例演示了参数化查询的使用,并展示了如何使用更新语句:
通过利用SQL的更新命令,你可以更新记录。在上面的例子中,我们作了如下操作:创建并打开一个数据库链接;创建一个代表执行更新语句的数据库命令;使用EDBCommand 的ExecuteNonQuery()方法执行插入命令。
每一个参数都用一个EDBParameter对象指明。对于需要在SQL语句中指定的每一个参数来说,你需要创建一个EDBParameter对象,然后将值指派给这个对象。然后,将EDBParameter对象添加到EDBCommand命令的参数集中。
对于多数开发平台来说,应当使用参数化的语句而不是将用户输入嵌入到语句中。在许多情况下,SQL语句是固定的,每一个参数都是一个标量,而不是一个表。用户输入会被指派给一个参数。下面再给出一个使用Java和JDBC API的例子:
PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE USERNAME=? AND PASSWORD=?");
prep.setString(1, username);
prep.setString(2, password);
prep.executeQuery();
笔者用这些例子只是想告诉开发人员,应当确保在查询数据库之前对输入进行净化。要保障用户输入到网站的内容就是你正要查找的数据类型,所以说,如果你正在寻找一个数字,就要努力保障这种输入一定是一个数字而非字符。
实施过滤和监视工具
在Web应用程序和数据库这个水平上的过滤和监视工具可有助于阻止攻击并检测攻击行为,从而减轻暴露在大规模的SQL注入式攻击中的风险。
在应用程序水平上,企业应当通过实施运行时的安全监视来防御SQL注入攻击和生产系统中的漏洞。同样地,Web应用防火墙也有助于企业部署某些基于行为的规则集,可以在发生损害之前阻止攻击。
在数据库水平上,数据库活动监视还可以从后台过滤攻击。数据库的监视活动是对付SQL注入的一种很强大的工具。对于目前所知道的注入攻击而言,应当部署好过滤器,以便向数据库管理员发出警告:正在发生不太安全的问题;还要有一些一般的过滤器,用以查找SQL注入攻击中的典型伎俩,如破坏SQL代码的不规则的数字引用等。
精心编制错误消息
黑客可以利用你的错误消息,以便于将来对付你。所以开发团队和数据库管理员都需要考虑:在用户输入某些出乎意料的“数据”时,应当返回的错误消息。
企业应当配置Web服务器和数据库服务器,使其不输出错误或警告消息。因为攻击者可以利用“盲目SQL注入”等技术来了解你的数据库设计细节。
及时打补丁并强化数据
由于没有打补丁或者配置错误,而造成与Web应用程序相关联的数据库遭受攻击,那么与SQL注入攻击相关的风险也会因之增加。
很显然,只要有补丁可用,你就需要给数据库打补丁,并且还要给Web应用程序和Web服务打补丁。
此外,别忘了你的数据库是怎样配置的。你需要禁用不必要的服务和功能,目的是为了强化数据库及其赖以运行的操作系统。
限制数据库的特权
最后,企业需要更好地管理与Web应用程序相关的账户与后台数据库交互的方式。许多问题之所以发生,其原因在于数据库管理员全面开放了一些账户,其目的是为了让开发人员更轻松地工作。但是,这些超级用户账户极易遭受攻击,并会极大地增加由SQL注入攻击及其它Web攻击给数据库所造成的风险。
一定要正确地管理所有的账户,使其仅能以最低的特权访问后台的数据库,当然前提是能够完成其工作。你一定要保障这些账户不会拥有对数据库作出更改的权利。
在SQL 代码中加入Hint来约束SQL 的执行计划
曾经遇到的一个例子就是这样,开发人员为了要求每次对一个表做操作的时候都使用索引,于是在代码中强行加入了Hint约束SQL的执行计划,它的样子大概是这样:
Select /*+ index(t1 ind_t1) */ col1,col2 from t1 where col1>...... and col1<...... 猜测他们在系统上线之前测试的阶段,发现这条SQL选择索引比全表扫描效率高得多,为了保证以后执行计划能够始终选择索引,他们在代码中的SQL里加入了这个Hint。
系统上线后,没有出现过问题,直到有一天用户抱怨查询非常慢,我从数据库里得到了用户端发出的SQL,才知道这个SQL在代码里加入了Hint。问题是,为什么之前操作都没有问题呢?我登录这个数据库,查看了一下这个表的信息,惊奇地发现,这个表每天仍然定时在做分析操作,这是一个奇怪的现象,人为地对表进行定时分析,却不允许数据库来选择执行计划,这显然是不合理的事情。但这种现象在开发人员当中又是比较普遍的,大家了解一些数据库的技术,却无法将这些知识整合起来运用,系统设计及开发阶段,没有DBA参与进来,直到系统进入运行维护阶段,才有DBA来充当救火队员的角色,这在当前中国软件开发中是一个很普遍的现象。
接着说这个案例。这是一个Oracle 10gr2的数据库,CBO(基于成本的优化器)的技术已经比较成熟,所以此时应该选择由Oracle数据库来决定SQL的执行计划。我分别执行了这条原始SQL和去掉了Hint的SQL,并获得了各自的执行计划,执行计划显示出,去掉Hint的SQL选择了全表扫描(Full Table Scan),执行中扫过的数据块远远小于通过索引访问数据的SQL,于是原因找到了。
可是为什么之前没有出现过这个问题?我对比了一下最近的数据和之前的数据,发现近期的数据在创建索引的列上的列值重复率要远远高于从前,因此Oracle在选择索引之后,比以前读取了更多的索引块和数据块,造成了大量的I/O操作。
因此,对于高版本的数据库(10g以上),我们还是应该让数据库自己根据表、索引的统计分析信息来决定SQL的执行计划,因为表中的数据是会变化的,这种人为的强行干预,必然会在某个时候出现问题。
SQL Server为何仍占据了数据库市场的主导地位
BZ Research的年度数据库与数据存取、综合研究报告表明,微软的SQL Server仍然是数据库市场上遥遥领先的No.1,截至今年6月底有74.7%的企业都在使用它。虽然这一数据比去年7月的76.4%略有下滑,但依然远远高于竞争对手。
BZ Research是在6月下半月对686名软件开发主管进行调查后得出上述结论的。
除了SQL Server,Oracle的使用率从51.3%升至54.5%、Access从56.1%降至54.4%、MySQL从38.5%升至43.4%、 IBM DB2从20.4%升至23.5%、PostgreSQL从11.6%降至11.4%,除此之外的其他数据库软件均不足10%。
另外,主管们还被问到了最近完成的项目使用的是何种数据库软件的问题,结果有51.0%的使用了SQL Server,接下来分别是Orale占37.1%、MySQL占20.7%、Access占14.9%、DB2占12.5%、PostgreSQL占 4.2%,其余均不足3%。与使用率统计基本一致。
至于为什么如此选择,有45.9%的人给出的理由是“很熟悉这种数据库”,其他原因还有“功能较多且运行稳定”(21.3%)、“开发成本最低”(20.1%)、“部署成本最低”(18.6%)、“授权许可要求”(17.1%)、“特定应用需要”(15.3%)。
一名微软用户评论说:“有了ADO.NET,SQL Server现在要比Oracle好用得多。如果Oracle也能做到这一点,也许我们会在未来考虑更多地使用它。”
也有人认为:“Oracle在配置和运行方面都很麻烦,而SQL Server只是另一个工具,而且与Visual Studio紧密集成。”
还有的被调查者表示:“SQL Server完全能够满足我们的需要,对管理员来说很容易使用,与Visual Studio的配合很好,在x86服务器上运行顺利。这是我们(企业)内部部署的普遍标准。我们的很多第三方合作厂商也在用它。”
当然也不是每个人都很欣赏SQL Server:“我们是一家大型企业,而Oracle事实上就是用于企业计算的标准,还有IBM DB2。微软的SQL Server我们也在用,但它不是工业标准。”
有时候要看具体情况了:“我们开发J2EE和.NET程序。在中小型客户里,SQL Server到处都是,但大型客户选择了Oracle。在卖软件的时候,我们需要根据客户需求部署数据库。”
“MySQL也已经开始作为Oracle的实验性替代品了。”
Sybase也没有被忘记。有说好的:“Sybase仍然是华尔街上的现行标准。”也有批评的:“希望Sybase能尽快增加类似于MySQL的功能,扩展T-SQL,并尽快加入其他数据库普遍提供的功能,不然我们可能就会抛弃它。”
数据库服务器成黑客最爱
如今顶尖的黑客一定都是顶尖的商人!因为他们的评估记录上会写着哪些目标最简单,哪些目标最有利可图。现在,可能没有比笨拙的企业数据库更好对付的目标了。一般来说,企业的数据库中汇集着这家公司最重要的机密:客户名单、工资记录、以及其他许多按照良好结构储存的敏感信息,这些都是最容易卖出好价钱的。何况数据库的管理员们往往不会想在安全性上精益求精,而且数据库本身常常和网络应用联系在一起,这些都已经被证明是企业数据库屡遭破解的原因。
在Verizon Business的年度计算机破坏报告中,调查小组报告说,在2008年的数据丢失案中,数据库破坏占据了30%。更糟糕的是,在数据入侵的统计中,数据库入侵高达75%(参见下图)。由于敏感信息往往是储存在一个单独的数据库中,一次简单的入侵就可能导致企业遭受重大损失。
数据来源:Verizon 2009数据破坏调查报告,基于2008年2亿8500万次累计攻击数据
制图:51CTO.com安全频道
“认真研究一下,你会发现安全威胁在很大比例上都来自于数据库,”企业安全咨询公司Securosis创始人兼分析师Rich Mogull说。还有大多数的信息安全管理员都是在IT网络背景下成长起来,对数据库技术并不了解太多,他另外说到。最近Forrester Research的研究也发现,大多数数据库管理员仅花费不到5%的时间来保证数据库的安全。
“我要说的是,在我就安全性问题开会的时候,三次里至少有两次数据库方面的人不来参加,”Gartner的信息安全和隐私研究主管Jeffrey Wheatman说。“我认为这是一个大问题,因为当你要对一个不太明白的东西进行监测或要保证它的安全,你需要请一位这方面的专家来帮助你。”
此前,51CTO.com也曾刊载专家分析文章称,由于企业数据库系统用户众多,涉及数据库管理员、内部员工及合作方人员等,网络管理非常复杂,数据库的审计已经成为燃眉之急。
许多数据库的安全漏洞仅仅是由简单的安全工作失误造成的。在2008年的调查中,IOUG(the Independent Oracle Users Group,独立Oracle用户组织)发现,有26%的企业安装Oracle数据库的安全补丁的时间超过了6个月,而有11%的企业竟然从来没有给它们打补丁。“生产数据库(production database)往往不能在第一时间得到最新的补丁,因为这些数据库服务器的访问非常繁忙,人们会说‘只要不出大问题,就不要去修补它’!”漏洞评估公司QuietMove的合伙人Adam Muntner说。
企业经常会犯一些错误,这使数据库变得更加脆弱,比如将测试数据库留在生产服务器上,或者把敏感数据链接到网络应用中,这就有可能被黑客轻松窃取。“我认为数据库面临的最大威胁就是与网络应用相链接和其中的业务逻辑漏洞,”Muntner说。
与网络应用密切联系会使数据库容易遭受SQL注入攻击——这个问题51CTO.com安全频道曾专门讨论过,指攻击者输入SQL代码形式的字符串到网络应用的薄弱区域。他们可以袭击连接到特定网络应用的数据库,也可以使用网络应用和数据库之间的链接,对整个数据库服务器发起更广泛的攻击。跟据IBM的ISS X-Force安全研究团队报告,SQL注入攻击在去年成为因特网最常见的针对基于数据库的网站漏洞的攻击方式,比起2007年增长了134%。相应地,应对SQL注入攻击,也需要进行全面防御。
原文出自【比特网】,转载请保留原文链接:http://sec.chinabyte.com/475/11584475.shtml
DB2数据库在保险业的应用
保险行业一般是面向社会公众的,因此数据库对于保险行业来说处于一个相对比较重要的地位。正是由于DB2数据库系统具有很多的优点,所以部分保险公司就选用了DB2数据库系统。选用Unix操作系统+DB2数据库作为后台,前台采用C/S或B/S模式进行运作。另外通过DB2 Information Integrator对存储在 DB2、SQL server、Oracle等异构数据库中的数据整合,使所有数据好像集成在一个数据库中,极大地方便了用户对各类数据的访问。本文主要介绍了当今主流数据库之一——DB2数据库的主要特点和其在安全性方面的控制方法。
在现阶段,相对比较好的几种大型数据库有以下几种:
1.Oracle公司的Oracle数据库;
2.IBM公司的DB2数据库;
3.Sybase公司的Sybase数据库;
4.Informix公司的Informix数据库(已被IBM收购);
5.Microsoft公司的SQL Server数据库。
其中DB2数据库是IBM公司的产品,它的原型是IBM在IBM360计算机上研制成功的IMS V1,是第一个也是最著名的和最为典型的层次型数据库管理系统。我们主要讨论一下IBM的DB2数据库系统。
数据库的安全性
验证
数据库安全性中最基本的概念之一就是验证,这是一个相当简单的过程,系统通过这个过程来证实用户身份。用户可以通过提供身份证明或验证令牌来响应验证请求。
如果用户身份验证成功,DB2会记下用户的身份标识和其他相关的安全信息,如用户组列表。用户必须使用已经被DB2授权的授权名(authorization name)或授权标识(authid)来被DB2识别,授权名或授权标识可以与用户标识或映射值相同。这一连接信息将在用户连接期间保留。
授权
通过验证的用户将参加DB2安全性的第二层——授权。授权是DB2借以获得有关通过验证的DB2用户的信息(包括用户可以执行的数据库操作和用户可以访问的数据对象)之过程。
授权可以被分为两个不同类别:权限和特权。
权限。权限提供一种把特权分组的方法,并对数据库管理器和实用程序进行更高级的维护和操作加以控制。数据库相关权限存储在数据库目录中;系统权限关系到组成员关系,对给定的实例,它存储在数据库管理器配置文件中。DB2有如下四个预定义的权限级别:SYSADM、SYSCTRL、SYSMAINT和DBADM。SYSADM、SYSCTRL和SYSMAINT在实例级别上操作,范围是整个服务器。每个级别都有自己的按组分的特权和访问规则。这些权限都是在每个实例的数据库管理器配置文件中被定义的。DBADM授权级别链接到服务器实例中的特定数据库,并自动把这一权限级别授予创建数据库的用户。DBADM对数据库及其内的所有对象都拥有所有可能的按组分的特权。缺省情况下,SYSADM对包括数据库在内的整个系统拥有所有可能的按组分的特权(SYSADM有隐含的DBADM权限)。
DB2使用不止一个纵向授权流。对于每个用户请求,依据涉及到的对象和操作,可能会需要多次授权检查。授权是使用DB2工具执行的。DB2系统目录中记录了与每个授权名有关联的特权。对通过验证的用户的授权名以及该用户所属的组与记录在案的属于他们的特权进行比较。根据比较结果,DB2决定是否允许请求的访问。
DB2安全性机制阻止TESTING用户标识,因为它知道这个用户没有得到执行这样的命令的授权。在这种情况下,TESTING显然不是SYSADM。
特权。特权定义对授权名的单一许可,从而使用户能够修改或访问数据库资源。特权存储于数据库目录中。虽然权限组预定义了一组可以隐性授予组成员的特权,但是特权是单独的许可。
DB2可以利用由操作系统安全功能维护的用户组。组允许数据库管理员给组指派特权,这样帮助降低数据库系统持所有权的总成本。
通常,动态SQL和非数据库对象授权(例如,实例级命令和实用程序)适用于组成员关系。动态SQL是非预先安排或即时生成的SQL。静态SQL不适用于组成员关系(除PUBLIC组之外)。静态SQL在执行之前就为DB2所知,而且DB2优化器已经生成了SQL访问计划并把它作为数据包存储在目录中。
特定用户标识、所有用户自动归属的特定组(PUBLIC)或多个组都可以被授予(或被撤消)每种特权。
访问控制方法
DB2为了更强大的访问控制而提供了相应的框架。访问控制方法用于创建信息内容的子集,从而用户可以只查看或存取与其需要相关的数据。您可以在DB2中使用许多不同的访问控制方法。访问控制是为您在数据库中所进行的一切操作而存在的。DB2访问控制提供对于在DB2中保护您的数据和提供对数据的行级别访问非常重要的框架。
使用数据包的访问控制。数据包是与一条或多条SQL语句有关的信息集合,这是DB2内SQL的基本访问控制点。数据包中包括诸如优化器生成的访问计划和授权模型等信息。向数据库引擎发出的任何语句都会和特定数据包有关。
在创建数据包的时候,它就被绑定到具有特定特权的数据库。创建数据包的人一定有执行数据包中所有静态SQL语句所需要的特权。运行数据包的用户也一定有这个数据包的EXECUTE特权,但是他们不一定有执行数据包中包含的所有静态语句的一对一的特权。
使用视图的访问控制。视图是另一种主要限制对数据的低级(也称为“行级”)存取的访问控制方法。通过使用视图,您就可以对SQL语句隐藏驻留在原始表中的敏感信息的行和列。您可以通过根据视图授予特权使用户可以存取信息。因为这些特权只适用于视图,不会影响基本表,所以用户的存取范围仅限于视图,而该视图是通过创建所需表中数据的子集生成的。WITH CHECK选项甚至提供更多的安全性,因为它不会让特定的SQL语句改变用户在视图中没有特权读取的那些行。
使用触发器的访问控制。通过使用触发器,您就可以创建更复杂的安全机制,无论什么时候只要特定事件发生,安全机制就会被激活。表的INSERT语句就是一个示例事件,它可用于触发触发器。此外,触发器可以在特定事件之前或之后触发以提供更具活力的安全性审核。如果用户的语句没有通过触发器内的安全性审核,则从触发器主体内发出的错误将会防止表被修改。
使用USER专用寄存器的访问控制。DB2提供的专用寄存器名为USER,其中包含用于在当前会话连接数据库的用户标识。您可以在视图中使用专用寄存器中存储的值来针对特定的用户定制视图。通过使用专用寄存器,您可以使基于表的视图因用户而异。您也可以把这一技术应用于触发器和SQL语句。
审核功能
DB2的审核工具使您可以维持对发生在实例内的事件的审核跟踪。成功的数据存取尝试监视和后续分析可以使数据访问控制方面得到改进,并最终防止恶意或无意非授权存取数据。然后,就可以从这些记录下来的事件中提取出一份报告供分析。
DB2数据库的其他特点
DB2 V9对 XML 的支持
DB2 V9数据库相对于其他数据库管理系统来说有了大幅度的创新。实际上,DB2 9提供了对于XML的支持,不仅仅体现在XML类型的数据上,一些用关系模型难以解决的问题也可以使用XML模型得以解决。DB2 V9对XML的支持与经典的关系数据模型相比所具有的优势是不可忽略的。
DB2 的优化
DB2在处理datawarehouse系统上的性能应该是非常优秀的,同时DB2对优化器做得相当完美,对于大部分复杂查询可以有效地将其重写为最优语句,并且分配合理的执行计划。
DB2的不足
DB2有其优势也有自己的不足。DB2在关闭机制上有一定的不足。这与DB2的设计框架相关,内存锁的使用在提升效率的同时也对系统的优化要求提到了最高。如果用户对数据库的本身优化和应用程序优化做得不足,那么DB2会容易出现锁等待现象。
保险行业数据库处于一个相对比较重要的地位。正是由于DB2数据库系统具有很多的优点,所以部分保险公司就选用了DB2 数据库系统。选用 Unix 操作系统+DB2数据库作为后台,前台采用C/S或B/S模式进行运作。另外通过DB2 Information Integrator对存储在DB2、SQL server、Oracle等异构数据库中的数据整合,使所有数据好像集成在一个数据库中,极大地方便了用户对各类数据的访问。(作者单位:泰康人寿保险股份有限公司)
Java之父到微软奥齐 技术大牛冬天来了
2010年10月19日,微软宣布首席软件架构师、微软云技术平台推动负责人雷·奥兹(Ray Ozzie)计划卸任。联想到不久前从Oracle出走的高斯林(绰号:高司令),看来技术大牛们似乎在经历一个严冬。
曲高和寡的技术大牛?
当年盖茨为了拿下Ray Ozzie,曾不惜收购Groove公司。在六顾茅庐后,2005年,50岁的Ray Ozzie终于同意加入微软。次年比尔盖茨宣布了他的个人退休计划,并由雷·奥齐来接替他开始担任微软首席软件架构师一职,换言之,以后整个微软的软件发展方向将由雷·奥齐来规划了。

微软首席架构师Ray Ozzie
Ray Ozzie给微软带来了Live和S+S,还有.NET 4.0、Windows Azure。对于开发界来说,.NET 4的革新性还是让大家眼前一亮。
.NET 4为我们带来了图表控件、SEO支持以及ASP.NET 4可扩展的输出缓存。同时值得一提的是.NET 4多核并行计算,其实在.NET 1.0中就有了并行编程技术的一些实现——多线线程技术。多线程最大的问题就是难于使用和管理,在.NET 4中也终于解决了这一问题。
随着.NET 4而来的还有崭新的IDE——Visual Studio 2010。Visual Studio 2010不光在.NET开发平台有所进步,同时也融合了项目管理与架构设计的功能,让开发流程更加紧密。
这一切和雷·奥齐的睿智是分不开的,但是在一个移动设备大行其道的今天,似乎大家对以前的软件开发大牛不再感冒。新一代崇拜的偶像似乎更应该是乔布斯这样的教主。
微软花费重金打造Windows Phone,似乎跟Ray Ozzie的关系已经不大了。曾经的技术牛人,似乎也有迟暮之日。
高司令:Oracle杯酒释兵权
高斯林,高司令。贵为Java之父和Sun产品开发部首席技术官,于2010年4月9日带着十足的愤怒与怨念离开了收购Sun的Oracle。不少媒体人并不是哀婉叹息,而是认为高司令太啰啰嗦嗦,理应离开。

Java之父:高斯林
Java之父高司令,恐怕也无法左右理清Java的未来。对于Java,Oracle的下一步打算是什么?其实谁也无法说清Oracle到底想干什么。Java 7的难产,似乎也预示着Java将与MySQL一样,命运多舛。
正在享受退休生活的高司令,似乎还自得其乐。放下担子,可能有更多的时间让这位Java之父更多的思考未来。
都是金融危机惹得祸?
2008年席卷全球的金融危机,对IT行业打击不小。生存的紧迫性让大家都勒紧了裤腰带,这个时候裁员增效就成了主流。技术大牛们在经济景气时还能呼风唤雨,但是到了金融危机,更多的限制让他们无所适从。失去了自由的空间,大牛们的睿智就成了一种累赘。危机中一个好的销售经理绝对比一个技术大牛更能获得CEO的青睐,那么高司令等被扫地出门也是理所当然的事情。
其实大家也不必担忧技术的发展,大牛们是金子,是金子到哪里都能发光。正如梵高等画家在困境中更能出好作品一样,高司令在享受安逸的退休生活时会不会又有什么奇思妙想?让我们拭目以
如何在java程序中设置文件为“隐藏”属性
Java代码
public class 设置文件属性 {
// 执行以下代码你将看到一个属性为隐藏的文件(D:ddd.ddd)
// 请到D盘下查看
public static void main(String[] args) throws IOException {
// 创建新文件
File file = new File(“D:\ddd.ddd”);
// 删除文件并创建新文件
file.delete();
file.createNewFile();
// 拼dos命令
// attrib的祥细功能介绍请在DOS内输入 “ attrib /? ” 查看
String sets = “attrib +H ”“ + file.getAbsolutePath() + ”“”;
// 输出命令串
System.out.println(sets);
// 运行命令串
Runtime.getRuntime().exec(sets);
}
}
1. 当Java.io中,如果文件的操作的时候,判断是否隐藏用File.ishiden()判断是否只读,可用File.canWrite()。
2. 当要设置是否是可读或者是隐藏时,在java中除了提供File.setReadOnly()外,就无其他方法了。所以我们必须到Dos环境下去设置,在 java中用Runtime.getRuntime().exec(“attrib ” + “”“ + file.getAbsolutePath() + ”“”+ “ +R”)该方法可以实现。因为路径file.getAbsolutePath()中可能会还有空格,所以必须用引号把它括起来,当作一个参数。这样就可以实现了
(1) 设置只读Runtime.getRuntime().exec(“attrib ” + “”“ + file.getAbsolutePath() + ”“”+ “ +R”);
(2) 设置可写Runtime.getRuntime().exec(“attrib ” + “”“ + file.getAbsolutePath() + ”“”+ “ -R”);
(3) 设置隐藏Runtime.getRuntime().exec(“attrib ” + “”“ + file.getAbsolutePath() + ”“”+ “ +H”);
(4) 设置非隐藏Runtime.getRuntime().exec(“attrib ” + “”“ + file.getAbsolutePath() + ”“”+ “ -H”);
Java正则表达式判断手机号
要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段,
故先要整清楚现在已经开放了多少个号码段,国家号码段分配如下:
移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
联通:130、131、132、152、155、156、185、186
电信:133、153、180、189、(1349卫通)
那么现在就可以正则匹配测试了,
源码import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ClassPathResource {
public static boolean isMobileNO(String mobiles){
Pattern p = Pattern.compile(“^((13[0-9])|(15[^4,\D])|(18[0,5-9]))\d{8}$”);
Matcher m = p.matcher(mobiles);
System.out.println(m.matches()+“---”);
return m.matches();
}
public static void main(String[] args) throws IOException {
System.out.println(ClassPathResource.isMobileNO(“12016155153”));
}
}
第二种方法:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
String value=“手机号”;
String regExp = “^[1]([3][0-9]{1}|59|58|88|89)[0-9]{8}$”;
Pattern p = Pattern.compile(regExp);
Matcher m = p.matcher(value);
return m.find();//boolean
- 默认分类(20)
- J2EE(25)
- Java(56)
- PHP(55)
- SEO(10)
- 网页设计(20)
- 网站建设(37)
- 数据库(7)
- JavaScript(17)
- JQuery(6)
- MySQL(20)
- SQL Server(6)
- Access(1)
- Oracle(6)
- office(6)
- Dreamweaver(4)
- Photoshop(12)
- Flash(9)
- Fireworks(13)
- CSS(14)
- HTML(4)
- .NET(7)
- ASP(2)
- DB2(1)
- Ajax(2)
- Linux(12)
- Struts(7)
- Hibernate(8)
- Spring(2)
- Jsp(22)
- Asp(8)
- C#(3)
- C++(1)
- 网络安全(5)
- 软件工程(7)
- XML(1)
- English(2)
- 计算机等级考试(2)
- 计算机病毒(4)
- 个人日志(76)
- 互联网(15)
- ActionScript(10)
- Android(3)
- 数据结构与算法(1)
- 游戏策略(3)
- 美文翻译(2)
- 编程开发(19)
- 计算机应用(4)
- 计算机(10)
- Unity3d(6)
- 其他(1)
- egret(1)