我已开始使用 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')