开发者学堂课程【MongoDB精讲课程(下):添加用户和权限】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/727/detail/12991
添加用户和权限
内容介绍:
一、单实例环境
二、创建超级管理员用户
三、创建普通用户bobo
本节介绍安全认证的具体操作,具体操作分为两种情况:单实例环境和集群环境:
单实例:只需要新增一个用户,给此用户赋予一个角色即可。
集群环境 :集群环境实际上包括副本集和之前搭建的分片集群,集群环境除了开启用户认证,集群之间相互通讯的还需要安全认证。
一、单实例环境
比较简单,只需要将之前 single 的单机开启,然后开启一些用户,赋予用户一些角色,然后通过用户对数据库进行指定的操作。
目标:对单实例的 MongoDB 服务开启安全认证,这里的单实例指的是未开启副本集或分片的MongoDB实例。
1.关闭服务
在搭建单实例环境前需要关闭之前的服务。
输入clear
关闭之前搭建的分片集群的服务,再来输入
ps-ef |grep mongo
查看当前开启了哪些服务
上述mongo服务都可以进行关闭,客户端也可以先进行退出,在两个客户端输入exit,退出后进行关闭。
当前分片开启的一些服务都要进行关闭,输入
kill -2 11305 20789 20820 20879 20973 21005 21035 21246 21288 21328 24718
杀掉后再来查看,输入ps-ef |grep mongo
整个环境变得干净,先来启动单机,输入
/usr/local/mongodb/bin/mongod-f/mongodb/single/mongod.conf
单机启动后再输入ps-ef |grep mongo查看,发现结果种存在刚才启动的单机。启动完单机后连接客户端,输入
/usr/local/mongodb/bin/mongo--host 180.76.159.126--port 27017
此时就是最普通简单的一个mongo服务的单实例环境。
二、创建超级管理员用户
在创建普通用户前先创建管理员,先要切换到 admin 库,输入
show dbs
admin 是作为 mongo 服务的一些权限管理,切换到 admin 库后创建超管,输入
>db. createUser({ user:"
myroot
", pwd:"123456",
roles:[
“
root
”
]})
user是用户名,pwd 是指定密码,roles 代表需要赋予 myroot 什么权限,roles 权限的语法:
roles:[{
“
role
”
:
”
root
”
,
”
db
”
:
”
admin
”
}]
实际上是一个json对象,roles可以赋予多个,此处只赋予一个权限,role用户角色是root,因为超管针对的是admin库,所以db只能写admin。语法也可以进行简写,例如当前库就在admin下,admin赋予的角色只需要在后面添加上root字符串即可,代表当前admin库给myroot用户赋予超管的权限。
输入
>db. createUser({ user:"
myroot
", pwd:"123456",
roles:[
“
root
”
]})
显示
Successfully added user: {
“
user
”
:
”
myroot
”
,
”
roles
”
:[
“
root
”
]}
说明超管用户已经创建成功。再来创建admin普通管理员的权限
> db.create
U
ser(
{
user : "myadmin" , pwd : "123456" , roles:
[
{
role : "userAdminAny
D
atabase" , db : "admin"}]
}
)
userAdminAnyDatabase可以在指定数据库创建和修改用户(除了数据库config和local之外),相当于一个小的root,比root权限小,也可以创建和修改用户。
输入
> db.create
U
ser(
{
user : "myadmin" , pwd : "123456" , roles:
[
{
role : "userAdminAny
D
atabase" , db : "admin"}]
}
)
创建成功后可以通过system进行查看,先输入
show collection 可以看到结果有几个集合,其中包括system.users.,它里面存放着刚才创建成的用户的信息,再输入:
>db.system.users.find()
结果显示
可以看到存放了两个用户myroot和myadmin,对用户可以进行一些增删改查的操作,可以删除myadmin,只使用超管,输入
>db.dropUser(
“
myadmin
”
)
之后再来查看,输入
>db.system.users.find()
结果可以看到刚才创建的admin被删除
只剩下超管用户即可,除了对用户进行添加修改删除,还可以修改密码,输入
>db.changeUserPassword(
“
myroot
”
,
”
123456
”
)
此时输入>db.system.users.find()
没有任何变化
创建完成后可以进行测试,输入
>db.auth("myroot","12345
6
")
若输入错密码,例如>db.auth("myroot","2222")
结果显示Error:Authentication failed验证失败
输入正确密码123456,结果返回值为1,就代表验证通过。说明刚才加入的超管通过,用户名为myroot,密码为123456。
以上就是整个用户添加的操作。
三、创建普通用户bobo
添加完超管用户后,我们真正在开发中使用超管去操作连接数据比较危险,一般还会添加一个普通用户,该普通用户权限相对较小,不会像超管一样对所有的库都有用,普通用户只去管理某一个库。例如我们常使用的库use articledb
因为我们刚才已经登录了超管用户,在进入后可以创建一个 bobo 的账户,密码为123456,但是权限比较小,只有读写的操作,读写操作针对 articledb 库。输入
>db. createUser({ user:"bobo", pwd:"123456", roles:[(role:"readWrite", db:"articledb"
}
]
}
)
创建成功后可以验证 bobo,输入
>db.auth("bobo","123456")
此处返回值为1,如果此处密码输错显示验证失败。
以上新建了两个用户超级管理员和bobo普通用户,普通用户 bobo 只对 articledb有效。