![MongoDB 超级管理员身份验证正常,但仍然收到未经授权的查询错误?](https://linux22.com/image/841113/MongoDB%20%E8%B6%85%E7%BA%A7%E7%AE%A1%E7%90%86%E5%91%98%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E6%AD%A3%E5%B8%B8%EF%BC%8C%E4%BD%86%E4%BB%8D%E7%84%B6%E6%94%B6%E5%88%B0%E6%9C%AA%E7%BB%8F%E6%8E%88%E6%9D%83%E7%9A%84%E6%9F%A5%E8%AF%A2%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我已开始使用 MongoDB 进行身份验证。根据文档,我使用 localhost 异常创建了一个管理员用户,其角色为用户管理员任何数据库一切顺利。当我运行“mongo”客户端并授权行政之后的数据库使用我从数据库中获取了号码1表示授权成功。但是,我尝试执行的任何命令都会导致“未授权”错误,甚至尝试显示我刚刚授权的管理数据库中的集合也是如此。
有人能告诉我这是为什么吗?我该如何修复它?目前,我在没有身份验证的情况下运行,直到我能够修复此问题。
答案1
角色userAdminAnyDatabase
(以及userAdmin
它所扩展的角色)仅授予用户读取和写入system.users
集合的权限,以管理数据库的用户。它不允许用户读取或写入数据库的实际集合。为此,您需要授予read
或readWrite
角色。
答案2
尝试运行以下步骤来解决身份验证问题:
- 启动 mongod 而不启用身份验证并运行:
- 创建数据库
- 创建具有角色的用户
- 使用一个文档创建一个虚拟集合
- 停止/杀死 mongod
- 启动 mongod 并启用身份验证
- 切换到步骤 1 中创建的数据库
- 使用步骤 3 中创建的用户在数据库中进行身份验证
示例命令:
mongod --port 27017 --dbpath /data/db1
use educationDb;
db.createUser({ user : 'readonly', pwd: 'readonly', roles : ['read']})
db.xyz.insert({"name":"nix.education"})
- 停止/杀死 mongod
mongod --auth --port 27017 --dbpath /data/db1
use educationDb;
db.auth('readonly','readonly')