将SQL查询限制为SELECT操作ASP.net C#

时间:2018-05-03 05:24:56

标签: c# asp.net sql-server-2016

我们正在为用户创建用户界面 1)在数据库上运行Select语句(Query可以包括Join或子​​查询)
2)在同一屏幕中查看结果

现在我们正在检查输入字符串是否具有以下任何关键字INSERT / UPDATE / DELETE / TRUNCATE / CREATE / ALTER / DROP / GRANT / REVOKE语句,并且还在SQL用户下执行查询,该查询仅具有SELECT权限DB。

在只读取用户的情况下执行它之前,还有其他方法可以添加额外的保护层来验证查询吗?

由于

3 个答案:

答案 0 :(得分:0)

  1. 确保参数用于为select提供输入 语句(避免SQL注入)。虽然用户只使用SELECT 无论如何都不能执行权限,但这也是 确保输入是正确的。
  2. 确保任何数据库相关 错误不会直接在屏幕上输出

答案 1 :(得分:0)

我假设并非所有应用程序用户都是有效的数据库用户。

您需要创建2个数据库登录。应该只有db_datareader权限才能运行查询。在代码处理中SqlException以查看最终用户是否尝试执行除select之外的其他语句。

应该有另一个数据库登录,应该使用哪个应用程序代码来执行任何其他DML操作。

答案 2 :(得分:0)

不是让人们把他们想要的任何东西写成一个命令而只是检查一下你认为可能有害的单词的命令,为什么不创建一个只能有一个动作(select)的“查询生成器”,来自t表(其中t是可用表的数量),以及所需的列。您可以使用可用操作(在您的案例中选择),可用表和可用列添加一些下拉列表。这样,您可以使用给定的输入自行生成查询,而无需用户直接将命令写入服务器。