【发布时间】:2019-10-23 08:23:51
【问题描述】:
问题
我有一个使用 pouchDB 的客户端应用程序发送的录音数据库recordingsDB。每个录音都是它自己的文件。例如
{
"_id": "2019-10-20T04:51:22.744Z",
"_rev": "1-53e73be51ea76f96e3cfde2de1502439",
"locale": "en",
"_attachments": {
"recordings.webm": {
"content_type": "audio/webm; codecs=opus",
...
}
}
}
客户端应用程序有一个用户clientUser(因此访问该网站的任何人都变为clientUser)。因此,客户端用户可以写入recordingsDB,但也可以从recordingsDB 读取,这是不可取的,因为他们可以从recordingsDB 读取任何记录。
我走上了“只写”数据库之路,遇到了 2011 年的 this 答案。我想知道如何实现它。
想法
所以我相信如果我的recordingsDB 将所有录音复制到masterRecordingsDB 那里clientUser 不再是成员,那么我认为会起作用。将recordingsDB 中的每个文档复制到masterRecordingsDB 后,它将被删除。
设置
我已经配置了一个复制器,它将内容从recordingsDB复制到masterRecordingsDB。
{
"_id": "recordings_to_master_recordings",
"_rev": "3-a6fa84dd89c2ec037353c17f65b4c765",
"continuous": true,
"source": {
"url": "http://localhost:5984/recordings",
"headers": {
"Authorization": "Basic YWRtaW46cGFzc3dvcmQ="
}
},
"target": {
"url": "http://localhost:5984/master_recordings",
"headers": {
"Authorization": "Basic YWRtaW46cGFzc3dvcmQ="
}
},
"user_ctx": {
"name": "admin",
"roles": [
"_admin"
]
},
"owner": "admin"
}
如何在每次复制成功后删除recordingsDB中的项目?
【问题讨论】:
-
看来你应该已经有了更容易解决这个问题的方法。通常,位于 Internet 和 db 之间的应用服务器会强制执行 authn 和 auhtz。在您的示例中,应用服务器应该停止对属于其他人的数据的请求,返回 403 Forbidden 或其他内容。 app 用户与 db 用户不相同。即你在这里是
Eric-PNGK,但是stackoverflow应用服务器用来存储这个问题的db帐户是notEric-PNGK;它是一个系统级的 Microsoft Sql Server 帐户,受到应用服务器的严密保护。 -
使用 CouchDB / PouchDB。每个用户都有自己的数据库。我必须避免这种情况,并将所有客户端都放在一个数据库上。因此,所有客户端都是同一个应用用户。为了帮助确保最终用户的匿名性,要求使用此功能。所以我相信在这种情况下所有客户端用户也是同一个数据库用户。
-
您可以告诉 pouch db 将更改复制到主数据库,而不是相反。我的意思是您可以执行以下操作:localDB.replicate.to(remoteDB),因此只有本地更改会到达 couchDB,如果另一个用户在 couchDB 上更改/添加了某些内容,那么这将永远不会到达本地 pouch db。跨度>
-
@needsleep 这是真的,我们目前正在做的事情。问题是是否有人要找到此客户端用户的名称和密码。然后,他们可以使用 curl 访问录音数据库并获取所有用户的信息。
标签: database couchdb pouchdb couchdb-2.0