我想参数化我的存储过程的输入以防止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 - '
任何人都可以提供帮助吗?
答案 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
开头的语句。只是尝试简化正文中的存储过程执行语句。