我希望能够让人们通过一个随机id的链接私密地分享文档,就像我在pastebin上发布私密链接后得到的一样。我想了解这对于CouchDB和Cloudant来说是否通用。
在 Apache CouchDB 中,读取权限是针对整个数据库而非单个文档。如果用户能够从数据库中获取文档,则该用户也可以获取 _all_docs?include_docs=true
。
我在这个问题中详细介绍了有关CouchDB读取授权的内容。
有几种方法:
第七层防火墙或反向 HTTP 代理。这很难正确执行;对大多数人来说不可行。您必须非常熟悉 CouchDB 的 API,以确保每个可能的查询都被阻止(例如,_rewrite
绕过您的过滤器)。
每个用户一个数据库。这是 CouchDB 的本地解决方案。创建数据库非常便宜。然后,将用户可以查看的文档复制到他或她的数据库中。用户需要在 Couch 上设置密码或 OAuth 帐户。
我最近尝试了为每个用户创建数据库并使用 URL 中的唯一键立即授权的方法,感觉像您想要的东西,但在幕后,我只是创建了一些带有随机密码的一次性账户。链接指向公共页面,例如 www.example.com/pastebin/index.html?doc_id=some_docid&secret=random_secret
。然后,浏览器上的 Javscript 会读取 window.location
并将该密码插入 AJAX 查询中(在授权标头中)。Couch 授予权限,用户满意。不幸的是,这需要一点试错,但它大多是简单的 Web 编程。