CouchDb читает аутентификацию с использованием списков

Я смотрю на портирование веб-сайта в CouchDB, и это выглядит очень интересно.

Однако большая проблема заключается в том, что CouchDB, похоже, не поддерживает аутентификацию чтения; все документы в базе данных доступны всем читателям.

Предлагается в другом месте использовать разные базы данных для разных групп читателей или осуществлять аутентификацию читателей на другом (среднем) уровне, ни один из которых не является вариантом для этого проекта, где доступ определяется сложным В соответствии с ACL документа.

Я думал реализовать аутентификацию в списках и ограничить весь доступ к CouchDb этими списками. Это ограничение может быть применено с помощью простых предложений mod_rewrite в Apache, используемых в качестве обратного прокси-сервера. Списки просто извлекают строку и проверяют userCtx по ACL документа. Примерно так:

function(head, req) {
  var row;
  while (row = getRow()) {
     if (row.value.ACL[req.userCtx.name])
       send(row.value);
     else
       throw({unauthorized : "You are not allowed to access this resource"});
}

Поскольку у меня нет опыта работы с CouchDB, и я нигде не читал об этом подходе, я хотел бы знать, может ли этот подход работать.

Это способ реализации доступа для чтения или Я злоупотреблял списками для неправильной цели? Не стоит ли ожидать, что такое простое решение возможно с CouchDB?

11
задан Community 23 May 2017 в 12:00
поделиться

2 ответа

Apache mod_rewrite - это средний уровень, поэтому непонятно, что вы имеете в виду, когда говорите, что средний уровень не подходит.

Совершенно нормально реализовать политику безопасности на основе данных в couchdb. Однако цена заключается в том, что вы несете ответственность за правильность реализации. Это не так плохо, как кажется. Помните, люди уже давно используют веб-приложения MySQL.

Следует иметь в виду, что CouchDB не поддерживает разрешения на чтение на уровне документа, потому что нецелесообразно отслеживать эти разрешения, поскольку данные проходят через все карты и сокращают просмотры. Например, допустим, у нас есть система торгов.

  • Есть две ставки, моя и ваша.
  • У меня есть доступ для чтения к моей ставке, которая составляет 10 долларов, но я не могу прочитать вашу заявку из-за политики промежуточного программного обеспечения.
  • Однако я обнаружил представление, которое вычисляет среднее всех ставки. В среднем 7,50 долларов. Поэтому я знаю, что вы ставите 5 долларов, и я понижу свою ставку до 6 долларов

Другими словами, если вы обертываете CouchDB API, вам потребуется по крайней мере внести в белый список разрешенные запросы. И помните, что правила vhost и перезаписи выполняются в CouchDB, поэтому простого просмотра входящего запроса может быть недостаточно.

Надеюсь, это проливает свет на то, почему контроль чтения находится на уровне базы данных.

5
ответ дан 3 December 2019 в 09:18
поделиться

Я не уверен, что использование списка - лучший вариант для ограничения доступа к ресурсам, поскольку список - это функции, которые используются для визуализации вывода представления в определенном формате (RSS, CSV, config файлы, HTML, ...).

Рассматривали ли вы использование документа, содержащего пользователей и их разрешения? Я нашел сообщение Коре Нордманн , в котором объясняется, как преобразовать классические права пользователя / группы / разрешения из реляционных баз данных в модель CouchDB:

alt text

В зависимости от разрешений пользователь будет иметь доступ только к набору определенных просмотров.

CouchDB предлагает функции проверки, но они вызываются только при создании или обновлении документа. В книге О'Рейли говорится, что « Система аутентификации является подключаемой, поэтому вы можете интегрироваться с существующими службами для аутентификации пользователей в CouchDB, используя уровень http, интеграцию LDAP или другие средства ". Но поскольку вы упомянули, что средний уровень не является вариантом, список может быть временным решением, пока в CouchDB не будет добавлена ​​дополнительная поддержка аутентификации.

1
ответ дан 3 December 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: