如何阻止用户通过查询生成器运行UPDATE语句

时间:2013-07-26 10:00:19

标签: c# sql reporting

我们正在为我们的应用程序构建一个报告框架,这需要使用查询构建器。最终,我们希望高级用户能够构建SELECT查询以用于填充报表数据集。

使用DataAdapter(MSSQL或SQLite)构建数据集。我们可以使用任何工具来确保最终用户构建的查询只能是SELECT语句吗?

修改

如上所述,我们将SQLite作为我们支持的后端之一,无需在此平台上设置数据库权限。

4 个答案:

答案 0 :(得分:3)

为DB设置正确的权限。这是最好的解决方案。

修改

对于SQLLite,您可以在文件系统中为文件设置只读权限。

答案 1 :(得分:2)

授予用户执行SQL的权限仅为db_datareader权限,以确保他们除了读取数据外无法执行任何操作。

此问题提供了有关如何执行此操作的详细信息: How to give a user only select permission on a database

答案 2 :(得分:1)

如果查询构建器是在内部完成的,并且查询构建器在字符串中返回SQL语句,则可以解析它查找更新语句keyworks或使用Regex,如果您想省去用户的麻烦创建一个更新查询,然后意识到他们无法运行它,那么你应该考虑在创建查询时不断进行此检查。或者,您可以使用第三方查询构建器,如下所示:http://www.activequerybuilder.com/,不幸的是我相信它除了Select语句之外不支持任何其他内容,但它可能值得一试。

答案 3 :(得分:0)

我认为您所要做的就是包装QueryBuilder并仅公开授权操作。 我不善于反思,比如让用户构建一个查询,最后你告诉他这是不允许的。