1.MongoDB权限介绍
a 上篇文章中,咱们在Linux下配置了MongoDB环境而且将其设置为服务随机器启动而启动,那么接下来这篇文章咱们就来简单说一下MongoDB下对登陆用户权限的管理。
b MongoDB安装完成后,默认是不须要输入用户名密码便可登陆的,可是每每数据库方面咱们会出于安全性的考虑而设置用户名密码,本篇文章主要介绍了MongoDB添加管理员/普通用户的方法。
c 在咱们使用的关系型数据库中,通常都是含有权限控制的,也就是说配置什么用户访问什么数据库,什么数据表,什么用户能够对表进行增删改,什么用户能够对表进行读取等等都是能够配置,那么MongoDB做为一个非关系型数据库的典型,它其实也是能够配置的,而掌握MongoDB的权限咱们只须要简单理解下面几点,后面按照下面的几点去配置便可(网上学习所获得的总结)。
c.1 MongoDB是没有默认管理员帐号的,因此要先添加管理员帐号,在开启权限认证。
c.2 切换到admin数据库,添加的帐号才是管理员的帐号。
c.3 用户只能在用户所在的数据库登陆,包括管理员帐号。
c.4 管理员能够管理全部的数据库,可是不能直接管理其它数据库,要先在admin数据库中认证才能够,也是为了 安全性考虑。
d 本学习笔记在linux下安装的MongoDB的版本是3.2.8,因此下面操做的命令都是以3.2.8版本为例,这是由于老版本和新版本的命令有所不一样,请大伙周知,若是你们用的版本比较低,请自行查看命令是什么进行测试操做。
2 MongoDB添加管理员帐户
a 上面简单的说明以后,下面咱们须要开始链接数据库进入CLI管理界面,只有进入此页面以后咱们才可以对其进行操做(暂时为用客户端,后面会用客户端来进行说明)。
a.1 首先跳转到MongoDB安装包下的bin文件夹下,而后使用命令(./mongo)启动,则会启动成功(确保MongoDB的服务已启动),如图所示(MongDB的安装路劲为本身的安装路径,可能会和个人不一致,请检查):
a.2 如图所示,则链接成功,咱们便可在>后面进行操做。
b 链接数据库而且切换到用户表下
b.1 链接成功以后首先咱们输入命令:show dbs,咱们发现其系统中内置了一个数据库名字为local(若是你们查询出来还有一个
admin数据库,那是由于你使用的是低版本的MongoDB),admin库是不存在的,须要咱们本身建立。
b.2 (use admin) 使用此命令建立一个admin数据库,权限管理就要使用admin数据库,此命令也是切换数据库的命令。
b.3 (show collections) 切换到admin库以后,使用show collections查询,咱们发现该数据库下包含了一个system.user和system.version表,咱们主要来看system.user表,这张表是用来存放超级管理员的。
b.4 (db.system.users.find())首先使用命令查询system.user表中含有数据否,输入命令:db.system.users.find(),查询发现数据库是空的,这时候咱们给这个表添加一个管理员帐户。
d 添加用户而且为用户指定角色和数据库,命令如图所示:
d.1 user:用户名
d.2 pwd:密码
d.3 customData:描述字段
d.4 roles:指定用户的角色,能够用一个空数组给新用户设置空角色,在roles字段能够指定内置角色和用户定义的角色,内置角色在在第四个模块咱们专门回来讲它。
e (show users、db.system.users.find())当建立完用户以后,咱们能够用前面的两个命令来查询用户的信息,自行查询眼看。
f 当添加完用户信息以后,咱们的想法就是立刻从新链接验证是否权限已经控制,这里就打击你了,固然尚未控制,这里咱们还须要开启用户权限验证,由于MongoDB默认是不开启权限验证的,下面咱们简单说一下如何开启权限验证。
3 MongoDB开启用户权限验证
a 经过上面的简单介绍咱们已经配置了用户和密码以及角色,可是正如上面最后一步我所说,这里登陆仍是登陆不了,那么是由于咱们没有开启用户权限验证,如何开启这个权限验证呢。
b 首先咱们打开上一篇咱们配置的mongodb.conf配置文件,个人安装路径是:(/usr/local/kencery/mongoDB/mongodb/bin/),使用vim打开,找到这样一个属性(auth=true),将前面的注释去掉,保存。
c 重启MongoDB服务,由于我在前面已经将MongoDB设置为服务,因此我使用下面的命令便可对MongoDB进行关闭和重启
c.1 service mongod stop
c.2 service mongod start
d 重启以后咱们在链接数据库而后切换到admin数据库下,使用db.system.users.find()命令查看,以下图所示,则说明配置已经成功
e 如上图所示,提示信息提示咱们没有对其进行受权,此时,咱们输入以下命令进行受权,受权以后咱们使用查询命令去查询发现已经能够查询,到这里简单权限已经设置完成。
e.1 db.auth("kencery","kencery")
4 MongoDB的roles角色简单介绍
b 关于MongoDB的内置角色,咱们大概能够分为如下几种来简单说一下
b.1 Database User Roles(数据库用户角色):read、readWrite
b.2 Database Administration Roles(数据库管理角色):dbAdmin、dbOwner、userAdmin
b.3 Culster Administration Roles(管理员组,针对整个系统进行管理):clusterAdmin、clusterManager、clusterMonitor、hostManager
b.4 Backup and Restoration Roles(备份还原角色组):backup、restore
b.5 All-Database Roles(全部数据库角色):readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
b.6 Superuser Roles(超级管理员):root、(dbOwner、userAdmin、userAdminAnyDatabase这几个角色角色提供了任何数据任何用户的任何权限的能力,拥有这个角色的用户能够在任何数据库上定义它们本身的权限)
b.7 Internal Role(内部角色,通常状况下不建议设置):__system
d 我暂时只是理解了一些,还不能所有理解,由于毕竟只是本身学习,因此只是本身作实践测试了一些角色的意义,若是你们对那个不太懂,能够留言咱们一块探讨。
5 MongoDB下建立一个新的数据库而且配置读写(read、readWrite)权限管理的案例说明
a 在上面咱们在admin数据库下为kencery用户创建了一个userAdminAnyDatabase角色,使用这个用户来管理用户,能够经过这个角色来建立、删除角色。首先咱们切换到admin下受权用户登陆(从新链接以后的操做),命令以下:
a.1 use admin
a.2 db.auth("kencery","kencery") 返回1则表示受权成功,不然受权失败
a.3 show dbs 验证受权是否成功。
b 受权成功以后,首先咱们建立一个日志表(logs),给logs表建立一个read和readwrtite帐号。read的帐号对应制度帐号,readwrite帐号对应读写帐号,命令以下:
b.1 use logs
b.2 db.createUser({
user:"read",
pwd:"read",
roles:[{role:"read",db:"logs"}]
})
b.3 添加读写用户,将上面的命令中的user和pwd改成:readwrite,roles中的role改成readWrite,其它的不用改执行便可。
b.4 最后查询咱们添加的用户以下所示,则说明咱们对其读和读写用户添加完成。
c 上面咱们建立了两个帐号以后,首先咱们来验证读写帐号(readwrite(能够写入当前数据库的用户信息)),
c.1 首先咱们不要切换用户,直接在kencery用户下面对logs数据库下的payment表进行插入,会提示咱们插入失败,没有权限,这是由于userAdminAnyDatabase权限只是针对用户管理的,对其它的表示没有操做权限的,以下如所示:
c.2 从上面看到提示咱们权受权失败,这时候用咱们建立的readwriter(读写)帐号受权,而后在进行插入和查询,则发现插入以及查询均成功,如图所示:
c.3 从上面咱们看到对于读写权限验证没有问题。
d 上面测试了读写权限,下面咱们测试一下读权限(read)
d.1 继续上面的操做,首先咱们受权给read用户,而后使用read用户去插入和查询,则发现插入提示没有受权,而查询成功,则咱们指望的所实现,如图所示:
d.2 如上图所示,则说明受权已经完成,彻底能够配置给某些用户只能去读而不能插入修改的权限。
6 MongoDB超级管理员root
a 上面咱们简单介绍了读写权限以及读权限,那么下来咱们说一下root权限,它是超级权限,也就是说你只要配置其帐号,则能够对数据进行任何的操做,固然正常环境中不建议使用,危险性极高!可是为了学习,咱们仍是来说述一下这个角色的使用,
b 首先在上面的环境中咱们继续受权给kencery用户,而后建立一个超级用户nouse(不建议使用)。可是当咱们受权的时候发现报错了,报错截图:
备注:缘由是咱们在admin数据库下面建立的用户,不能直接在其它库下面受权,只能在帐号建立库下面受权,而后在去其余库访问。
c 从上面获得,首先咱们切换数据库到admin,而后建立用户nouse,权限角色给root,数据库对应admin,脚本在上面都已经写过,这里就再也不累赘了。
d 完成以后,咱们切换受权给用nouse以后,切换到logs数据库下面进行各类操做,发现都是能够操做的,简单截图以下:
e 由于帐号始终都是在当前需呀受权的数据库下面进行受权的,那要不是在当前数据库下面受权呢,意思就是,我如今切换到admin数据库下添加用户给logs数据库,建立完成以后如何操做呢?始终记下来上面所述的那句:(哪里建立哪里认证)在admin数据库下面建立的用户,不能直接在其它库下面受权,只能在帐号建立库下面受权,而后在去其余库访问。
f 从文章开始到如今咱们已经建立了不少帐户,那么咱们可使用下面两条命令来查询帐户以及帐户总数
f.1 db.system.users.find().pretty()
f.2 db.system.users.find().count()
因本人是学习笔记,故而部份内容来源于网络,但愿能学有所得
关于权限这块如今只是简单的了解以及配置,后面若是可以研究的更深的话还会继续来讲这块