MongoDB 超级管理员身份验证正常,但仍然收到未经授权的查询错误?

MongoDB 超级管理员身份验证正常,但仍然收到未经授权的查询错误?

我已开始使用 MongoDB 进行身份验证。根据文档,我使用 localhost 异常创建了一个管理员用户,其角色为用户管理员任何数据库一切顺利。当我运行“mongo”客户端并授权行政之后的数据库使用我从数据库中获取了号码1表示授权成功。但是,我尝试执行的任何命令都会导致“未授权”错误,甚至尝试显示我刚刚授权的管理数据库中的集合也是如此。

有人能告诉我这是为什么吗?我该如何修复它?目前,我在没有身份验证的情况下运行,直到我能够修复此问题。

答案1

角色userAdminAnyDatabase(以及userAdmin它所扩展的角色)仅授予用户读取和写入system.users集合的权限,以管理数据库的用户。它不允许用户读取或写入数据库的实际集合。为此,您需要授予readreadWrite角色。

MongoDB 中的用户权限角色向数据库添加用户

答案2

尝试运行以下步骤来解决身份验证问题:

  1. 启动 mongod 而不启用身份验证并运行:
  2. 创建数据库
  3. 创建具有角色的用户
  4. 使用一个文档创建一个虚拟集合
  5. 停止/杀死 mongod
  6. 启动 mongod 并启用身份验证
  7. 切换到步骤 1 中创建的数据库
  8. 使用步骤 3 中创建的用户在数据库中进行身份验证

示例命令:

  1. mongod --port 27017 --dbpath /data/db1
  2. use educationDb;
  3. db.createUser({ user : 'readonly', pwd: 'readonly', roles : ['read']})
  4. db.xyz.insert({"name":"nix.education"})
  5. 停止/杀死 mongod
  6. mongod --auth --port 27017 --dbpath /data/db1
  7. use educationDb;
  8. db.auth('readonly','readonly')

相关内容