docker安装mongodb
发布时间 :
1、认识MongDB权限
MongoDB安装完成后,默认是没有权限验证的,默认是不需要输入用户名密码即可登录的,但是往往数据库方面我们会出于安全性的考虑而设置用户名密码。
- user 字段,为新用户的名字;
- pwd 字段,用户的密码;
- cusomData 字段,为任意内容,例如可以为用户全名介绍;
- 超级用户的 role 有两种,userAdmin 或者 userAdminAnyDatabase (比前一种多加了对所有数据库的访问,仅仅是访问而已)。
- db 是指定数据库的名字,admin 是管理数据库。
- 不能用 admin 数据库中的用户登录其他数据库。注:只能查看当前数据库中的用户,哪怕当前数据库 admin 数据库,也只能查看 admin 数据库中创建的用户。
- roles 字段,指定用户的角色,可以用一个空数组给新用户设定空角色。在 roles 字段,可以指定内置角色和用户定义的角色。
role可选值:
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
- 内部角色:__system,间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
在MongDB中内置了一些用户角色roles,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:
| role具体角色 |
权限说明 |
|
| read |
允许用户读取指定数据库 |
数据库用户角色(Database User Roles) |
| readWrite |
允许用户读写指定数据库 |
数据库用户角色(Database User Roles) |
| dbAdmin |
允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
数据库管理角色(Database Admininstration Roles) |
| userAdmin |
允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 |
数据库管理角色(Database Admininstration Roles) |
| clusterAdmin |
只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 |
数据库管理角色(Database Admininstration Roles) |
| readAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的读权限 |
跨库角色(All-Database Roles) |
| readWriteAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的读写权限 |
跨库角色(All-Database Roles) |
| userAdminAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
跨库角色(All-Database Roles) |
| dbAdminAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 |
跨库角色(All-Database Roles) |
| root |
只在admin数据库中可用。超级账号,超级权限。 |
超级角色(super master Roles) |
| backup |
|
备份和还原角色(Backup and Restoration Roles) |
| restore |
|
备份和还原角色(Backup and Restoration Roles) |
| clusterAdmin |
授权管理集群的最高权限,只在admin中可用 |
集群管理角色(Cluster Administration Roles) |
| clusterManager |
授权管理和监控集群的权限 |
集群管理角色(Cluster Administration Roles) |
| clusterMonoitor |
授权监控集群的权限,对监控工具具有readonly的权限 |
集群管理角色(Cluster Administration Roles) |
| hostManager |
管理server |
集群管理角色(Cluster Administration Roles) |
mongodb是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。添加账号需要使用 use admin 切换到admin数据库,在admin数据库添加的账号才是管理员账号。
在MongDB中,用户只能在用户所在数据库登录,包括管理员账号。mongo的用户是以数据库为单位来建立的,每个数据库有自己的管理员。管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
注:帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证
2、创建账号
2.1、创建管理用户
此时添加的用户都只用于 admin 数据库,而非你存储业务数据的数据库
1 2 3 4 5 6 7 8
| show dbs
use admin
show users
|
创建用户
- user : 用户名
- pwd : 密码
- roles : 角色
- db : 数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| db.createUser( { user: "root", pwd: "lyou", roles: [ { role: "root", db: "admin"} ] })
mongo admin -u root -p 'lyou'
use admin db.auth("root","lyou")
|
创建一个不受访问限制的超级用户
root 角色:不仅可以授权、也可对集合进行任何操作,但不建议直接使用
1 2 3 4 5 6 7
| db.createUser( { user:"root", pwd:"pwd", roles:["root"] } )
|
创建一个业务数据库管理员用户
1 2 3 4 5 6 7 8
| db.createUser({ user:"user001", pwd:"123456", roles:[ {role:"readWrite",db:"game_db"}, 'read' // 对其他数据库有只读权限,对game_db是读写权限 ] })
|
2.2、创建普通账号
创建普通数据库, 先切到admin数据库,然后db.auth(“用户”,“密码”) 登录
1 2 3 4 5 6
| mongo admin -u root -p 'lyou' mongo admin -u admin -p 'UhrM0wE51ZohI2*I' use admin
use admin db.auth("root","lyou")
|
通过 use 创建数据库 game_db,如果已经有该数据就会进行切换。如果数据库没有数据执行 show dbs 数据库不会被显示
在 game_db 数据库中 ,创建用户 ,可以通过 db 命令查看当前是哪个数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| db.createUser( { user: 'game',pwd: 'lyou', roles: [ {role: 'dbOwner',db: 'game_db'}, {role: 'userAdmin',db: 'game_db'}, {role: 'dbAdmin',db: 'game_db'}, {role: 'readWrite',db: 'game_db'} ] }) show users
db.createUser( { user: 'slot',pwd: 'lyou', roles: [ {role: 'dbOwner',db: 'LogDB_DWC'}, {role: 'userAdmin',db: 'game_db'}, {role: 'dbAdmin',db: 'game_db'}, {role: 'readWrite',db: 'game_db'} ] })
|
登录game_db数据库
1 2
| use game_db db.auth("game","lyou")
|
2.3、修改用户
2.3.1、修改用户权限
先进入数据库,然后使用db.updateuser修改 , 比如下面就给testuser用户新增了角色
1 2 3 4 5 6 7 8 9
| use admin db.updateUser( "root", { roles : [ { role:"dbAdmin", db:"game_db"}, { role:"readWrite", db:"admin"} ] })
|
2.3.2、修改用户密码
1 2
| use admin db.updateUser("root",{"pwd":"123456"})`
|
或者使用下面命令
1
| db.changeUserPassword("root","123456")`
|
2.4、删除用户
删除用户需要切换到对应的数据库,然后使用db.dropUser进行删除,需要具备:userAdmin ,userAdminAnyDatabase或者root权限才可以删除用户。
1 2 3 4 5 6 7
| use admin db.auth("root","lyou") use test db.dropUser("game")
db.system.users.remove({user:"root"})
|
3、先创建mongod.conf 或者 通过以下方式 拷贝mongod.conf,再执行安装脚本
3.1、通过创建容器拷贝出来
1 2 3 4
| docker run --name mongo-3.4.24 --hostname docker-mongo-3.4.24 -p 27017:27017 -d mongo:3.4.24
docker cp mongo-3.4.24:/etc/mongod.conf.orig /docker-data/mongo-3.4.24/config/mongod.conf
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
storage: dbPath: /data/db journal: enabled: true
systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log
net: port: 27017 bindIp: 0.0.0.0
security: authorization: enabled
|
3.2、运行以下命令创建容器
1 2 3 4 5 6 7 8 9 10
| docker run \ --name mongo-3.4.24 \ --hostname docker-mongo \ --net='mynet' \ --restart=unless-stopped \ -e TZ="Asia/Shanghai" \ -p 27017:27017 \ -v '/docker-data/mongo-3.4.24/data':'/data/db':'rw' \ -v '/docker-data/mongo-3.4.24/config':'/data/configdb':'rw' \ -d mongo:3.4.24 mongod -f /data/configdb/mongod.conf
|
3.3、安装完成后配置信息
1 2 3 4 5 6
| docker exec -it mongo-3.4.24 bash
mongo
|
3.4、再修改mongod.conf,后再重启容器,此时远程登录需要校验密码
1 2 3 4 5
| docker stop mongo-3.4.24
security: authorization: enabled
|
转载请注明来源,欢迎指出任何有错误或不够清晰的表达。可以邮件至 xiyugee@qq.com