我正在使用mongodb 2.6.1,Windows 7 64位
我在没有--auth
的情况下启动了 mongod 并使用
db.createUser({
user: "root",
pwd: "xxx",
roles:
[{
role: "userAdminAnyDatabase",
db: "admin"
}]
})
我使用此配置重新启动 mongod
systemLog:
destination: "file"
path: "c:\\mongodb\\log\\mongo.log"
quiet: true
logAppend: true
storage:
dbPath: "c:\\mongodb\\data\\db"
directoryPerDB: true
smallFiles: true
journal:
enabled: true
net:
bindIp: 127.0.0.1
port: 27017
http:
enabled: true
JSONPEnabled: true
RESTInterfaceEnabled: true
security:
authorization: enabled
没有错误,因此已启用身份验证。
我使用mongo -u root -p --authenticationDatabase admin
启动了 mongo 但我收到的错误信息如下所示。
MongoDB shell version: 2.6.1
Enter password:
connecting to: test
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
我尝试使用show collections
,但我收到的错误信息如下所示。
2014-05-20T00:36:07.801+0700 error: {
"$err" : "not authorized for query on admin.system.namespaces",
"code" : 13
} at src/mongo/shell/query.js:131
但是当我尝试db.system.users.find()
时,我可以在集合中显示用户,而不会显示任何错误消息。
我也尝试了db.auth("root","xxx")
但是我得到了相同的结果,我可以显示用户但我无法列出可用的集合。
我有两个以上从旧版本导入的数据库,没有--auth
这些数据库工作正常,但启用了身份验证启动 mongod ,我无法在这些数据库中显示任何内容。
请帮忙解决问题。
答案 0 :(得分:2)
就我而言,用户名:root是使用adminAnyDatabase
创建的,它实际上没有查找操作等权限。
因此我希望 root 成为顶级用户,因此 root 应该使用 root 角色授予超级用户。
use admin
db.grantRolesToUser(
"root",
[
{ role: "root", db: "admin" }
]
)
同样应撤销adminAnyDatabase
use admin
db.revokeRolesFromUser(
"root",
[
{ role: "adminAnyDatabase", db: "admin" }
]
)