docker-compose文件
version: "2"
services:
mongo:
image: mongo:3.2.4
container_name: mongo
#command: mongod --auth
mem_limit: 1g
restart: always
ports:
- "37017:27017/tcp"
volumes:
- /etc/localtime:/etc/localtime
- $PWD/data/db:/data/db
mongo不开启验证权限启动
- 检查docker-compose.yml文件 如果有command: mongod --auth 这一行,注释掉;如没有或者已注释,跳转步骤2)
- 重启mongo
docker-compose up -d mongo
添加用户(需要为每个数据库添加用户)
- 进入mongo的docker容器,命令:
docker exec -it mongo bash
- 进入mongo,命令:
mongo
首先在admin数据库里创建一个root用户
use admin
db.createUser({user:"root",pwd:"xxxx",roles:["root"]})
再为其他每个数据库添加同样的用户
有多少个数据库,就要创建多少个用户,因为一但开启权限验证,没有创建用户的数据库,将无法验证链接
查询mongo所有数据库名称show dbs
use other_db
db.createUser({user:"root",pwd:"xxxx",roles:["readWrite"]})
db.createUser({user:"root",pwd:"xxxx",roles:[{role:"readWrite",db:"other_db"}]})
每个数据库均可创建不同的用户名和密码,但是为了方便统一管理,一般都是创建为相同的,如果有为了安全性的考虑,可以创建不同的用户密码,role 表示当前用户,在此数据库拥有的权限
创建成功后的输出
没有开启验证之前,可以*创建数据库,一般如果指定的数据库不存在,会自动创建
开启验证之后,需要手动创建数据库,然后代码链接指定的数据库和账号密码进行数据操作db.createUser({user: "AUser",pwd: "123456",roles: [{role: "readWrite",db: "account"}]})
创建 account 数据库,用户: AUser 密码: 123456use account
db.auth("AUser","123456")
随便插入一条数据db.user.insert({"loginname":"zhangsan","age":"25"})
> show dbs
account 0.000GB
admin 0.000GB
local 0.000GB
那么就可以再代码里通过授权验证链接account数据库了
删除数据库
进入需要删除的数据库,执行删除命令use account
db.dropDatabase()
创建完成后,执行以下命令检查是否创建成功
use admin
db.system.users.find()
正常情况下应返回创建用户信息的结果
如添加了错误的用户,可以通过以下命令移除
db.system.users.remove({user:"AUser"})
或者删除指定数据库下面的用户<鉴于多个数据库相同用户的情况下>use account
db.dropUser("AUser")
开启权限重启mongo
修改docker-compose.yml文件,去掉刚才command: mongod --auth 的注释
重启mongo
docker-compose up -d
启动后登入docker,检查
docker exec -it mongo bash
mongo
use account
db.auth("ttx","ttx2011")
返回1则表示成功