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

本文关键字:运行 UPDATE 语句 查询 何防止 用户 | 更新日期: 2023-09-27 18:25:12

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

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

编辑:

如上所述,我们将SQLite作为我们支持的后端之一。在此平台上不能设置DB权限。

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

设置数据库的权限。这是最好的解决方案。

编辑:

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

只向执行SQL的用户授予db_datareader权限,以确保他们除了读取数据之外什么都不能做。

这个问题提供了有关如何做到这一点的更多信息:如何在数据库上只授予用户选择权限

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

我认为您所要做的就是包装QueryBuilder并只公开允许的操作。我不应该反过来想,比如让用户构造一个查询,最后你告诉他这是不允许的。