开发者学堂课程【MongoDB精讲课程(下):单实例_服务端开启&客户端登录验证】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/727/detail/12992
单实例_服务端开启&客户端登录验证
内容介绍:
一、添加用户和权限
二、服务端开启认证和客户端连接登录
一、添加用户和权限
回顾
//测试是否可用
> db.auth(
‘’
bobo
’’
,
’’
123456
’’
)
只增添了普通用户和管理员用户,并没有开启认证,效果为退出客户端后再登陆不需要输入用户名和密码也可以查看 dbs。
如果想要通过用户登录之后操作,比如设置安全认证,需要从服务端开启认证。开启认证后再链接登录则需要登录用户才能进行操作
二、服务端开启认证和客户端连接登录
1. 关闭已经启动的服务
(1)V使用 linux 命令杀死进程
[root@bobohost sing1e]# ps -ef lgrep mongo
Root
23482 1 0 08:08 ? 00:00:55 /usr/1ocal / mongodb/bin/mongod -f
/mongodb/singTe/mongod. Conf
[root@bobohost single]# ki17 -2 23482
杀掉当天进程后重启,直接启动是没有效果的,此时启动与之前搭建的环境相同,不需要登陆。有两种方式开启权限认证启动服务。
(2)在 mongo 客户端中使用 shutdownServer 命令来关闭
> db . shutdownserver()
shutdown command only works with the admin database; try 'use admin'>use admin
switched to db admin> db. Shutdownserver
()
2019-08-14T11:20:16.450+0800 E QUERY [js] Error: shutdownserver failed: {
"ok" :
0,
"errmsg" : "shutdown must run from loca7host when running db without auth","code" : 13,
"codeName" : "unauthorized"
}
:
_getErrorwithcode@src/mongo/she11/uti1s.js:25:13
DB.prototype.shutdownserver@src/mongo/she11/db.js:453:1a(she11):1:1
需要几个条件:
必须是在 admin 库下执行该关闭服务命令。
如果没有开启认证,必须是从 localhost 登陆的,才能执行关闭服务命令。
·非 localhost 的、通过远程登录的,必须有登录且必须登录用户有对 admin 操作权限才可以。
2. 以开启认证的方式启动服务
有两种方式开启权限认证启动服务:一种是参数方式,一种是配置文件方式。
(1)参数方式
在启动时指定参数--auth,如:
/usr/loca1/mongodb/bin/mongod-f /mongodb/single/mongod.conf --auth
需要登陆用户才能进行操作。此方法简单但是每次启动都需要带上参数,如果忘记则任何一个知道你的IP地址和登陆号就可以直接登陆,不安全不严谨,所以开发中很少用.
(2)配置文件方式
在 mongod.conf 配置文件中加入:
vim /mongodb/single/mongod.conf
security :
#开启授权认证
authorization: enab1ed
启动时可不加--auth 参数:
/usr/loca1/mongodb/bin/mongod -f /mongodb/single/mongod.conf
此时再登陆相当于服务端开启了认证,就不能随意操作。此时登陆的比赛可以连上但是什么也看不见。也可以切换admin账户,虽然显示切换到了admin账户,但是调用命令,展示集合,发现没有登陆什么也看不见。
3. 开启了认证的情况下的客户端登录
有两种认证方式,一种是先登录,在 mongo shell 中认证;一种是登录时直接认证。
(1)先连接再认证
[root@bobohost bin]# /usr/loca1/mongodb/bin/mongo --host 180.76.159.126 --port 27017MongoDB she17 version v4.0.10
connecting to: mongodb: //180.76.159.126:27017/?gssapiserviceName=mongodb
Implicit session: session { "id" : uUID("53fef661-35d6-4d29-b07c-020291d62e1a") }MongoDB server version : 4.0.10
工
提示:
开启认证后再登录,发现打印的日志比较少了。
相关操作需要认证才可以:
查询 admin 库中的 system.users 集合的用户:
> use admin
switched to db admin> db. system.users.findError: error: {
"ok" : 0,
"errmsg" : "command find requires authentication" ,
"code" : 13,
"codeName" : "unauthorized"
}
> db.auth( "myroot" , "123456")
1
> db.system.users.find()
此时登陆的是超管账户,可以看见所有的库,可以对每一个库进行操作。
登陆普通用户需要先退出切换到 aticledb 之后再连接。
查询 articledb 库中的 comment 集合的内容:
> use atic1edb
switched to db articledb>db . comment.find(
Error: error:
{
"ok" : 0,
"errmsg" : "not authorized on articledb to execute command { find: \ "comment\",fi1ter: f,1sid: i id: uUID(\"53fef661-35d6-4d29-b07c-020291d62e1a\")},Sdb:
\
"articledb
\
"
}
",
此时只有 aticledb 的读写权限,与超级管理员用户不同,此时的操作权限只在aticledb,只能看到 aticledb 库。