使用sql server参数化输入?

时间:2012-12-14 12:18:43

标签: sql sql-server parameters sql-injection

我想参数化我的存储过程的输入以防止sql注入。问题是我的数据库没有应用程序(它只适用于学校)&由于没有像C#等客户端语言,我必须使用sql本身。我做了这个

ALTER procedure [dbo].[drop_tt]
@ss varchar(40)
as
EXEC sp_executesql N'SELECT *
FROM    tt
whERE   ss = @Ss', N'@ss varchar(40)', @ss

但是当我执行此语句时,tt表被droped :( exec drop_tt'www'; drop table tt - '

任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:1)

简而言之:为什么要改变sp?你只需要创建一个参数化的存储过程,如:

CREATE PROCEDURE uspGetAddress @City nvarchar(30)
AS
SELECT * 
FROM AdventureWorks.Person.Address
WHERE City = @City
GO

只看这个simple tutorial,你不需要改变你的程序。

编辑:我的方法是摆脱EXEC sp_executesql语句并命名以drop开头的语句。只是尝试简化正文中的存储过程执行语句。