2012-01-06 37 views
1

我想允许SELECT查询到我的数据库,但不想允许更新(或丢弃!)。这足以净化用户提供的SQL查询吗?

是否足以确保查询开始与SELECT和不包含分号?

我使用JDBC来执行查询,目前针对MySQL的,但希望不要将其限制了这一点。

编辑: 我很欣赏使用无法更新的用户的谨慎,但想知道这是否有必要,而不是仅仅迷信。

+2

大概不会。你应该通过只提供'SELECT'权限来管理这个。请说出RDBMS。 – 2012-01-06 23:27:30

+2

这是一个等待发生的安全灾难 - 如果你真的必须允许SQL查询,然后通过一个特殊用户执行它们,而这个特殊用户可能需要最少的特权! – Yahia 2012-01-06 23:29:36

回答

3

一种更好的方式去了解这是创建一个新帐户,并允许该帐户的某些命令。

+0

这没有帮助。如果你让我运行一个我选择的SELECT查询,那么我只能使用'USAGE'特权来使服务器崩溃。 – 2012-01-07 00:26:07

1

你不能执行用户提交的代码。允许用户提交代码是一种很好的方式,至少可以让自己面对拒绝服务攻击。例如,攻击者可以轻松地提交带有保证关闭服务器的巨大笛卡尔产品的查询。

您可以放心地允许用户指定,而不是代码。然后通过使用带有参数的预准备语句将它们输入的值组合到SQL查询中。

允许用户提交的SQL查询是危险的,因为shellexec($_GET["cmd"]);

+0

谢谢比尔,但问题是试图弄清楚这是如何危险的。 DOS是我可以生活的东西,我害怕数据删除或妥协。 – TimP 2012-01-07 09:55:16