我已经使用MongoDB Image设置了一个docker。默认情况下,它没有设置密码。我创建了一个用户并为其分配了角色,这非常有效。但问题是,无需身份验证即可实现连接。
使用身份验证连接>正确的用户名,正确的密码 - > CONNECTED
使用身份验证连接>正确的用户名,错误的密码 - >连接失败
无身份验证的连接> CONNECTED
我希望第3点停止工作。
答案 0 :(得分:4)
步骤: -
1)运行没有身份验证的docker实例
$ docker run --name container-name -d -p 27017:27017 -v ~/mongodb:/data/db mongo
2)创建具有管理员角色的主管理员用户
$ mongo --port 27017 $ use admin; $ db.createUser({user: "adminUserName",pwd: "adminPassword",roles: [{ role: "userAdminAnyDatabase", db: "admin" }})
这将在admin数据库中创建一个具有角色" userAdminAnyDatabase"的用户。这就像超级用户。
3)为特定数据库创建用户
$ use $ db.createUser({user: "dev-read-username",pwd: "dev-read-password",roles:["read"]}) -- User with "read" role $ db.createUser({user: "dev-write-username",pwd: "dev-write-password",roles:["readWrite"]}) -- User with "readWrite" role
有关可用角色列表或如何创建自定义角色,请查看https://docs.mongodb.com/manual/reference/built-in-roles/
4)删除泊坞容器
$ docker ps -a $ docker stop container_id $ docker rm container_id
5)运行启用了身份验证的docker实例
$ docker run --name container-name -d -p 27017:27017 -v ~/mongodb:/data/db mongo --auth
我假设你可能没有启用--auth启动docker容器。一旦开始启用--auth,那么没有凭据就无法连接。
答案 1 :(得分:1)
使用身份验证选项运行以添加授权docker run --name some-mongo -d mongo --auth
您应创建管理员用户。您可以使用db.getSiblingDB('admin').system.users.find()
检查管理员用户是否存在,或者创建一个,例如:db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [{ role: "userAdminAnyDatabase", db: "admin" } ] });
答案 2 :(得分:0)