gpt4 book ai didi

clojure - Datomic 中的访问控制

转载 作者:行者123 更新时间:2023-12-04 05:38:35 28 4
gpt4 key购买 nike

在编写基于 Datomic 和 Clojure 的应用程序时,对等点似乎可以不受限制地访问数据。如何构建一个用户 A 无法访问用户 B 私有(private)数据的多用户系统?

我知道我可以在 Clojure 中编写查询,以便只返回用户 A 的私有(private)数据......但是是什么阻止了恶意用户破解二进制文件以查看用户 B 的私有(private)数据?

更新

Clojure/Datomic 应用程序的状态似乎实际上缺乏
基于@Thumbnail 的答案和 John P Hackworth 博客链接的安全性。

让我更清楚地说明我看到的问题,因为我没有看到任何解决方案,而正是最初的问题引发了这个问题。

Datomic 有一个数据存储、一个交易者和对等点。对等点位于用户的计算机上,并针对数据存储中的数据运行查询。我的问题是:
如何限制对数据存储中数据的访问。由于数据存储是愚蠢的
实际上只是存储数据,我不确定如何提供访问控制。

当 AWS S3 用作数据存储时,客户端(对等方)必须进行身份验证
在访问 S3 之前,但一旦通过身份验证,对等方就没有访问权限
到所有数据!?如果用户想要,仅限于它运行的查询
要获取另一个用户的数据,他们可以更改客户端中的代码二进制文件,以便
查询以不同的用户名运行,对吗?说清楚……不是
访问控制只是查询的一个条件?或者是否有用户特定的
数据存储识别的连接和数据存储限制了哪些数据
是可见的?

我错过了什么?

在像 Rails 这样的传统 Web 框架中,服务器端代码限制了所有
访问数据并对用户进行身份验证和授权。用户可以更改
URL 或客户端代码,但服务器不允许访问数据,除非
用户提供了正确的凭据。

由于 Datomic 中的数据存储是愚蠢的,它似乎缺乏能力
限制每个用户的访问,应用程序(对等)必须这样做。一世
不想相信用户的行为,也不想试图获取其他用户的
信息。

一个简单的例子是银行系统。用户当然会
经过身份验证......但在那之后,是什么阻止他们修改客户端
用于更改数据查询以获取其他用户帐户的侧代码/二进制文件
来自数据存储的信息?

更新 - 型号

这里有两个关于 Datomic 和 Clojure 如何工作的可能模型……第一个是我当前的模型(在我的脑海中)。

  • 用户的计算机运行客户端/对等方,该客户端/对等方具有查询并完全访问在客户端启动之前对用户进行身份验证的数据存储,从而将用户限制为我们拥有凭据的用户。
  • 用户的计算机具有与驻留在服务器上的对等点交互的接口(interface)(webapp)。查询在服务器上,用户不能修改,因此访问控制本身受到运行对等服务器的安全性的访问控制。

  • 如果第二种模型是正确的,那么我的问题就得到了回答:用户无法修改服务器代码并且服务器代码包含访问控制......因此,我认为驻留在用户计算机上的“对等方”实际上驻留在应用服务器。

    最佳答案

    你的第二个模型是正确的。 Datomic 旨在使对等点、交易者和存储都在您控制的软件和硬件的受信任网络边界内运行。您的应用服务器运行对等库,用户通过 HTTP 等协议(protocol)与您的应用服务器交互。在您的应用程序中,您应该提供某种级别的用户身份验证和授权。这与使用 Rails 等框架编写的大多数应用程序的安全模型一致(即最终用户不需要数据库权限,而是需要应用程序权限)。

    Datomic 提供了许多非常强大的抽象来帮助您编写应用程序级别的 auth(n|z) 代码。特别是,由于交易是一流的实体,Datomic 提供了在写入时(http://docs.datomic.com/transactions.html)用任意事实(例如,负责给定交易的人的用户名、一组组等)注释您的交易的能力.)。在读取时,您可以过滤数据库值 (http://docs.datomic.com/clojure/index.html#datomic.api/filter),以便只有与给定谓词匹配的事实才会从对该数据库值的查询和其他读取操作返回。这使您可以将 authz 问题排除在查询逻辑之外,并始终如一地分层设置安全性。

    关于clojure - Datomic 中的访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23510528/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com