クライアント(ブラウザー)アクセス用のドキュメントスタイルのデータベース(MongoDB、CouchDB、RavendB)のセキュリティ
質問
HTTPアクセスを介したRESTスタイルのJSONをサポートするドキュメントデータベースは、ブラウザがデータベースに直接呼び出し、従来のWebサーバー /アプリケーションロジックコンポーネントをバイパスしているAJAXが豊富なアプリケーションをサポートするのに理想的です。この例は、ユーザーが認証されたら、ユーザーの好みを取得することです。 (BBCホームページは、負荷の下でクラッシュする前に、この良い例かもしれません!)
このシナリオの問題は、セキュリティの問題です。ユーザーがWebサーバー(基本フォーム認証など)を使用して認証されている場合、このIDはどのようにドキュメントDBに引き継がれていますか。とにかく、Webサーバーを介してDBへのすべてのリクエストへのすべてのプロキシに対する唯一の回答は、直接外部アクセスがないようにドキュメントDBを保護しますか?
これは最も理にかなっているようで、実装が最も簡単ですが、不均一な環境でドキュメントDBを使用する経験やアドバイスがあるかどうかは疑問に思っていましたか?
解決
これはおそらく、あなたが言及するすべてのデータベースで異なります。 CouchDBでの仕組みは次のとおりです。
CouchDBを使用すると、ユーザーと役割を管理できます。
使用できます validate_doc_update
ドキュメントの作成/更新を制限するための設計ドキュメントの機能。たとえば、著者以外の誰にでもドキュメントの更新を拒否する検証を書くことができます。
データベースからドキュメントを読むことができる人を制限するには、 /db_name/_security
ユーザーまたは役割を文書化してリストします。
ただし、読み取りアクセスをより詳細にすることができるとは思いません(つまり、ユーザーが作成したドキュメントのみを読み取ることができます)。
それを達成するには、CouchDBをプロキシの後ろに置き、ビューを使用して、認証されたユーザーにドキュメントを提供する必要があります。この方法でCouchDBユーザー管理を使用できます。プロキシは、データベースへの直接アクセスを隠すだけです。
詳細については、を確認してください CouchDB wikiのセキュリティ概要, 、 リラックスブックのセキュリティ章 この 短いスクリーンキャスト.
他のヒント
まあ、私はCouchDBの経験しかありませんが、それでもあなたを助けることができることを願っています。
CouchDBには検証プロセスが組み込まれているため、検証ルールをJavaScriptに書き込み、現在のユーザーがあるグループにアクセスできます。基本的にCouchDB自体によってすべて処理されているため、情報をログインする方法を気にする必要はありません。