zoukankan      html  css  js  c++  java
  • [转]SQL错误处理的脆弱性演示

    --下面演示了SQL错误处理的脆弱性
    --
    邹建

    --演示1
    --
    测试的存储过程1
    create proc p1
    as
    print 12/0
    if @@error<>0
        
    print '发生错误1'

    select * from newid()
    if @@error<>0
        
    print '发生错误2'
    go

    --调用
    exec p1
    go

    --删除测试
    drop proc p1

    /*--测试结果

    服务器: 消息 8134,级别 16,状态 1,过程 p1,行 6
    遇到被零除错误。
    发生错误1
    服务器: 消息 208,级别 16,状态 1,过程 p1,行 10
    对象名 'newid' 无效。

    --
    */


    /*--结论1:

    错误1,不是严重的错误,所以SQL会执行下去
    错误2,属于严重的错误,所以SQL没有执行下去,因为没有第二个print的结果

    --
    */



    --演示2,存储过程嵌套调用中的错误

    --测试的存储过程1
    create proc p1
    as
    print 12/0
    if @@error<>0
        
    print '发生错误1'

    select * from newid()
    if @@error<>0
        
    print '发生错误2'
    go

    --测试的存储过程2
    create proc p2
    as
    exec p1

    if @@error<>0
        
    print '调用 存储过程1 异常结束'
    else
        
    print '调用 存储过程1 正常结束'
    go

    --调用
    exec p2
    go

    --删除测试
    drop proc p1,p2

    /*--测试结果

    服务器: 消息 8134,级别 16,状态 1,过程 p1,行 8
    遇到被零除错误。
    发生错误1
    服务器: 消息 208,级别 16,状态 1,过程 p1,行 12
    对象名 'newid' 无效。
    调用 存储过程1 异常结束
    --
    */


    /*--结论2:

    被调用的存储过程发生严重错误时,调用它的存储过程可以捕获错误,并可以继续执行下去
    --
    */



    --演示3,更严重的错误,无法用 set xact_abort on 来自动回滚事务
    set xact_abort on    --我们希望能自动回滚事务
    begin tran
        
    create table #t(id int)
        
    insert #t select 1
        
    select * from newid()
    commit tran
    go

    select * from #t
    rollback tran
    /*--测试结果


    (所影响的行数为 1 行)

    服务器: 消息 208,级别 16,状态 1,行 5
    对象名 'newid' 无效。

    id          
    ----------- 
    1

    (所影响的行数为 1 行)
    --
    */

    /*--结论3:

    我们希望 set xact_abort on 可以实现出错时自动回滚事务
    但结果令我们希望,出错时,事务并没有被回滚
    因为我们查询到了#t的结果,而且最后的回滚语句也并没有报错

    --*/


    摘自:http://topic.csdn.net/u/20080311/13/e7957449-e822-4b85-9004-6932c901a1b9.html

  • 相关阅读:
    Kubenetes环境搭建笔记
    Python+Robot Framework实现UDS诊断自动化测试
    Python实现CAN总线J1939报文接收、发送
    [转载]从SQL 2008 复制数据及对像到SQL 2000 的方法
    推荐移动应用:群落(Groupcells)——全球第一款基于图片组的近场社交电子商务平台
    [缓存]迅雷下载原理
    HP大中华区总裁孙振耀退休感言
    [缓存]HTTP协议中的TranferEncoding:chunked编码解析
    [转载]SQL 2008到2005和2000版本的转换
    [学习]SVM入门(一)
  • 原文地址:https://www.cnblogs.com/vento/p/1428020.html
Copyright © 2011-2022 走看看