sql - .NET/SQL 中的参数化表名?

标签 sql .net sql-server parameters

正如主题所示,我希望能够使用 .NET(实际上使用哪种语言)和 SQL Server 将表名作为参数传递。

我知道如何对值执行此操作,例如command.Parameters.AddWithValue("whatever",whatever) 在查询中使用 @whatever 来表示参数。问题是我现在的情况是希望能够对查询的其他部分(例如列名和表名)执行此操作。

这不是一种理想的情况,但这是我必须使用的情况,它不太容易发生 SQL 注入(inject),因为只有使用代码的人才能设置这些表名称,而最终用户不能。但还是很乱。

那么,我所要求的可能吗?

编辑:为了清楚地说明 SQL 注入(inject)的要点,表名仅通过源代码传入,具体取决于情况。这是由开发商指定的。无论如何,开发人员都可以访问数据库层,所以我问的原因并不是为了安全,而是为了让代码更干净。

最佳答案

您不能直接参数化表名。您可以通过 sp_ExecuteSQL 间接完成此操作,但您也可以在 C# 中构建(参数化)TSQL(连接表名而不是其他值)并将其作为命令发送下来。您获得相同的安全模型(即您需要显式 SELECT 等,并假设它未签名等)。

另外 - 请务必将表名称列入白名单。

关于sql - .NET/SQL 中的参数化表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/372033/

相关文章:

.net - 不引用 GAC 进行开发

.net - 如何确定 SqlConnection 是否被登记到 System.Transactions 的 tx 中?

sql - 运行查询时列名无效

java - JDBC : How to pass List of object into preparedStatement, 或更好的替代方案

sql - Oracle中的简单递归查询

php - Joomla 模块 - SQL 未找到?

c# - 如何将 valuetype 设置为正整数?

sql - 动态交叉应用值

c# - SQL服务器 :How to speed up Select and Insert query in loops of statements using c#

使用关联实体过滤值的 SQL 查询