当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL脚本生成的一些BUG(2)

MSSQL
SQL注入漏洞全接触--进阶篇(二)
SQL注入漏洞全接触--高级篇(一)
SQL注入漏洞全接触--高级篇(二)
SQL Server补丁安装常见问题
[专题]SQL SERVER实用经验技巧集
防范SQL注入式攻击
Mssql和Mysql的安全性分析
SQL概述及在网络安全中的应用
安全入门:SQL注入漏洞全接触
数据库系统防黑客入侵技术综述
SQL注入奇招致胜 UNION查询轻松免费看电影
看紧你的3306端口,一次通过mysql的入侵
MSSQL db_owner角色注入直接获得系统权限
针对SQL INJECTION的SQL SERVER安全设置初级篇
有孔就入 SQL Injection的深入探讨
SQL注入不完全思路与防注入程序
SQL注入攻击的原理及其防范措施
SQL Server应用程序中的高级SQL注入
数据库下载漏洞攻击技术
SQL注入实战---利用“dbo”获得SQL管理权限和系统权限

MSSQL 中的 SQL脚本生成的一些BUG(2)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 79 ::
收藏到网摘: n/a

从上面你一眼就可以看出来了,建立view要比建立function先,而不是根据依赖关系建立。毫无疑问,将会得到如下的严重的错误:

服务器: 消息 208,级别 16,状态 1,过程 vwT1,行 4

对象名 'dbo.fnT1' 无效。

服务器: 消息 208,级别 16,状态 1,过程 fnT2,行 5

对象名 'vwT1' 无效。

2. 作业脚本

这个我就不说了,bug还不是很严重,主要是中文“——”注释符的问题。英文版我没有测试过,不过猜想应当没有这个bug,大家可以试试看。

3. 还有一个SP的问题

spGetIDStr和spAnalyseStrList的关系,是后者依赖于前者。可是spGetIDStr我并没有调用任何的表,因此,每当运行SQL Server生成的脚本的时候,总是报告类似这样的信息:

spGetIDStr并不存在,无法在sysdepends里建立依赖关系,存储过程spAnalyseStrList仍然建立。无论我手工修改其建立顺序或是别的方面,用它生成的脚本就是有错。这里,再看看第三个bug,看我下面的测试程序:

(原理:当sp没有对表或视图等数据库对象有依赖关系时,sp被别的sp引用时也将无法建立依赖关系)

形成依赖关系:spB1 <--- spA1

_NOBR> _CODE>create proc spB1
as
return 11

go

create proc spA1
as
begin
declare @i int
exec @i=spB1
return @i*2
end
go_CODE>

_NOBR>

生成的脚本就为:

_NOBR> _CODE>if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spA1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[spA1]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spB1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[spB1]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


Create proc spA1
As
Begin
Declare @i int
Exec @i=spB1
Return @i*2
End

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

Create Proc spB1
As
Return 11


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO_CODE>

_NOBR>

现在,大家应当明白我故意命名为spA1,spB1缘故了。因为如果没有依赖关系的话,A自然排在B前面,你看微软可不就是这么做的么?幸好这个bug还不是很大,怎么说SP还是建立了起来。

各位有兴趣的可以试试别的,比如sp与fn,sp Group等等。