授权是否应该是原子的操作?

时间:2014-10-15 23:44:46

标签: database security rest database-design

问题:授权是否应该是原子操作?

让我解释一下。

用户A正在进行API调用以查看实体。此调用需要两个步骤。

  1. 验证用户A是否有权查看/编辑实体。
  2. 将实体返回给用户A.
  3. 同时,用户B正在打电话来修改实体。新实体用户B发布不仅向实体添加新信息,还从授权用户列表中删除用户A.此调用需要两个步骤。

    1. 验证用户B是否有权查看/编辑实体。
    2. 使用用户B提供的新实体更新实体。
    3. 如果授权不是原子的,后端可以像这样处理请求。

      1. 验证用户A是否有权查看/编辑实体。 (来自用户A的API调用)
      2. 验证用户B是否有权查看/编辑实体。 (来自用户B的API调用)
      3. 使用用户B提供的新实体更新实体。 (来自用户B的API调用)
      4. 将实体返回给用户A.(来自用户A的API调用)
      5. 这是有问题的,因为用户A会收到他无权查看的信息。

        这是一个重大问题,还是我抓住稻草。

2 个答案:

答案 0 :(得分:1)

理论上,除非请求 - 响应周期是原子的,否则您将始终具有此竞争条件。

我认为您的担忧如下:

  1. B想要发布A看不到的东西。
  2. B通过一个HTTP请求撤销A的权限。
  3. B等待确认操作的HTTP响应
  4. B等了10分钟“只是为了确定。”
  5. B在新请求中发布更新的数据。
  6. 即使在这里,如果A对数据的请求是在另一个非常慢的线程上,你仍然会有竞争。

    您有两种解决方案:

    如果您使用的是事务服务器,您可以在一个工作单元中进行撤销和更新。

    另一种方法是B的编辑具有不同的访问权限,因此A看不到新的东西,但继续看到旧的东西。

答案 1 :(得分:0)

这不是一个重要问题。

即使事件没有同时发生,如果B尚未更新,A也可以查看信息。在撤消视图权限之前,用户始终可以查看信息。