我有100个左右用户的信息数据库。我有2个拥有数据库权限的MySQL用户。 root和特定数据库用户“目录”。用户“目录”只有运行SELECT语句的权限,没有别的。
某些信息对该用户敏感,我使用PHP作为代理来检测在运行任何SQL命令之前它们是哪个用户,如何将每个SELECT语句附加到WHERE id = '$their_id'
其中{{} 1}}是一个带有id的php变量。
请注意,用户可以编写PHP mysql命令,我在db.php中定义了这些限制,包括连接信息。
我想阻止用户$their_id
在joe
不是SELECT * WHERE id = 'bob'
时能够运行joe
之类的命令。
编辑:
我目前不扫描任何MySQL命令,我只是在db.php中为它们创建连接。无论如何我可以创建自己的代理MySQL命令并强制他们使用它们,这样他们必须使用我的命令bob
而不是默认的mysql_query
来覆盖我所做的任何处理。
答案 0 :(得分:1)
不是修改他们的查询,而是始终让他们通过视图引用数据。他们对创建视图的真实表没有任何权利。您可以使用
创建该视图Create View tablenametheyuse as select * from realtable with id = 'user'
并且仅将该用户权限授予他的观点。
他们现在以他们想要的方式在视图上编码他们的select语句。
答案 1 :(得分:0)
这似乎不太安全,但我只是检查每个条目,看看是否有'id'这个词。然后检查它是什么等于,如果它不是他们的用户id,则不执行命令。