2015-08-20 47 views
0

將存儲過程中的參數值與SQL注入安全的SQL注入串聯起來?使用通配符連接存儲過程中的安全參數?

我有一個存儲過程,允許用戶做包含在一個表中的列給定值的記錄搜索:

CREATE PROC sp_Search 
@SearchValue NVARCHAR(255) 
AS 
BEGIN 
SELECT * FROM TableA WHERE ColumnA LIKE '%' + @SearchValue + '%' OR ColumnB LIKE '%' + @SearchValue + '%' 
END 
+1

是的。你只是比較一個值。問題是當你嘗試創建一個動態SQL。 –

+1

雖然我會推薦兩件事。不要添加sp_前綴。選擇一個不同的前綴或完全放棄它們(我的偏好)。 http://sqlperformance.com/2012/10/t-sql-queries/sp_prefix第二件事是你有一個引領你的查詢nonSARGable的通配符,沒有索引量會幫助性能。如果完全有可能避免引導通配符,你應該。 –

+1

另一個問題是TableA有多大,以及您如何嘗試搜索,請記住'%term%'不是[SARG-able](https://en.wikipedia.org/wiki/Sargable)。 – lad2025

回答

0

,你還能做什麼?

CHARINDEX(@SearchValue, [COLUMNA]) > 0 
OR CHARINDEX(@SearchValue, [COLUMNB]) > 0 
+0

這也是不可用的,無論你做什麼都會強制掃描。 –

相關問題