2012-05-21 16 views

risposta

5

Non esiste un "protocollo" di replica CouchDB. Il processo di replica è semplicemente un client che si connette a due endpoint CouchDB, legge i documenti da uno e li scrive nell'altro. Ovviamente, CouchDB è dotato di un tale client ("il replicatore") integrato; ma concettualmente è un'applicazione di terze parti.

Ciò significa, è possibile rimuovere la replica dall'analisi della sicurezza dell'applicazione. Innanzitutto considera i normali client Web che leggono e scrivono sul tuo server. Bloccalo. Potresti assumere un ipotetico avversario con un browser Web compromesso o utilizzare un client HTTP personalizzato (che non rispetta le politiche di origine incrociata, ad esempio).

Con questo problema risolto, la replica seguirà necessariamente la politica di sicurezza.

In altre parole, la replica tra il PouchDB e CouchDB:

  • Se siete spingendo al server remoto, il vostro strumento di sicurezza è la funzione remota validate_doc_update.
  • Se si è che tira dal server remoto, lo strumento di sicurezza è l'oggetto _security del database, in particolare gli array "members". Un cliente può leggere interamente un database o non farlo affatto. Naturalmente, è possibile effettuare repliche filtrate in database di uso speciale sul lato server.
+0

Questa era la mia ipotesi, che non esponeste CouchDB direttamente (per quanto non esponete direttamente MySQL o qualsiasi altro archivio dati), ma piuttosto implementate una sorta di endpoint pass-through. Ma sono un po 'confuso quando dici che non esiste un "protocollo" CouchDB? Capisco cosa intendi con il fatto di agire come un client di terze parti, ma la mia ipotesi è che la replica di PouchDB stia raggiungendo l'interoperabilità trattando essenzialmente tale comportamento come un protocollo, o mi manca ancora qualcosa qui? –

+1

Sì, hai ragione. Il mio commento è casuale, non vuole essere chiaro. Naturalmente, c'è una rigida conversazione tra gli endpoint da replicare: un protocollo. Ma la cosa interessante è che questa conversazione è semplicemente un client che si connette e che effettua normali aggiornamenti. Non esiste alcun canale magico fuori banda per la replica. Descrivo un po 'di più il modello concettuale qui: http://stackoverflow.com/questions/4766391/what-is-the-couchdb-replication-protocol-is-it-like-git – JasonSmith

+0

CouchDB è in realtà progettato per essere esposto direttamente agli utenti, come un app server. Naturalmente, molte persone lo usano con successo anche in un modello tradizionale a 3 livelli (come MySQL). La decisione sull'esposizione agli utenti dipende dal fatto che tu possa lavorare con gli utenti e il modello di autenticazione di CouchDB. Questo è un salvavita (se la tua app si adatta a quel modello) o un interruttore (se non lo è) – JasonSmith