Один дБ на пользователя и безопасность - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь реализовать приложение, которое использует couchdb в качестве бэкэнда, но проблема в том, При установке couchdb, couchdb позволяет любому входить в couchdb и создавать / удалять / обновлять базы данных, поэтому мы настраиваем admin (супер-администратора) для сервера couchdb, чтобы предотвратить анонимность. И если мы настраиваем superadmin при установке сервера couchdb, то обычные пользователи не могут создавать базы данных, поэтому userdb для пользователя не создается. Только супер администратор имеет право создавать базы данных в couchdb. Даже пользователи с ролью «администраторы» не могут создать базу данных в couchdb.

1 Ответ

0 голосов
/ 14 ноября 2018

Я только что разобрался со всем этим сам и почти ничего не мог найти ...

Из документации :

Пользователи могуттолько доступ (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"}'

Вы можете использоватьФункция db.signUp () из плагина PouchDB Authentication позволяет эффективно делать то же самое.Кроме того, мне пришлось вручную кодировать имя пользователя при первоначальном создании db var для нового удаленного экземпляра PouchDB:

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
})
...