使用sandbox / isolation执行sql查询

时间:2017-03-26 14:28:25

标签: javascript php mysql sql

这是一种在沙盒/隔离中执行SQL(仅限基本只读语句)的方法吗?像子查询(真的安全吗?),SQL模拟器(https://github.com/maciakl/jQuery-SQL-Emulator,越野车和慢速),ROLLBACK(可能也很慢,也很难安全)和CREATE TEMPORARY这样的选择,但我希望能找到更好的东西。

这是真实的案例:

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

P.S。我的平台是MySQL + PHP + JS

更新:

关键是,我可以创建一个只读的MySQL帐户。但是这不能阻止用户查询一些假设在单个表中无法访问的行(例如,检查表中的记录,where department_id = xx和表中的人员列表where department_id = xx)。

2 个答案:

答案 0 :(得分:0)

一种解决方案是设置(至少)该生产数据库的一个从属设备。您可以在此处阅读有关实现主从复制的信息:https://dev.mysql.com/doc/refman/5.7/en/replication.html

您可以使用一个slave对其执行各种操作,而不是在生产数据库上运行它们(应该将其设置为master):

  • 运行您的报告工具
  • 运行备份(您正在定期备份数据库吗?)
  • 运行其他测试

您可以滥用该奴隶,即使您破坏它,也不会损害您的生产数据库。

答案 1 :(得分:0)

我目前的解决方案,试图证明它是安全的:

https://github.com/wilsonlmh/sqlSandbox