• 1.从docker官方拉取mongo镜像,我这里直接拉取的最新版本
GaryMBP:~ Gary$ docker pull mongo

如下说明拉取成功

GaryMBP:~ Gary$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mongo               latest              394204d45d87        13 days ago         410MB
  • 2.docker启动mongo
GaryMBP:~ Gary$ docker run --name mongo -p 27017:27017 -v /docker/mongo:/data/db -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root -d mongo

--name:指定容器名称

-p:宿主机端口与容器端口映射(宿主机端口:容器端口)

-v:宿主机目录与容器目录映射(宿主机目录:容器目录)

-e:启动参数

-d:后台启动

mongo:镜像名称(默认为latest标签)

  • 3.查看启动状态
GaryMBP:~ Gary$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
acfcd67fe611        mongo               "docker-entrypoint.s…"   8 days ago          Up 43 hours         0.0.0.0:27017->27017/tcp            mongo
  • 4.停止/启动容器
GaryMBP:~ Gary$ docker stop/start mongo
  • 5.进入容器
GaryMBP:~ Gary$ docker exec -it mongo /bin/bash
  • 6.登陆mongo创建用户并授权
root@acfcd67fe611:/# mongo

MongoDB中角色说明

分类role(角色)简要说明
数据库用户角色(DB User Roles)read readWrite为某个数据库创建一个用户, 分配该数据库的读写权力
数据库管理员角色(DB Admin Roles)

dbAdmin

dbOwner

userAdmin

拥有创建数据库, 和创建用户的权力
集群管理角色(Culster Administration Roles)

clusterAdmin

clusterManager clusterMonitor

hostManager

管理员组, 针对整个系统进行管理
备份还原角色(Backup and Restoration Roles)

backup

restore

备份数据库, 还原数据库
所有数据库角色(All-Database Roles)readAnyDatabase readWriteAnyDatabase userAdminAnyDatabase dbAdminAnyDatabase拥有对admin操作的权限
Superuser Roles(超级管理员)rootdbOwner userAdmin userAdminAnyDatabase这几个角色角色提供了任何数据任何用户的任何权限的能力,拥有这个角色的用户可以在任何数据库上定义它们自己的权限

 

首先, 我们需要切换到admin数据库, 为什么呢? 因为我们的root角色用户是创建在admin数据的, 必须要到admin数据库去完成授权

> use admin  //切换数据库
switched to db admin
> db.auth('root','root')
1  // 返回1表示认证成功,0表示认证失败

完成授权之后, 我们要携带root身份, 切换到我们对应的数据库, 那么先看看我们有哪些数据库再切换

> show dbs
admin        0.000GB
config       0.000GB
local        0.000GB
springbucks  0.000GB
> use springbucks
switched to db springbucks

切换数据库之后, 我们为springbucks创建一个用户

>db.createUser({user:'developer',pwd:'developer12321',roles:[{role:'readWrite',db:'springbucks'}]})
Successfully added user: {
    "user" : "developer",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "springbucks"
        }
    ]
}

然后我们再切换到admin库, 看一下我们创建的用户, 这里先说一下, 为什么要到这个切换到testDB上创建用户, 因为只有在这里创建的用户才是这个数据库的用户, 才能在这里完成授权, 但是创建用户的信息存放在admin库中

> use admin
switched to db admin
> db.system.users.find({user:'developer'})
{ "_id" : "springbucks.developer", "user" : "developer", "db" : "springbucks", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "y0vV6tjNpPk0sgnC/1lW6w==", "storedKey" : "4+imR5Eip5c436nbCOraO6lTZMc=", "serverKey" : "24iV7NLqJw0MHDx1YwstYs3akUc=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "sLuDhwDKL83LXuApMq+TPUIv1EFakJi0Ty+VpQ==", "storedKey" : "9z068PHNPXGOuAEfvx8l+0kgMs9NCYkgaGE5wXBMqVU=", "serverKey" : "wa7NJPoDWKAMVcVvolPmKEyu7wyvzAcMptYAw2RM5CE=" } }, "roles" : [ { "role" : "readWrite", "db" : "springbucks" } ] }

可以看到id是springbucks.developer的用户在springbucks库有读写权限。下面我们测试一下developer用户的读写。

为了避免之前授权root用户的影响, 我们先退出客户端 ,再登陆授权

root@acfcd67fe611:/# mongo
MongoDB shell version v4.0.8
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("4bda0a83-f990-4503-b62a-6894a3930694") }
MongoDB server version: 4.0.8
> use springbucks
switched to db springbucks
> db.auth('developer','developer12321')
1
> db.Hello.insert({name:'World'})
WriteResult({ "nInserted" : 1 })  // 可以看到我插入了一条数据
> db.Hello.find()
{ "_id" : ObjectId("5cb425b4f0242066cb18f01e"), "name" : "World" }

可以看到刚创建的用户读写也没有问题。再试试修改权限

> db.updateUser('developer',{pwd:'developer12321',roles:[{role:'read',db:'springbucks'}]})
> show users
{
	"_id" : "springbucks.developer",
	"user" : "developer",
	"db" : "springbucks",
	"roles" : [
		{
			"role" : "read",
			"db" : "springbucks"
		}
	],
	"mechanisms" : [
		"SCRAM-SHA-1",
		"SCRAM-SHA-256"
	]
}

删除用户

> use springbucks
switched to db springbucks
> db.dropUser('developer')
true

注意哦, 修改用户和删除用户等等, 都和创建用户一样,需要切换到数据库管理员的身份哦, 也就是需要先切换到admin库, 完成认证, 才能进行后面的操作. 同样需要到对应数据库去操作用户. 因为用户是跟着库走的。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐