启用身份验证后无法访问数据库

时间:2014-05-19 17:44:24

标签: mongodb authentication

我正在使用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 ,我无法在这些数据库中显示任何内容。

请帮忙解决问题。

1 个答案:

答案 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" }
    ]
)