MongoDB的用户创建更新及删除
1.从docker官方拉取mongo镜像,我这里直接拉取的最新版本GaryMBP:~ Gary$ docker pull mongo如下说明拉取成功GaryMBP:~ Gary$ docker imagesREPOSITORYTAGIMAGE IDCREATEDSIZEm...
- 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) |
| 拥有创建数据库, 和创建用户的权力 |
集群管理角色(Culster Administration Roles) |
| 管理员组, 针对整个系统进行管理 |
备份还原角色(Backup and Restoration Roles) |
| 备份数据库, 还原数据库 |
所有数据库角色(All-Database Roles) | readAnyDatabase readWriteAnyDatabase userAdminAnyDatabase dbAdminAnyDatabase | 拥有对admin操作的权限 |
Superuser Roles(超级管理员) | root | dbOwner 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
库, 完成认证, 才能进行后面的操作. 同样需要到对应数据库去操作用户. 因为用户是跟着库走的。
更多推荐
所有评论(0)