Python 带有pymongo安全插入的Mongo身份验证

Python 带有pymongo安全插入的Mongo身份验证,python,mongodb,pymongo,Python,Mongodb,Pymongo,我正在运行Mongo2.2.0,分片和复制,并且我在使用python(pymongo 2.1.1)时有一些奇怪的行为 注意事项: 已在我尝试访问的每个数据库上创建了具有正确权限的用户 以下是通过mongo路由器进行连接 MONGO_URI是部署早期设置的一个环境变量:$MONGO_URI=”mongodb://USER:PASSWORD@本地主机:27017/DB“ 通过mongo shell,我可以很好地进行身份验证、读写,还可以启动python会话,以下工作也可以很好地完成: >

我正在运行Mongo2.2.0,分片和复制,并且我在使用python(pymongo 2.1.1)时有一些奇怪的行为

注意事项:

已在我尝试访问的每个数据库上创建了具有正确权限的用户

以下是通过mongo路由器进行连接

MONGO_URI是部署早期设置的一个环境变量:$MONGO_URI=”mongodb://USER:PASSWORD@本地主机:27017/DB“

通过mongo shell,我可以很好地进行身份验证、读写,还可以启动python会话,以下工作也可以很好地完成:

    >>> import pymongo
    >>> import os
    >>> c = pymongo.Connection(os.environ['MONGODB_URI'])
    >>> c.DB.COLL.insert(dict(a=2))
    >>> list(c.DB.COLL.find())
但当我在插入时使用safe=True时:

    >>> import pymongo
    >>> import os
    >>> c = pymongo.Connection(os.environ['MONGODB_URI'])
    >>> c.DB.COLL.insert(dict(a=2), safe=True)
我得到这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "local/lib/python2.7/site-packages/pymongo/collection.py", line 312, in insert
    continue_on_error, self.__uuid_subtype), safe)
  File "local/lib/python2.7/site-packages/pymongo/connection.py", line 822, in    _send_message
    return self.__check_response_to_last_error(response)
  File "local/lib/python2.7/site-packages/pymongo/connection.py", line 759, in __check_response_to_last_error
    helpers._check_command_response(error, self.disconnect)
  File "local/lib/python2.7/site-packages/pymongo/helpers.py", line 128, in _check_command_response
    raise OperationFailure(msg % response["errmsg"])
pymongo.errors.OperationFailure: unauthorized
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“local/lib/python2.7/site packages/pymongo/collection.py”,第312行,插入
继续(错误,自我。子类型,安全)
文件“local/lib/python2.7/site packages/pymongo/connection.py”,第822行,在“发送”消息中
返回self.\u检查\u响应\u到上次错误(响应)
文件“local/lib/python2.7/site packages/pymongo/connection.py”,第759行,在“check\u response\u to\u last\u error”中
助手.\u检查\u命令\u响应(错误,自我断开)
文件“local/lib/python2.7/site packages/pymongo/helpers.py”,第128行,在命令响应中
引发操作失败(消息%response[“errmsg”])
pymongo.errors.OperationFailure:未经授权
我是不是打错电话了,或者在某个地方auth和safe出现了错误?我倾向于首先相信我自己的错误,但如果我在insert语句中不使用safe,我会得到正确的行为

我研究了以下主题:

…但我还没有找到一个不需要我停用auth的答案

编辑: 我也在谷歌上发布了我的答案,那是pymongo的一个bug。我升级到了2.3,一切正常


getLastError调用可能没有使用适当的权限发送。mongod的日志说了些什么?我跟踪了主节点日志并运行了命令,观察了一些情况。似乎没有反应日志,只是定期的事件,如:Thu Oct 18 18:19:10[conn5627]end connection 10.29.191.31:46937(34个连接现在打开)Thu Oct 18:19:10[initandlisten]connection从10.29.191.31:46939接受#5629(35个连接现在打开)Thu Oct 18 18:19:10[conn5629]authenticate db:local{authenticate:1,nonce:“f47f68d0c4ab0b3f”,user:“uu system”,key:“85007f6a39f3f6fc8fe8db1b21648d99”}我无法重现错误-如果在执行插入之前在数据库上运行会发生什么情况?