javascript - 使用沙箱/隔离执行 sql 查询

标签 javascript php mysql sql

这是一种在沙箱/隔离中执行 SQL(基本上只是只读语句)的方法吗?像子查询(真的安全吗?)、SQL 模拟器( https://github.com/maciakl/jQuery-SQL-Emulator ,有问题且速度慢)、ROLLBACK(可能也很慢并且也很难安全)和 CREATE TEMPORARY 之类的东西是一个选择,但我希望找到更好的东西。

这是真实案例:

我正在尝试制作一个能够由用户自定义 SQL 的报告工具(SELECT 或 JOIN 或 COUNT 或 SUM 等,并输出为 csv)。然而,让用户在生产数据库中执行 SQL 确实很危险。有更好的建议吗?

附:我的平台是MySQL+PHP+JS

更新:

重点是,我可以创建一个只读 MySQL 帐户。但这不能阻止用户查询某些在单个表中无法访问的行(例如, checkin 表中的记录,where Department_id = xx 和表中的员工列表,where Department_id = xx)。

最佳答案

对于任何遇到这个问题的人。

  1. 检查列表中是否有任何函数/语句(您的列表应该 包含所有可用于获取系统信息的函数/语句)
  2. 仅从用户处获取输入以选择为 table_name.column_name
  3. 使用这些表名创建连接查询
  4. 在其中添加您的过滤条件,例如排除您不希望用户看到的行

关于javascript - 使用沙箱/隔离执行 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43029997/

相关文章:

javascript - 检查 var 是否大于或小于并执行指定的操作

php - 为什么在发出带有发布数据的请求后,PHP 中的 $_POST 数组为空

mysql - 列出用户类型及其数量和百分比

javascript - 如何将 html 文本表单发送到 javascript?

javascript - 更改多项选择中的选定选项

PHP json_decode() 用看似有效的 JSON 返回 NULL?

php - PDO PHP bindValue 不起作用

mysql - 上传/导入大型sql数据库(仅区别)mysql/linux

javascript点击带有if语句的按钮来比较文本变量

PHP 和 MySQL : Can 'insert on duplicate update' queries interfere?