我正在运行 Mongo 2.2.0,分片和复制,并且使用 python (pymongo 2.1.1) 有一些奇怪的行为。
注意事项:
在我尝试访问的每个数据库上都创建了具有正确权限的用户。
以下是通过 mongo 路由器连接的。
MONGO_URI 是在部署早期设置的环境变量: $MONGO_URI = "mongodb://USER:PASSWORD@localhost: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
我是否以错误的方式调用某些东西,或者在某处可能存在 auth 和安全的错误?我倾向于首先相信自己的错误,但如果我在插入语句中保持安全,我会得到正确的行为。
我研究了这些主题:
Pymongo 在尝试访问远程服务器时给出 db 断言失败 Pymongo 安全插入的权限问题 OperationFailure:在 MongoEngine/PyMongo 中进行线程处理时出现数据库错误
...但我还没有找到不需要我停用身份验证的答案。
编辑:我还在 googlegroup 上发布并得到了答案,这是 pymongo 中的一个错误。我升级到 2.3,一切正常。
https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/UlbW4942xsw