Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 向所有用户公开SQL SELECT查询功能:设置超时和限制关键字。这样做安全吗?_Php_Mysql_Sql_Database_Mysql 5.7 - Fatal编程技术网

Php 向所有用户公开SQL SELECT查询功能:设置超时和限制关键字。这样做安全吗?

Php 向所有用户公开SQL SELECT查询功能:设置超时和限制关键字。这样做安全吗?,php,mysql,sql,database,mysql-5.7,Php,Mysql,Sql,Database,Mysql 5.7,我正在开发一个工具,允许用户和脚本(或代理)发布和查询众包数据库,前提是用户或脚本已存入信用卡 query命令允许代理指定任何SQL SELECT语句,服务器将执行该语句(使用SELECT only SQL用户)并返回结果。服务器根据查询所用的时间以及返回的结果集的大小向代理收费 我想使用MySQL5.7的新MAX_语句_TIME()根据代理指定的最大时间开销来限制查询的执行。但是,代理可以简单地将MAX_语句_TIME设置为查询中他们喜欢的任何值,这将覆盖服务器在执行查询之前设置的任何值 虽然

我正在开发一个工具,允许用户和脚本(或代理)发布和查询众包数据库,前提是用户或脚本已存入信用卡

query命令允许代理指定任何SQL SELECT语句,服务器将执行该语句(使用SELECT only SQL用户)并返回结果。服务器根据查询所用的时间以及返回的结果集的大小向代理收费

我想使用MySQL5.7的新MAX_语句_TIME()根据代理指定的最大时间开销来限制查询的执行。但是,代理可以简单地将MAX_语句_TIME设置为查询中他们喜欢的任何值,这将覆盖服务器在执行查询之前设置的任何值

虽然它散发出一种半生不熟的解决方案的味道,但我正在考虑简单地扫描提供的查询,并拒绝使用MAX_STATEMENT_TIME关键字运行任何查询。这样,服务器理论上可以运行用户指定的SELECT查询,同时保证遵守其set MAX_语句的时间

所以,我问题的第一部分是:这是个好主意吗?我错过了什么重要的东西吗


我问题的第二部分比较笼统。如果我可以限制用户指定的SELECT查询的执行时间,那么在使用SELECT only sql用户运行用户指定的SELECT查询时是否存在一些明显的巨大缺陷?

为什么不在cnf文件中设置最大值

--maximum-max_statement_time=30
或者你想要的最大值。如果用户确实设置了一个值,则不能超过该值。从手册中:

如果要限制在运行时使用set语句设置系统变量的最大值,可以使用以下形式的选项指定此最大值--max-var_name=value at server startup。例如,要防止在运行时将query\u cache\u size的值增加到32MB以上,请使用选项--max-query\u cache\u size=32M


(但是我同意collosis的意见,即您应该包括某种API,REST或其他,因为这将最大限度地减少潜在问题。)

为什么不通过REST API公开数据?这个解决方案听起来像是在问问题。我对什么是RESTAPI还很陌生,但我想我已经有了基本的想法。选择查询是一种工具,它可以访问一个巨大的数据集,同时允许请求代理以任何方式对其进行过滤。我想让代理使用这个工具,因为我想让代理拥有程序员在使用SELECT语句时所拥有的能力。我可以创建一个api,但要么无意中限制了代理脚本的功能,要么有效地重写了整个SELECT功能。我希望代理具有SELECT查询提供的无限只读功能。我需要能够限制服务器收到的每个请求的查询超时。服务器根据请求的金额向microcents收费,因此它应该能够收取大量费用并运行大型查询,或者收取少量费用并运行小型查询。