如标题中所述,我正在使用django-mongodb-engine
,我正在尝试配置本机Django身份验证框架。我在线阅读了一些评论,它应该开箱即用,没有一些功能。但是,我找不到任何教程,而且,我在尝试自己设置时遇到错误。我遇到的问题肯定与数据库权限有关。我已根据Django docs添加了Django中间件和应用程序。但是,当我发出syncdb
命令时,它会失败并显示错误。
$ python manage.py syncdb
OperationFailure: database error: not authorized for query on MyDB.system.namespaces
settings.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" ] }
我不确定我可以授予此人的其他权限,以及/或我需要创建此用户的其他位置。
有什么想法吗?
答案 0 :(得分:0)
玩完之后,这是解决方案。您必须使用本机mongo admin
数据库。因此,所需的变化:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django_mongodb_engine',
'NAME': 'admin',
'USER': 'mySuperUser',
'PASSWORD': 'mypass',
'HOST': 'XXX.XXX.XXX.XXX',
'PORT': '',
},
# some other DBs
}
用户mySuperUser
必须自然存在于admin
数据库中。为了安全地进行身份验证操作(例如添加和删除用户),我在mongo中赋予了userAdminAnyDatabase
权限。权限可能过多,但我必须使用它来确定所需权限的适当范围。以下是权限:
// mongo
admin> db.system.users.find()
{ "_id" : ObjectId("..."), "pwd" : "...", "roles" : [ "readWriteAnyDatabase", "dbAdminAnyDatabase", "clusterAdmin", "userAdminAnyDatabase" ], "user" : "mySuperUser" }
接下来,我们最终可以运行syncdb
命令:
$ python manage.py syncdb
Creating tables ...
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'someUser'):
Email address: someUser@user.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installing indices for admin.LogEntry model.
Installing indices for auth.Group_permissions model.
Installing indices for auth.Group model.
Installing indices for auth.User_groups model.
Installing indices for auth.User_user_permissions model.
Installing indices for auth.User model.
Installing indices for sessions.Session model.
Installed 0 object(s) from 0 fixture(s)
$
答案 1 :(得分:0)
我的问题是我没有在settings.py中指定SITE_ID。我这样做了:
./manage.py shell
>>>from django.contrib.sites.models import Site
>>>Site().save()
>>>Site.objects.all()[0].id
u'5391dbc22ebd1212246d50c4'
如果你不是'django.contrib.sites'那么我不确定为什么这会是一个问题。除非您一直在使用该模块并已将集合/表安装到数据库中。在任何一种情况下,这都是我让MongoDB重新开始正常工作的方式。
答案 2 :(得分:-1)
我遇到了同样的问题。我的Mongo数据库是在MongoLab上托管的,我找不到任何解决方案来解决这个错误。虽然我的用户已存在于我的数据库中,但我不想使用admin
数据库。其他人遇到了同样的问题或找到了解决方案?