如果我允许一组用户提交"explain $whatever"
到 mysql(通过 Perl 的 DBI 使用DBD::mysql
),用户是否可以将任何东西放入 $whatever 中,这会导致任何数据库更改、泄漏重要信息,甚至导致大量数据库负载?如果是这样,怎么做?
我知道通过"explain $whatever"
一个人可以弄清楚存在哪些表/列(尽管您必须猜测名称)以及表中有多少条记录,或者有多少条记录具有索引字段的特定值。我不希望人们能够获得有关未索引字段内容的任何信息。
DBD::mysql
不应该允许多个语句,所以我不希望它可以运行任何查询(只解释一个查询)。连子查询也不应该被执行,只是解释一下。
但我不是 mysql 专家,我什至不知道 mysql 的某些功能。
在试图提出一个查询计划时,优化器是否会实际执行一个表达式来得出一个索引字段将要与之进行比较的值?
explain select * from atable where class = somefunction(...)
whereatable.class
被索引并且不是唯一的并且class='unused'
不会找到任何记录但class='common'
会找到一百万条记录。可以“解释”评估somefunction(...)
吗?然后可以somefunction(...)
写成修改数据吗?