【发布时间】:2015-08-17 16:20:13
【问题描述】:
这似乎是一个愚蠢的问题,但我很惊讶我还没有找到明确的答案:
是否可以使用 SQL Server 参数来编写具有动态列名(和表名)的查询,还是只需要非常仔细地清理输入?
情况是表及其列名(和列数)是动态生成的,无法事先知道手动编写查询。由于不知道表和列,我不能使用 ORM,所以我求助于手动查询。通常我会使用参数来填充值以防止 SQL 注入,但是我很确定在指定表名和/或列名时不能以相同的方式完成。我想为插入、更新、更新插入和选择创建通用查询,但我显然不想让自己接受潜在的注入。是否有关于如何安全完成此任务的最佳实践?
仅供参考 - 我确实看到了 this answer,但由于我无法事先知道列/表名称,因此 case 语句可能不适用于这种情况。
环境:SQL Server 2014 通过 ADO.NET (.NET 4.5 / C#)
【问题讨论】:
-
好吧,如果您进行动态查询,您不需要知道列/表名称。但是,如果传递不同的表,则需要知道它们之间的关系。如果是这种情况,您还必须在参数中传递关系。
标签: sql-server tsql ado.net parameterized-query