正如主题所示,我希望能够使用 .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/