鉴于以下存储过程,我能否在提供的附加WHERE
条件下防止 SQL 注入?
CREATE PROCEDURE [dbo].[ProtectDynamicWhereClause]
(@TableName varchar(50),
@OldestRecordDate varchar(15),
@WhereCondition varchar(250) = NULL)
AS
BEGIN
-- Protect the table name from SQL Injection.
DECLARE @TableNameClean varchar(150) = QUOTENAME(@TableName)
DECLARE @sql nvarchar(4000)
SET @sql =
N'
SELECT * FROM ' + 'dbo.' + @TableNameClean
+ ' WHERE EntryAge > DATEDIFF(year, @OldestRecordDate, GETDATE()) '
IF (@WhereCondition IS NOT NULL)
BEGIN
SET @sql = @sql + ' AND ' + @WhereCondition
END
EXEC sp_executesql @sql, N'@TableNameClean varchar(50), @OldestRecordDate varchar(15)',
@TableNameClean …
Run Code Online (Sandbox Code Playgroud)