[英]SQL Query for paramaterized dynamic table
我管理的產品團隊之一擁有大量使用動態sql查詢的查詢,這些查詢使用串聯將表注入。 盡管具有衛生功能,但我正在嘗試完全刪除動態sql。
有沒有一種方法可以參數化表名? 我正在嘗試思考如何查詢類似表的內容:
SELECT * FROM (SELECT DISTINCT Table_Name FROM INFORMATION_SCHEMA.Tables WHERE Table_Name = :queryParam)
這可能嗎?
我正在嘗試完全刪除動態sql。
Dynamic SQL
您將無法做到。 這可能嗎?
為什么?
Variables
只能在表達式中使用,而不能代替object names
或keywords
。 要構造dynamic SQL
語句,請使用EXECUTE
。 這是唯一的方法:
DECLARE @Column SysName = N'Table_Name',
@Param NVARCHAR(128) = N'ParamValue';
DECLARE @SQL NVARCHAR(MAX)=N'SELECT *
FROM(
SELECT '+ QUOTENAME(@Column) +
'FROM INFORMATION_SCHEMA.Tables
WHERE ' + QUOTENAME(@Column) + ' = @Param
) T';
EXECUTE sp_executesql @SQl,
N'@Param NVARCHAR(128)',
@Param;
無法“適當地”完全阻止SQL內的SQL注入,調用應用程序層應在執行任何SQL語句之前執行此操作。
在應用程序代碼中生成SQL時,可以通過使用ORM或構建代碼來保護自己免受SQL注入,從而解決該問題。
這感覺就像是經典的XY問題,請后退一步,並認為您需要保護對SQL Server本身的訪問,而不是在“訪問” SQL Server之后清除所有內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.