仅允许用户从数据库中获取某些信息

时间:2011-03-29 21:15:34

标签: php mysql sql security

我有100个左右用户的信息数据库。我有2个拥有数据库权限的MySQL用户。 root和特定数据库用户“目录”。用户“目录”只有运行SELECT语句的权限,没有别的。

某些信息对该用户敏感,我使用PHP作为代理来检测在运行任何SQL命令之前它们是哪个用户,如何将每个SELECT语句附加到WHERE id = '$their_id'其中{{} 1}}是一个带有id的php变量。

请注意,用户可以编写PHP mysql命令,我在db.php中定义了这些限制,包括连接信息。

我想阻止用户$their_idjoe不是SELECT * WHERE id = 'bob'时能够运行joe之类的命令。


编辑:

我目前不扫描任何MySQL命令,我只是在db.php中为它们创建连接。无论如何我可以创建自己的代理MySQL命令并强制他们使用它们,这样他们必须使用我的命令bob而不是默认的mysql_query来覆盖我所做的任何处理。

2 个答案:

答案 0 :(得分:1)

不是修改他们的查询,而是始终让他们通过视图引用数据。他们对创建视图的真实表没有任何权利。您可以使用

创建该视图
Create View tablenametheyuse as select * from realtable with id = 'user'

并且仅将该用户权限授予他的观点。

他们现在以他们想要的方式在视图上编码他们的select语句。

答案 1 :(得分:0)

这似乎不太安全,但我只是检查每个条目,看看是否有'id'这个词。然后检查它是什么等于,如果它不是他们的用户id,则不执行命令。