Python django mongodb引擎和django的本机身份验证系统
正如标题中所述,我正在使用django mongodb引擎,并试图配置本机django身份验证框架。我在网上读到一些评论,认为它应该是开箱即用的,没有一些功能。然而,我找不到任何教程,而且,我在尝试自己设置时出错。我遇到的问题肯定与数据库权限有关。我已经包括了Django中间件和应用程序。但是,当我发出syncdb命令时,它会失败并出现错误Python django mongodb引擎和django的本机身份验证系统,python,django,mongodb,django-authentication,django-mongodb-engine,Python,Django,Mongodb,Django Authentication,Django Mongodb Engine,正如标题中所述,我正在使用django mongodb引擎,并试图配置本机django身份验证框架。我在网上读到一些评论,认为它应该是开箱即用的,没有一些功能。然而,我找不到任何教程,而且,我在尝试自己设置时出错。我遇到的问题肯定与数据库权限有关。我已经包括了Django中间件和应用程序。但是,当我发出syncdb命令时,它会失败并出现错误 $ python manage.py syncdb OperationFailure: database error: not authorized for
$ python manage.py syncdb
OperationFailure: database error: not authorized for query on MyDB.system.namespaces
设置.py
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'MyDB',
'USER': 'mySuperUser',
'PASSWORD': 'mypass',
'HOST': 'XXX.XXX.XXX.XXX',
'PORT': '',
},
# some other DBs
}
Mongo用户权限
myDB> db.system.users.find()
{ "_id" : ObjectId("..."), "user" : "mySuperUser", "pwd" : "...", "roles" : [ "readWriteAnyDatabase", "userAdminAnyDatabase", "dbAdminAnyDatabase", "clusterAdmin" ] }
我不确定我可以授予这个家伙什么其他权限,和/或我需要在哪里创建这个用户
有什么想法吗?玩过之后,这里是解决方案。您必须使用本机mongo管理数据库。因此,所需的更改:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'admin',
'USER': 'mySuperUser',
'PASSWORD': 'mypass',
'HOST': 'XXX.XXX.XXX.XXX',
'PORT': '',
},
# some other DBs
}
用户mySuperUser必须自然存在于管理数据库中。为了确保身份验证操作(如添加和删除用户)的安全,我在mongo中为其授予了userAdminAnyDatabase权限。权限可能过多,但我必须使用它来确定所需权限的适当范围。以下是权限:
// mongo
admin> db.system.users.find()
{ "_id" : ObjectId("..."), "pwd" : "...", "roles" : [ "readWriteAnyDatabase", "dbAdminAnyDatabase", "clusterAdmin", "userAdminAnyDatabase" ], "user" : "mySuperUser" }
接下来,我们最终可以运行syncdb命令:
我遇到了同样的问题。我的Mongo DB托管在MongoLab上,我没有找到任何解决方案来解决此错误。虽然我的数据库中已经存在我的用户,但我不想使用管理数据库。其他人遇到了相同的问题或找到了解决方案?我的问题是我没有在我的settings.py中指定站点ID。我这样做:
./manage.py shell
>>>from django.contrib.sites.models import Site
>>>Site().save()
>>>Site.objects.all()[0].id
u'5391dbc22ebd1212246d50c4'
如果您不是“django.contrib.sites”,那么我不确定这会是一个问题。除非您一直在使用该模块并且已经将集合/表安装到数据库中。在这两种情况下,我都是这样让MongoDB重新开始正常工作的
./manage.py shell
>>>from django.contrib.sites.models import Site
>>>Site().save()
>>>Site.objects.all()[0].id
u'5391dbc22ebd1212246d50c4'