【问题标题】:One db per user and security每个用户一个 db 和安全性
【发布时间】:2018-09-13 05:46:28
【问题描述】:

我正在尝试实现一个使用 couchdb 作为后端的应用程序,但问题是, 安装couchdb时,couchdb允许任何人进入couchdb并创建/删除/更新数据库,所以我们为couchdb服务器配置了admin(super admin)来防止匿名。如果我们在安装couchdb服务器时配置了superadmin,那么普通用户无法创建数据库,因此不会创建用户的 userdb。只有超级管理员有权在 couchdb 中创建数据库。即使具有“管理员”角色的用户也无法在 couchdb 中创建数据库。

【问题讨论】:

  • 嗨@Roshan,您能更具体地了解您的问题吗?
  • 嗨@toti08,我已经为我的couchdb服务器配置了服务器管理员,当我尝试从应用程序创建用户数据库时,我得到“你不是服务器管理员”的响应。
  • 这是一个陈述,而不是一个问题。没错,只有服务器管理员可以创建数据库。通常,在创建用户时,您会查询远程服务器(API),它将创建用户数据库以及实际用户。
  • @toti08 如果普通用户无法创建数据库,如何实现每个用户一个db?

标签: security couchdb pouchdb


【解决方案1】:

我只是自己处理了所有这些,几乎找不到任何关于它的东西......

来自documentation

用户只能访问 (GET /_users/org.couchdb.user:Jan) 或修改 (PUT /_users/org.couchdb.user:Jan) 自己拥有的文档

这意味着用户可以将自己添加到 _users 数据库中。因此,如果您打开了couch_peruser,运行以下curl 命令将创建用户jan 以及userdb-6a616e 数据库。

curl -X PUT http://localhost:5984/_users/org.couchdb.user:jan \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d '{"name": "jan", "password": "apple", "roles": [], "type": "user"}'

您可以使用PouchDB Authentication 插件中的db.signUp() 函数来有效地做同样的事情。此外,在最初为新的远程 PouchDB 实例创建 db var 时,我必须手动对用户名进行编码:

function encode (str) {
    return unescape(encodeURIComponent(str))
        .split('').map(function (v) {
            return v.charCodeAt(0).toString(16)
        }).join('')
}

var db = new PouchDB('http://localhost:5984/userdb-' + encode(username), {
    auth: {
        username: username,
        password: username
    },
    skip_setup: true // Because the DB won't exist initially
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多