2009-11-21 3 views
10

Я установил couchDB v 0.10.0, и я пытаюсь поговорить с ним через python из класса Couch, загруженного с wiki-виджета couchDB. Проблема заключается в следующем:couchDB, python и аутентификация

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

Я вручную отредактировал файл local.ini, чтобы включить мой стандартный логин и пароль osx. Теперь у меня есть полный доступ через futon, но нет радости WRT python. Это проблема заголовка HTTP?

В убытке - спасибо!

+0

Какую библиотеку python вы используете? Есть несколько перечисленных на странице вики python (http://wiki.apache.org/couchdb/Getting_started_with_Python) – andyuk

+0

thanks andyuk - Я использую код EXAMPLE, который находится на странице wiki, так как он прост. Я также пытаюсь найти документ couchDB об отключении auth (локально) – idiotype

ответ

5

Класс Couch в примере не передает никакой информации аутентификации в базу данных, поэтому не чудо, что оно не позволяет выполнять привилегированные операции. Так что ваши только варианты:

  • отключить аутентификацию полностью (как вы упомянули)
  • передать имя пользователя и пароль в качестве части URI
  • передать имя пользователя и пароль в качестве запроса заголовка Authorization HTTP

Если вы хотите передать имя пользователя и пароль, вам необходимо будет изменить класс Couch. Отправка заголовка HTTP-заголовка Authorization проще, так как класс Couch использует класс httplib.HTTPConnection. Вы можете добавить такой заголовок рядом с Accept один таким образом:

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

То же самое для других методов запроса HTTP.

Документация по базовой аутентификации здесь:

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

+0

Документация по функциям безопасности CouchDB: http://wiki.apache.org/couchdb/Security_Features_Overview – fviktor

+0

спасибо за подробный ответ fviktor. – idiotype

6

Вы также можете сделать:

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

, после чего все ваши запросы должны работать.

+4

Не похоже, что свойство .http в ресурсе, но есть couch.resource.credentials. Поэтому я сделал couch.resource.credentials = (SERVER_USER, SERVER_PASSWD), который работает для меня. – David

0

Существует несколько патчей для python-couchdb, которые позволяют аутентификацию. Код, вероятно, будет включен в версию 0.7, но до тех пор вы можете использовать fork в http://github.com/mdornseif/couchdb-python - он позволяет использовать URL-адреса http://user:[email protected]:5984/.

http://blogs.23.nu/c0re/2009/12/running-a-couchdb-cluster-on-amazon-ec2/ (внизу) показывает, как использовать пароли CouchDB.

3

Просто передать его в качестве части URI ... питон-CouchDB разбирает пользователя/пасс и использовать их:

http://user:[email protected]:5984

+0

Это верно для python-couchdb 0,7 и выше, поэтому убедитесь, что вы в курсе последних событий. – Redbeard

19

Чтобы concour ответ Давида, (т.е. «Это, как я сделать это с помощью модуля CouchDB 0.8 в Python 2.6 с CouchDB 1.0.2")

кушетки = couchdb.Server (couch_server)

couch.resource.credentials = (USERNAME, PASSWORD)

+0

работал для меня в подобной ситуации ... однажды я вспомнил, что поставил свое имя пользователя и пароль в кавычки! Это подразумевается в ответе лисдексии здесь, но я упоминаю это здесь, на случай, если кто-то еще отсутствует, что в конце долгого дня. Если, конечно, вы не определили их в другом месте и просто используете здесь имена переменных. – rossdavidh

+0

Я использую тот же метод, и он работает нормально все время. –

+0

@rossdavidh делает хороший момент. – lysdexia

1

Выше все хорошо; но я обнаружил, что для OAuth методов проверки по сравнению с базовой аутентификацией, это работает очень хорошо:

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

Примечание: Это не будет работать с базовой аутентификацией; в таком случае у fviktor есть то, что я считаю лучшим ответом. Вы также можете изучить справочный материал по безопасности, с которым он связан, если вас интересуют постоянные сеансы аутентификации.

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