这是一种在沙箱/隔离中执行 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
)。
最佳答案
对于任何遇到这个问题的人。
- 检查列表中是否有任何函数/语句(您的列表应该 包含所有可用于获取系统信息的函数/语句)
- 仅从用户处获取输入以选择为 table_name.column_name
- 使用这些表名创建连接查询
- 在其中添加您的过滤条件,例如排除您不希望用户看到的行
关于javascript - 使用沙箱/隔离执行 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43029997/