couchdb-pythonをいじってみたりしてるんですが、標題のことをしようと思って調べてました。所詮、couchdbのインターフェイスはHTTPなので、HTTPリクエストを組み立ててサーバに投げれば出来ることは出来るんですが、せっかくできあいのライブラリがあるんだし、もっとお手軽にできないものかと思ってソースを読んでみました。
結論。
couchDBのwikiに解説されているとおり、あるデータベース(仮に’database’とする)のアクセスにユーザ名・パスワードが必要になるようにするには、http://server:5984/database/_security に
{ "readers" : { "names" : ["takeshi"], } }
のようなJSON文字列をPUTすれば良いのですが、db.createを使って普通のドキュメントのように ‘_id’ に ‘_security’ を設定して呼んでも、アンダースコアで始まる _id ではエラーになってしまいます。そこで、python-couchdbライブラリのUndocumentedなメソッド couchdb.client.Database.resource.put を使って設定します。
import couchdb server = couchdb.client.Server('http://admin:passwd@server:5984/') db = server.create('database') db.resource.put('_security', {'readers' : {'names' : ['takeshi']}}, {'Content-Type': 'application/json'})
というような感じで、couchdb.client.Databaseクラス下のメソッドで簡単にPUTリクエストをサーバに投げることができました。あ、takeshiさんのパスワードは /etc/couchdb/local.ini に書いておきます。または、Futonインターフェイスからサクッとパスワードの設定をすることもできます。