Mongodb数据库权限阶段性总结

 启动mongo方式有两种

 下面两种启动操作均先进入mongo安装目录的bin目录下:

(1)命令行启动

./mongod -dbpath /usr/local/mongodb/data【此处填写自己的data目录所在路径】 -logpath /usr/local/mongodb/log/mongo.log【此处填写自定义的日志文件所在目录】 -logappend -fork -port 27017

(2)配置文件启动

./mongod --config /usr/local/mongodb/etc/mongo.conf【自3己的配置文件路径】

关闭mongo,方式两种,

(1)进入mongo安装目录的bin目录下:

        ./mongod --shutdown --dbpath /usr/local/mongodb/data【此处填写自己的data目录所在路径】

(2) 查看进程 ps -ef|grep mongo  

         杀死进程 kill +mongo端口号

一、Mongo权限字段解析

 

     

  

 

 

基于以上用户角色字段的基本介绍,本人做了以下试验。

二、基础角色的创建

2-0、在新安装的mongodb数据库中,未创建任何用户的情况下,无论是否开启了认证模式(启动时 auth=true),我们都可以执行数据库的任意操作。

2-1、数据库初始化管理用户创建

在完成mongodb安装之后,为了方便管理 mongodb 的所有数据库用户信息 ,我们选取角色 userAdminAnyDatabase 。

而该角色仅支持在 admin 数据库中使用。

以下是验证示例:

切换到别的数据库,创建角色为 userAdminAnyDatabase 的用户,创建失败,报错没有该角色。

新安装一个mongodb ,连接到mongo 之后,初始化进入的是 test,

切换到 admin 库,创建全局管理用户admin,对应的角色就是上文中的userAdminAnyDatabase ,下图中,我创建的时候多给admin用户一个hostManager角色,主要是为了在命令行可以运行 db.shutdownServer()  命令来关闭mongo服务。经过测试,未开启 权限认证的情况下,db.shutdownServer()  命令可以正常使用,开启权限认证后,admin用户必须具有hostManager角色才有权限执行 db.shutdownServer()  命令。

2-2、重启mongodb 服务,开启认证模式

【*】开启认证模式需要将配置文件中修改auth=true,,或者 命令行启动的时候 加上  --auth=true  。

启动之后。连接上mongo,我们切换到任意数据库下,执行数据库操作,都会报错,如下所示,

此时, 需要先进行权限认证,然后再进行数据库操作。

认证命令:db.auth("username","password");

认证成功则返回 1 ;失败返回0;

 2-3、给自定义数据库添加管理用户,

通过上一步认证成功,我们切换到自己的数据库,本示例以数据库 facebook 为例。

(1)给 facebook 创建本库的管理用户,

db.createUser({user:"firstuser",pwd:"123456",roles:[{role:"readWrite",db:"facebook"},{role:"userAdmin",db:"facebook"}]});

userAdmin角色具有管理当前数据库用户信息的权限,包括增删改用户信息。

readWrite角色可以对数据库进行增删改查操作。

(2)创建完用户之后先退出mongo 连接,在连接

 切换到 facebook 库,认证 facebook 用户信息,认证通过之后可以进行相关操作;

  (3)在facebook下创建 具有读写权限的用户 seconduser,但是该用户不具有管理当前数据库用户的 权限,

不用退出,执行 db.auth("seconduser","123456");

认证通过之后,我们执行查询当前数据库用户列表命令,提示没有权限,

(4)修改 seconuser 的角色信息,退出重新连接mongo,

        切换到 admin 库。执行认证操作,认证通过之后切换到 facebook ,不需要认证 facebook下的用户信息,直接执行更新操作,

退出连接,重连mongo

三、更改用户密码

要想更改用户信息,需要切换到对应的库,如果用户不是在该库下创建的,则会报错未找到要修改的用户

方式二、

 退出重新连接mongo,切换到facebook 库,认证通过,可以 修改 facebook 下的用户信息。

 删除用户:

认证通过之后:

执行命令:db.dropUser("username")  删除成功返回 false

四、遗留问题

关于新建从admin 库切换到用户自定义数据库 (facebook),在facebook 下,创建完facebook库相关用户后,本人发现以下现象。

(1)在不退出当前连接的情况下,由于已经认证了 admin库 下用户,在验证别的库(facebook),也可以验证通过,但是facebook库操作不了。所以每次认证完一个库A,要想再操作另一个库B,需要重新连接,直接切换到目标库B,进行认证,再进行库B的基本操作。现象截图如下:

总结:在认证完一个库的情况下,要想操作别的库,本人都是重新连接,直接切换到目标库,认证完目标库,才操作目标库。

假如哪位大神知道怎么在不退出连接的情况下,从一个已认证的库切换到另一个的库,认证之后可以正常操作的,麻烦指点一下。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

第一部分权限信息截图取自 https://blog.csdn.net/qq_33206732/article/details/79877948   , 该文对于权限的解释比较详细。用户可参考。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值