我正在开发一种工具,该工具允许用户和脚本(或代理)发布并查询众包数据库,前提是用户或脚本已存入信用。
查询命令允许代理指定任何 SQL SELECT 语句,服务器将执行该语句(使用 select-only sql 用户)并返回结果。服务器根据查询花费的时间以及返回的结果集的大小向代理收费。
我想使用 MySQL 5.7 的新 MAX_STATEMENT_TIME ( http://mysqlserverteam.com/server-side-select-statement-timeouts/ ) 根据代理指定的最大时间成本来限制查询的执行。但是,代理可以简单地将 MAX_STATEMENT_TIME 设置为查询中他们喜欢的任何内容,这将覆盖服务器在执行查询之前设置的任何内容。
虽然它散发出半生不熟的解决方案的味道,但我正在考虑简单地扫描提供的查询并拒绝使用 MAX_STATEMENT_TIME 关键字运行任何查询。这样,服务器理论上可以运行用户指定的 SELECT 查询,同时保证其设置的 MAX_STATEMENT_TIME 将被遵守。
所以,我的问题的第一部分是:这是个好主意吗?我错过了什么重要的东西吗?
我的问题的第二部分更笼统。考虑到我可以限制它们的执行时间,在使用仅限 SELECT 的 sql 用户运行用户指定的 SELECT 查询时是否存在一些巨大的、明显的缺陷?