CouchDB - предотвращение несанкционированного чтения - PullRequest
11 голосов
/ 19 января 2011

CouchDB имеет механизм для предотвращения несанкционированной записи.

Может ли это также предотвратить несанкционированное чтение?

1 Ответ

23 голосов
/ 19 января 2011

Да, CouchDB может предотвратить несанкционированное чтение. К сожалению, это немного менее просто.

Представьте себе секретное аукционное приложение. Вы предлагаете $ 20, а я - $ 10; каждая ставка в бумажном документе. Couch позволяет нам читать наши собственные документы заявки, но не другие. Тем не менее, , есть представление с уменьшением карты, показывающее среднее значение. Я загружаю представление и вижу, что среднее значение составляет 15 долларов, поэтому я пришел к выводу, что ваша ставка составляет 20 долларов, и я нарушил политику безопасности. Просмотр результатов может привести к утечке части или всей информации документа. Невозможно обеспечить безопасность на уровне документов. Вот почему доступ для чтения находится на уровне базы данных.

Я знаю, это отстой. Но это единственный правильный, масштабируемый ответ.

Это одна из причин, по которой философия Couch заключается в создании множества баз данных - даже одной (или более!) На пользователя. Разрешение на чтение для базы данных задается в значении readers объекта database _security. (Обратите внимание, что поле reader было переименовано в члены в транке CouchDB, поскольку оно также указывает, кто может писать в БД.)

Техника работает так:

  1. Создать базу данных для каждого пользователя. Он будет содержать все документы, которые пользователь может прочитать. Добавьте пользователя (или роль пользователя) к объекту _security.
  2. В базе данных master создайте функцию фильтра, которая реализует политику чтения. (Он может поделиться кодом с validate_doc_update.)
  3. Реплицировать из основной базы данных в базу данных пользователя с помощью ?filter=my_filter_function.
  4. Разрешить пользователю загружать (или копировать из) свою базу данных.

Конечно, это все для чистого приложения Couch, где пользователи получают прямой доступ к Couch. Если у вас есть средний уровень (контроллер MVC или просто обратный HTTP-прокси), вы можете применить политику там, между пользователем и диваном. Но будьте осторожны . Например, функция _show или правило _rewrite могут позволить пользователю загрузить представление или документ, несмотря на вашу политику.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...