我有一个客户,他们以前的开发人员为他们编写了程序。最近他们的代码变得可疑起来,我想知道他们是否在使用参数化查询。我希望能够通过SQL Server检测非参数化请求,但我还没有找到方法。我理解并不是所有的查询都需要参数化,因为查询可能是这样的:
select count(*) from Customers
但是如果SQL Server可以通过程序告诉我哪些查询具有任何字符串常量输入而不是参数输入,那将是很好的。 顺便说一下,记录所有SQL查询并删除所有带有@符号的行是接近的,但以下查询将被视为合法:
select * from Users where Username='user' and Password=@Password
我需要SQL Server读取命令的内容,并确定所有输入是否已参数化。谢谢。
SELECT * FROM [master].[sys].[syscacheobjects] WHERE [sql] LIKE '%WHERE%''%'
,它会给你执行的查询,其中在WHERE
后面有任何单引号。显然,你可以想出各种变化,但我认为[syscacheobjects]
系统视图中的[sql]
列可能会对此有所帮助。 - Doug_Ivison