我有一个包含 100 个左右用户的信息的数据库。我有 2 个具有数据库权限的 MySQL 用户。 root 以及特定的数据库用户“目录”。用户“目录”只有运行 SELECT 语句的权限,没有其他权限。
有些信息对该用户敏感,我使用 PHP 作为代理来检测他们是哪个用户,然后再运行任何 SQL 命令,我如何附加每个 SELECT 语句以包含 WHERE id = '$ their_id'
其中 $their_id
是一个带有 id 的 php 变量。
请注意,用户将能够编写他们的 PHP mysql 命令,我在包含连接信息的 db.php 中定义了这些限制。
我想防止用户 joe
在 joe
不可用时运行类似 SELECT * WHERE id = 'bob'
的命令't bob
.
编辑:
我目前没有扫描任何 MySQL 命令,我只是在 db.php 中为它们创建连接。无论如何我可以制作自己的代理 MySQL 命令并强制它们使用它们,这样他们就必须使用我的命令 mysql_query
而不是默认的 mysql_query
来覆盖任何处理我愿意。
最佳答案
与其修改他们的查询,不如让他们始终通过 View 引用数据。他们对创建 View 的真实表没有任何权利。您使用
创建该 ViewCreate View tablenametheyuse as select * from realtable with id = 'user'
并且只授予该用户查看他的权限。
他们现在可以在 View 上以任何他们想要的方式编写他们的 select 语句。
关于php - 仅允许用户使用数据库中的某些信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5479025/