Извините за этот вопрос, скорее да / нет, но я не нашел документа, который бы разъяснял его, или я, должно быть, пропустил его Вот. Это стандартное поведение, когда вы можете просто создать новую запись пользователя в 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 теперь обрабатывается иначе, чем другие базы данных:
An anonymous user can only create a new document.
Так, да, анонимный (не прошедший проверку подлинности) пользователь может создать нового пользователя в 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'})
В начале этого оператора, чтобы запретить любые дальнейшие действия, если они не аутентифицированы как db admin.
Роль в 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 …]
}
Обратитесь к пример (прокрутите вниз) в официальной документации.
Чтобы предотвратить создание анонимным пользователем новых пользователей в базе данных «_users» в CouchDB 2.2, откройте диспетчер БД Fauxton и щелкните базу данных «_users».
Щелкните вкладку «Разрешения» и установите «Пользователи» на «admin», а «Роли» на «_admin».
Также установите «Члены» на «admin» и «Роли» на «_admin».
Сохраните файл, и все готово.
(спасибо Эрику и Крису из CouchDB Users)
РЕДАКТИРОВАТЬ: извините, это не ответ на вопрос. Я недостаточно внимательно ее прочитал.
Стандартным поведением является «Администрация», что означает, что если начальный администратор не создан (см. Ниже), все являются администраторами. Итак, чтобы ответить на вопрос - да.
CouchDB предлагает базовые механизмы аутентификации.
Наиболее важный бит документации: http://docs.couchdb.org/en/latest/intro/security.html?highlight=security#authentication-database. Пользователи хранятся в базе данных аутентификации, а администраторы хранятся в файле local.ini. Чтобы добавить администратора:
couchdb -c
[admins]
раскомментируйте строку admin
и добавьте пароль в виде обычного текстаВы также можете добавить роль admin
в базу данных пользователей, но хотя имя то же самое, это просто другой пользователь.
См. Также http://docs.couchdb.org/en/latest/api/database/security.html
Принятый ответ неверен, поскольку предполагает:
"вы можете изменить функцию 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:
There is a special design document _auth that cannot be modified
Правильное решение - изменить поведение из CouchDB local.ini файл конфигурации.
Видеть https://docs.couchdb.org/en/latest/config/auth.html#couch_httpd_auth/require_valid_user
require_valid_user
When this option is set to true, no requests are allowed from anonymous users. Everyone must be authenticated. [chttpd] require_valid_user = false [couch_httpd_auth] require_valid_user = false