Извините за этот вопрос скорее да / нет, но я не нашел документ, который бы разъяснял его, или я, должно быть, пропустил его здесь . Это стандартное поведение, когда вы можете просто создать новую запись пользователя в couchDB (не будучи пользователем с правами администратора) следующим образом:
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"}'
Я только что попробовал. Он действительно работает и создает нового пользователя. Я не был уверен, предназначено это или нет (существует администратор сервера, так что это не администратор). Можно ли ограничить / настроить такое поведение для предотвращения нежелательных массовых подписок?
Я нашел ответ на свой вопрос здесь :
Кроме того, база данных _users теперь обрабатывается иначе, чем другие базы данных:
Анонимный пользователь может только создать новый документ.
Итак, да , анонимный (не прошедший аутентификацию) пользователь может создать нового пользователя в CouchDB.
Чтобы настроить / ограничить это поведение, вы можете изменить функцию validate_doc_update
внутри проектный документ _design / _auth
, который уже обрабатывает определенные ограничения на создание пользователей (см. официальный пример ). Проверка ! Is_server_or_database_admin (userCtx, secObj)
уже существует. Чтобы разрешить только администраторам добавлять новых пользователей, вы можете:
throw({forbidden : 'Users can only be created by server or db admins in this specific CouchDB installation'})
В начале этого оператора запретить любые дальнейшие действия, если они не аутентифицированы как администратор базы данных.
Затем выглядит часть в validate_doc_update
что-то вроде:
//[… existing code …]
if(!is_server_or_database_admin(userCtx, secObj)) {
throw({forbidden : 'Users can only be created by server or db admins in this specific CouchDB installation'})
//[… existing code …]
}
Подробнее см. (прокрутите вниз) в официальной документации.
EDIT: извините, это не отвечает на вопрос. Я прочитал его недостаточно внимательно.
Стандартным поведением является "Admin Party", что означает, что если не создан начальный админ (см. ниже), то все являются админами. Поэтому, чтобы ответить на вопрос - да.
CouchDB предлагает основные механизмы аутентификации.
Наиболее важным моментом является бит документации: http://docs.couchdb.org/en/latest/intro/security.html?highlight=security#authentication-database. Пользователи хранятся в базе данных аутентификации, а администраторы - в файле local.ini. Чтобы добавить администратора:
couchdb -c
[администраторы]
, прокомментируйте строку admin
и добавьте пароль открытым текстомВы можете также добавить роль admin
в базу данных пользователей, но несмотря на то, что имя то же самое, это всего лишь другой пользователь.
Пожалуйста, посмотрите также http://docs.couchdb.org/en/latest/api/database/security.html
Чтобы анонимный пользователь не создавал новых пользователей в базе данных «_users» в CouchDB 2.2, откройте диспетчер БД Fauxton и щелкните базу данных «_users».
Нажмите «Разрешения» "и установите" Пользователи "на" admin "и" Роли "на" _admin ".
Также установите «Участники» на «admin» и «Роли» на «_admin».
Сохраните файл, и все готово.
(спасибо Эрику и Крису из CouchDB Users)
Принятый ответ неверен, поскольку предполагает, что:
"вы можете изменить функцию validate_doc_update внутри _design / _auth проектный документ "
Это не совсем так. CouchDB позволит вам изменять функцию validate_doc_update внутри проектного документа _design / _auth, но содержимое документа будет возвращено в исходное состояние после перезапуска CouchDB . Это означает, что, если ваш CouchDB будет перезапущен, изменения будут потеряны.
См. документацию CouchDB - http://docs.couchdb.org/en/stable/intro/security.html#authentication-database :
Существует специальный проектный документ _auth, который нельзя изменить
Правильное решение заключается в изменении поведения из конфигурационного файла CouchDB local.ini .
См. https://docs.couchdb.org/en/latest/config/auth.html#couch_httpd_auth/require_valid_user
require_valid_user
Если для этого параметра установлено значение true, запросы из анонимные пользователи. Все должны пройти аутентификацию. [chttpd] require_valid_user = ложь [couch_httpd_auth] require_valid_user = ложь