2011-03-29 104 views
1

我有100个左右用户的信息数据库。我有2个拥有数据库权限的MySQL用户。根目录以及特定的数据库用户“目录”。用户“目录”只有权限运行SELECT语句,没有别的。只允许用户从数据库中获得某些信息

一些信息是该用户的敏感,我使用PHP作为代理,以检测它们是用户的任何SQL命令运行之前,我怎么能追加的SELECT语句都包括WHERE id = '$their_id'其中$their_id是一个PHP变量与他们的身份证。

请注意,用户将能够编写他们的PHP MySQL命令,我在db.php中定义了这些限制,其中将包含连接信息。

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


编辑:

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

回答

1

而不是修改他们的查询只是总是让他们通过视图引用数据。他们根本没有权利去创建视图的真实表格。您创建该视图与

Create View tablenametheyuse as select * from realtable with id = 'user' 

并且只给予该用户权限,以他的观点。

他们现在可以通过视图以任何他们想要的方式编写他们的select语句。

0

这似乎不是很安全,但我只是检查每个条目,看看是否在它的单词'id'。然后检查它是否等于它,如果它不是它们的用户标识,则不执行该命令。

+0

看起来很容易,但看到更新的答案如何强制他们使用的功能,将处理这个 – ParoX 2011-03-29 21:25:05

+0

看起来他们只是输入MYSQL查询。所以你可以创建你自己的函数process_queries(query),然后当你完成编辑它时,你可以使用mysql_query(query) – zamN 2011-03-29 21:36:04