2012-05-21 2 views
5

В частности, можно ли фильтровать репликацию с помощью PouchDB? Я хочу убедиться, что клиент не может опустить фильтр и, таким образом, синхронизировать с всей базой данных.Можно ли использовать фильтрованную репликацию CouchDB для репликации только подмножества данных ACLed для пользователя?

ответ

5

Нет протокола репликации CouchDB. Процесс репликации - это просто клиент, подключающийся к двум конечным точкам CouchDB, считывая документы из одного и записывая их в другой. Конечно, CouchDB поставляется с таким клиентом («репликатор»), встроенным; но концептуально это стороннее приложение.

Что это означает, вы можете удалить репликацию из анализа безопасности вашего приложения. Сначала рассмотрите возможность чтения и записи нормальных веб-клиентов на ваш сервер. Заблокируйте это. Вы можете предположить гипотетического противника с взломанным веб-браузером или с помощью пользовательского HTTP-клиента (который, например, не соблюдает политики перекрестного происхождения).

С этой проблемой репликация по необходимости будет следовать вашей политике безопасности.

Другими словами, тиражирование между PouchDB и CouchDB:

  • Если вы толкая на удаленный сервер, ваш инструмент безопасности удаленный validate_doc_update функция.
  • Если вы используете , то вытащите с удаленного сервера, ваш инструмент безопасности - это объект _security базы данных - в частности, массивы "members". Клиент может либо полностью читать базу данных, либо вообще не работать. Конечно, вы можете делать отфильтрованные репликации в специальные базы данных на стороне сервера.
+0

Это было мое предположение о том, что вы не будете открывать CouchDB напрямую (так же, как вы бы не открывали MySQL или какое-либо другое хранилище данных напрямую), а скорее реализуете какую-то сквозную конечную точку. Но я немного запутался здесь, когда вы говорите, что нет «протокола» CouchDB? Я понимаю, что вы подразумеваете под этим, выступая в качестве стороннего клиента, но мое предположение было бы в том, что репликация PouchDB достигает взаимодействия, по существу, рассматривая это поведение как протокол, или я все еще что-то пропущу здесь? –

+1

Да, вы правы. Мой комментарий - случайный, не предназначенный для того, чтобы быть кристально чистым. Конечно, существует жесткая беседа между конечными точками для тиражирования: протокол. Но здорово, что этот разговор - это просто клиент, который подключается и делает обычные обновления. Для репликации нет магического внеполосного канала. Я описываю концептуальную модель чуть больше здесь: http://stackoverflow.com/questions/4766391/what-is-the-couchdb-replication-protocol-is-it-like-git – JasonSmith

+0

CouchDB фактически предназначен для непосредственного отображения для пользователей, таких как сервер приложений. Конечно, многие люди успешно используют его в традиционной трехуровневой модели (например, MySQL). Решение об разоблачении пользователей сводится к тому, можно ли работать с пользователями CouchDB и моделью проверки подлинности. Это либо спасатель жизни (если ваше приложение соответствует этой модели), либо прерыватель транзакции (если это не так) – JasonSmith

Смежные вопросы