【问题标题】:couchDB , python and authentication沙发数据库、python和身份验证
【发布时间】:2009-11-21 19:15:40
【问题描述】:

我已经安装了 couchDB v 0.10.0,并试图通过从 couchDB wiki 下载的 Couch 类中的 python 与其交谈。问题是:

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

我手动编辑了 local.ini 文件以包含我的标准 osx 登录名和密码。我现在可以通过蒲团完全访问,但没有快乐 WRT python。这是http标头问题吗?

不知所措-谢谢!

【问题讨论】:

  • 你使用的是哪个python库? python wiki页面上列出了几个(wiki.apache.org/couchdb/Getting_started_with_Python
  • 谢谢 andyuk - 我正在使用 wiki 页面上的示例代码,因为它最简单。我还试图找到关于禁用身份验证(本地)的 couchDB 文档

标签: python couchdb


【解决方案1】:

同意大卫的回复,(即“这就是我在 python 2.6 中使用模块 CouchDB 0.8 和 couchdb 1.0.2 的方式”)

couch = couchdb.Server(couch_server)

couch.resource.credentials = (USERNAME, PASSWORD)

【讨论】:

  • 在类似的情况下为我工作......一旦我记得将我的用户名和密码放在引号中!这在 lysdexia 的回答中有所暗示,但我在这里提到它,以防万一其他人在漫长的一天结束时错过了这一点。当然,除非您实际上已经在其他地方定义了它们并且只是在此处使用变量名。
  • 只是想确认我能够在库版本 1.0 上使用它,在 debian wheezy 上针对 CouchDB 1.6.1 运行,其中管理员密码在 [admins] 下的 local.ini 中设置。我认为它也适用于普通用户。
【解决方案2】:

你也可以这样做:

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

之后您的所有请求都应该有效。

【讨论】:

  • 似乎不是资源中的 .http 属性,但有 couch.resource.credentials。所以我做了 couch.resource.credentials = (SERVER_USER, SERVER_PASSWD) 这对我有用。
【解决方案3】:

示例中的Couch 类没有将任何身份验证信息传递给数据库,因此它不允许特权操作并不奇怪。所以你唯一的选择是:

  • 完全禁用身份验证(如您所述)
  • 将用户名和密码作为 URI 的一部分传递
  • 将用户名和密码作为Authorization HTTP 请求标头传递

如果要传递用户名和密码,则需要更改 Couch 类。发送 Authorization HTTP 请求标头更容易,因为 Couch 类使用 httplib.HTTPConnection 类。您可以通过这种方式在Accept 旁边添加这样的标题:

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

其他 HTTP 请求方法相同。

基本认证的文档在这里:

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

【讨论】:

【解决方案4】:

只需将它作为 URI 的一部分传递...python-couchdb 将解析用户/传递并使用它们:

http://user:pass@localhost:5984

【讨论】:

  • 这适用于 python-couchdb 0.7 及更高版本,因此请确保您是最新的。
【解决方案5】:

以上都不错;但我发现对于 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 有我认为最好的答案。如果您对持久身份验证会话感兴趣,您还可以查看他链接到的安全参考资料。

【讨论】:

    【解决方案6】:

    python-couchdb 有几个补丁可以启用身份验证。该代码可能会包含在 0.7 版中,但在此之前,您可以在 http://github.com/mdornseif/couchdb-python 使用 usr 分叉 - 它允许您使用 http://user:pass@127.0.0.1:5984/ 类型的 URL。

    http://blogs.23.nu/c0re/2009/12/running-a-couchdb-cluster-on-amazon-ec2/(在底部)展示了如何使用 CouchDB 密码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 2018-08-21
      • 2020-05-10
      相关资源
      最近更新 更多