Datomic中的访问控制

Jas*_*son 8 clojure datomic

在编写基于Datomic和Clojure的应用程序时,同行似乎可以不受限制地访问数据.如何构建一个多用户系统,用户A无法访问用户B专用的数据?

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

UPDATE

根据@Thumbnail和John P Hackworth博客链接的答案,Clojure/Datomic应用程序的状态实际上缺乏安全性.

让我更清楚地说明我看到的问题,因为我没有看到任何解决方案,这是提出这个问题的原始问题.

Datomic有一个数据存储,一个transactor和peer.对等体位于用户的计算机上,并针对来自数据存储的数据运行查询.我的问题是:如何限制对数据存储中的数据的访问.由于数据存储是愚蠢的,实际上只是存储数据,我不知道如何提供访问控制.

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

我错过了什么?

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

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

一个简单的例子是银行系统.当然用户将被认证...但在那之后,是什么阻止他们修改客户端代码/二进制文件以更改数据查询以从数据存储中获取其他用户的帐户信息?

更新 - 型号

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

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

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

小智 12

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

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