【问题标题】:Allow users only certain information from database只允许用户从数据库中获取某些信息
【发布时间】:2011-03-29 21:15:33
【问题描述】:

我有一个包含 100 个左右用户的信息数据库。我有 2 个 MySQL 用户有权访问数据库。 root 以及特定的数据库用户“目录”。用户“目录”只有运行 SELECT 语句的权限,没有其他权限。

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

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

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


编辑:

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

【问题讨论】:

    标签: php mysql sql security


    【解决方案1】:

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

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

    并且只授予该用户对其视图的权限。

    他们现在可以在视图上以任何他们想要的方式编写他们的选择语句。

    【讨论】:

      【解决方案2】:

      这似乎不太安全,但我会检查每个条目以查看其中是否包含“id”一词。然后检查它等于什么,如果不是他们的用户 ID,则不要执行命令。

      【讨论】:

      • 看起来很简单,但请参阅更新答案,了解如何强制他们使用将处理此问题的函数
      • 好吧,看起来他们只是在输入 MYSQL 查询。因此,您可以创建自己的函数 process_queries(query),然后在完成编辑后就可以使用 mysql_query(query)
      猜你喜欢
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 2014-07-19
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      相关资源
      最近更新 更多