mongodb auth,用户可以插入mongo而不是mongoengine

时间:2015-01-05 18:05:52

标签: mongodb python-2.7 mongoengine

我实际上是在尝试使用mongoengine和python管理多数据库连接。 因此,对于测试我已经安装了一个远程mongo服务器并且在本地。

测试期间使用的

版本:

  • python2.7
  • mongodb 2.4.9(遥控)
  • mongoengine(分公司大师)
  • pymongo 2.7.2(我认为是mongoengine使用)

我使用以下命令在远程mongo上设置了一个用户:

remote $ mongo admin -u admin -p *** --port 7766 
> use test
> db.addUser({user:"toto", pwd:"***", roles:["userAdminAnyDatabase", "readWrite"]})

我在想我在我正在使用的db上给予Read和Write(为了测试目的,我之前做了use test,但我也用userAdminAnyDatabase给了很多权利不是吗? )

然后在mongo我试图插入然后选择,检查一切是否良好:

> db.test.insert({test:"toto"})
> db.test.find()
{ "_id" : ObjectId("54aace23659e51853a6bb3e4"), "test" : "toto" }

到目前为止一切似乎都很好,现在我使用mongoengine进入我的python脚本, 我正在尝试连接到我的数据库并在每个数据库中保存一些东西

from mongoengine import *
import mongoengine.connection

class Test(Document):
  email = StringField(required=True)

class ConnectionTest(unittest.TestCase):
  def test_double_connect(self):
    c2 = connect("test", "remote", host="mongodb://******/", \
      port=7766, username="toto", password="test")
    a2 = Test()
    a2.email = "remote@remo.te"
    a2._meta['db_alias']="remote"
    a2.save()

    c = connect("test", "local", host="mongodb://localhost/")
    a1 = Test()
    a1.email = "TOTO_TEST_LOCAL@local.host"
    a1._meta['db_alias']="local"
    a1.save()
    print c2.__dict__
    print c.__dict__

如果我没有错,它应该有效,但我从mongoengine得到一个例外,说我无法在test.test中插入:

Error
Traceback (most recent call last):
  File "/Users/lumy-meludia/Meludia/depends/mongoengine/tests/test_connection.py", line 33, in test_double_connect
    a2.save()
  File "/Users/lumy-meludia/Meludia/depends/mongoengine/mongoengine/document.py", line 354, in save
    raise OperationError(message % unicode(err))
OperationError: Could not save document (not authorized for insert on test.test)

我的问题是,为什么这不起作用,但在mongo翻译中运作良好?

编辑:   重读文档后,有些问题与azure和LC_ALL = C有关   我发现故障在哪里,连接现在正在工作。

如果你想与mongoengine进行不同的mongodb交互,你似乎需要定义一个新类。

0 个答案:

没有答案