开发者

couchDB , python and authentication

I have installed couchDB v 0.10.0, and am attempting to talk to it via python from Couch class downloaded from couchDB wiki. Problem is:

Create database 'mydb': {'error': 'unauthorized', 'reason': 'You are not a server admin.'}

I hand edited the local.ini file to include my standar开发者_开发知识库d osx login and password. I now have full access via futon but no joy WRT python. Is this an http header issue?

At a a loss - thanks!


To concour David's reply, (i.e. "This is how I do it using module CouchDB 0.8 in python 2.6 with couchdb 1.0.2")

couch = couchdb.Server(couch_server)

couch.resource.credentials = (USERNAME, PASSWORD)


You can also do:

db = couchdb.Database("http://your.url/yourdb")
db.resource.http.add_credentials(username, password)

after which all your requests should work.


The Couch class in the example does not pass any authentication information to the database, so it is not a miracle that it does not allow privileged operations. So your only options are:

  • disable authentication completely (as you mentioned)
  • pass the user name and password as part of the URI
  • pass the user name and password as an Authorization HTTP request header

If you want to pass a user name and a password, then you will need to change the Couch class. Sending an Authorization HTTP request header is easier, since the Couch class uses the httplib.HTTPConnection class. You can add such a header next to the Accept one this way:

headers = {
    "Accept": "application/json",
    "Authorization": "Basic " + 'username:password'.encode('base64')[:-1]}

Same for the other HTTP request methods.

The documentation on the basic authentication is here:

http://books.couchdb.org/relax/reference/security


Just pass it as part of the URI...python-couchdb will parse the user/pass out and use them:

http://user:pass@localhost:5984


Above are all nice; but I've found that for oauth validation methods versus basic auth, this works really well:

from couchdb import Server, Session
auth = Session()
auth.name = USERNAME
auth.password = PASSWORD
s = Server('http://localhost:5984/', session=auth)
db = s['dbname']

Note: This will not work with basic authentication; in such a case, fviktor has what I consider to be the best answer. You might also look into the security reference material he linked to if you're interested in persistent auth sessions.


There are several patches for python-couchdb that enable authentication. The code probably will be included in Version 0.7 but until then you can usr teh fork at http://github.com/mdornseif/couchdb-python - it allows you to use http://user:pass@127.0.0.1:5984/ type URLs.

http://blogs.23.nu/c0re/2009/12/running-a-couchdb-cluster-on-amazon-ec2/ (at the bottom) shows how to use CouchDB passwords.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜