MongoDB系列---用户及权限管理02
MongoDB-——Privilege
学习大纲:
1、用户权限管理
2、用户操作
知识回顾:
本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过简单的命令和配置来启动关闭我们的MongoDB。
一 用户及权限管理
前言:
MongoDB 作为时下最为热门的数据库,那么其安全验证也是必不可少的,否则一个没有验证的数据库暴露出去,任何人可随意操作,这将是非常危险的。我们可以通过使用为MongoDB 创建用户的方式来降低风险
1 MongoDB用户权限列表

2 MongoDB用户使用
2.1 创建DB管理用户
mongodb 有一个用户管理机制,简单描述为,有一个管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。管理员通常没有数据库的读写权限,只有操作用户的权限, 因此我们只需要赋予管理员userAdminAnyDatabase 角色即可。另外管理员账户必须在 admin 数据库下创建,3.0 版本后没有 admin 数据库,但我们可以手动 use 一个。注:use 命令在切换数据库时,如果切换到一个不存在的数据库,MongodDB会自动创建该数据库
2.1.1 切换到Admin库
管理员需要再admin数据库下面创建,所以我们需要切换到admin数据库(3.0版本后没有这个数据库,但是我们使用use admin 会自动为我们创建这个数据库)
2.1.2 查看admin中的用户
我们可以通过 db.system.users.find()函数来查看 admin 库中的所有用户信息。
目前再admin库中没有用户,所以查无结果
2.1.3 db.createUser 函数
再MongoDB中我们可以用db.createUser({用户信息})函数创建用户
db.createUser({
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
});1)user:新建用户名
2)pwd:新建用户密码
3)customData:存放一些用户相关的自定义数据,我们一般省略该属性。
4)roles:数组类型,配置用户的权限
2.1.4 创建管理员用户
我们现在需要在 admin 库中创建一个名为 test的管理员用户,密码为 test,并为其赋予userAdminAnyDatabase权限(忘了权限可以看看上面的图片介绍),并通过'db'参数指定了它所对应的admin库
db.createUser({user:'test',pwd:'test',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})创建成功后我们可以看到如下提示:
接着我们用db.system.users.find()命令来查看我们创建的用户信息(要首先进入admin数据库下再使用这条命令!)
如果正确输入命令后没有查看到新创建的角色信息,那么我们需要重启MongoDB,然后再去查看(重启就是关闭MongoDB服务,然后开启MongoDB,忘记的可以看我们系列的上一篇博文)
就此我们创建角色并赋予了个简单的权限就已经ok了。
2.1.6 使用权限方式启动MongoDB
再默认情况下MongoDB是不开启用户认证的。如果我们添加用户,那么需要开启用户认证机制。通过修改mongodb.conf配置文件,再文件中添加auth=true即可(上篇博文配置的基础上)
改完后是这个样子。
然后重启我们的MongoDB服务(就是关闭再重新开启!)
5.1.7 用户认证
由于我们刚刚设置了以权限的方式启动MongoDB,那么我们再进入系统的话就不能直接操作了,需要进行认证!
如果我们没认证直接操作命令(可以进行use 数据库)会报错,没有权限
所以我们需要输入认证函数
格式:
db.auth('user','pwd') 例如用我们刚刚创建的test账户
db.auth('test','test')切记:
我们需要首先进入我们该用户所对应的数据库,否则就会像下面第一条命令这样,
0 代表 失败
1 代表登录成功
2.2 创建普通用户
普通用户由管理员创建。通常需要指定某个数据库来操作
2.2.1 需求
我们创建一个名为day的数据库,给这个数据库添加一个用户,用户名为day,密码为day。并授予该用户对day数据库进行读写操作的权限
2.2.2 使用管理员用户登录
(如果还保持刚刚test账户的状态,那么可以跳过此步骤)
普通用户需要由管理员创建并授权。所以,我们首先做的就是用管理员账户登录数据库。
2.2.3 创建day数据库
use命令进行切换的时候,如果库不存在则自动创建该数据库
use day
2.2.4 创建普通用户
根据我们上方的需求来创建。
db.createUser({user:'day',pwd:'day',roles:[{role:'readWrite',db:'day'}]})
2.2.5 使用普通用户
打开一个新的客户端(我这里用的XShell),
因为我们已经配置了环境变量,所以我们只需要再任意目录输入mongo即可启动客户端
2.2.6 切换到day数据库
由于我们是再day数据库中创建额day用户,所以需要先切换到day库
2.2.7 登录普通用户
我们首先来认证下。
就此我们的普通用户就已经创建成功了
2.3 更新用户角色
如果我们需要对已存在的用户的角色做修改,那么我们可以使用db.updateUser()函数来更新用户橘色。注意,该函数需要当前用户具有userAdminAnyDatabase
2.3.1 更新角色语法格式
db.updateUser( "roles":[{"role":"角色名称"},{"更新项 2":"更新内容"}])2.3.2 需求
目前test管理员用户具备userAdminAnyDatabase用户管理橘色,我们为该用户添加一个dbAdminAnyDatabase数据库管理角色
2.3.3 更新角色
db.updateUser('test',{roles:[{role:'userAdminAnyDatabase',db:'admin'},{role:'dbAdminAnyDatabase',db:'admin'}]})
如果没有提示任何信息则表示更新成功。退出当前客户端重新连接即可生效
2.3.4 查看用户信息
show usres 命令
通过 show users 命令查看到test用户的角色已经发生了变化,增加了dbAdminAnyDatabase角色权限。
2.4 更新用户密码
更新用户密码的两种方式:
1)使用db.updateUser()函数更新密码,必须有用户管理权限才能使用
2)使用db.changeUserPassword()函数更新密码。必须有用户管理全出现才能使用
2.4.1 db.updateUser()方式更新密码
需求:
使用db.updateUser()函数将test用户的密码修改为testtest
语法格式:
db.updateUser('用户名',{'pwd':'新密码'})
如果未提示任何信息则表示更新成功。退出当前客户端重新连接认证即可。
重新使用test用户登录
2.4.2 db.changeUserPassword() 方式更新密码
需求:
使用db.changeUserPassword()函数将test用户的密码修改为test
语法格式:
db.changeUserPassword('用户名','新密码')
如果什么都未提示则代表更新成功。退出当前客户端重新连接认证即可
重新使用test用户登录
就此更改密码的两种方式已经完成了。
2.5 删除用户
通过db.dropUser()函数可以删除指定的用户。删除成功后会返回true。在删除用户时候需要切换到创建用户所指定的数据库中才可以删除。
注意:需要使用具有userAdminAnyDatabase角色管理员用户才可以删除其它用户
2.5.1 需求
我们使用db.dropUser()函数将day用户删除
2.5.2 切换数据库
day 用户在day数据库中,所以需要先切换到day数据库中
2.5.3 通过函数删除用户
我们可以看到,该函数返回了true,标识删除成功!
就此我们日常操作权限,管理用户的命令就已经学完了,很枯燥需要多练喔!
MongoDB系列---用户及权限管理02的更多相关文章
- MySQL用户与权限管理
执行mysql select 查询报错: SELECT command denied to user 'root'@'localhost' for table "xxx" 问题原因 ...
- MongoDB的账户与权限管理及在Python与Java中的登陆
本文主要介绍了MongoDB的账户新建,权限管理(简单的),以及在Python,Java和默认客户端中的登陆. 默认的MongoDB是没有账户权限管理的,也就是说,不需要密码即可登陆,即可拥有读写的权 ...
- 【linux相识相知】用户及权限管理
linux系统是多用户(Multi-users)和多任务(Multi-tasks)的,这样的目的是为了一台linux主机可以给很多用户提供服务同时运行多种服务,但是我们是怎么区分每个用户呢?作为一个管 ...
- mysql 用户及权限管理 小结
MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用.如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接. 在 MySQL 命令行模式下输入如下命 ...
- MongoDB的账户与权限管理及在Python与Java中的登录
本文主要介绍了MongoDB的账户新建,权限管理(简单的),以及在Python,Java和默认客户端中的登陆. 默认的MongoDB是没有账户权限管理的,也就是说,不需要密码即可登陆,即可拥有读写的权 ...
- MySQL Study之--MySQL用户及权限管理
MySQL Study之--MySQL用户及权限管理 MySQLserver通过MySQL权限表来控制用户对数据库的訪问.MySQL权限表存放在mysql数据库里.由mysql_install ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理
这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...
- Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10
今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求 ...
- mysql用户和权限管理
用户和权限管理 Information about account privileges is stored in the user, db, host, tables_priv, columns_p ...
随机推荐
- springboot WebMvcConfigurerAdapter替代
过时应用: @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public vo ...
- 2017CCSP-01 五子棋 简单模拟
题面和数据 对于每个空格,先定义一个变量cnt=0,表示空格填充后对五子数量的变化,四个方向进行两边搜索,设对于每个方向连续的白棋子分别为\(wa\),\(wb\),有以下几种情况. \(wa> ...
- mui中判断是点击还是滑动
判断和滑动是两种触发方式 滑动分为四种,上下左右(swipeup,swipedown,swipeleft,swiperight) 点击分为两种,点击和双击,一般用单机(tap) 根据自己不同的需求进行 ...
- JS时间格式CST转GMT
转换方法:JS 时间格式CST转GMT 时区和Date:Java中的Date和时区转换
- 手把手教你如何在window下将jenkins+allure集成生成的测试报告通过jenkins配置邮箱自动发送-04(非常详细,非常实用)
简介 上一篇生成测试报告,小伙伴们和童鞋们就又问道,测试报告已经生成了,怎么发送给相关的负责人了?小伙伴们和童鞋们不要着急,听宏哥慢慢给你道来,心急吃不了热豆腐哈.今天这篇文章宏哥就给小伙伴和童鞋们来 ...
- 利用Dockerfile部署SpringBoot项目
利用Dockerfile部署SpringBoot项目 1.创建一个SpringBooot项目并且打成jar包 2.在Linux中创建一个文件夹,来做docker测试 [root@izwz90lvzs7 ...
- HashMap 取数算法
Map,百度翻译给我的解释是映射,在Java编程中,它是存储键值对(key-value)的一种容器,也是Java程序员常用的对象.这篇博客介绍下HashMap的实现:java是面向对象编程语言,jdk ...
- 基于微信小程序云开发实现的婚礼邀请函模板,可自行定制开发
这个婚礼邀请函是之前帮别人做的,现在人家婚礼举办过了也没啥关系了,想着就修改成通用模板进行开源,方便大家尤其是小白们克隆项目之后稍微修改就能够直接使用. 当时自己开始这个项目时候也是查阅了很多教程文章 ...
- 尹吉峰:使用 OpenResty 搭建高性能 Web 应用
2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·成都站,原贝壳找房基础架构部工程师尹吉峰在活动上做了<使用 O ...
- 【Python3爬虫】我爬取了七万条弹幕,看看RNG和SKT打得怎么样
一.写在前面 直播行业已经火热几年了,几个大平台也有了各自独特的“弹幕文化”,不过现在很多平台直播比赛时的弹幕都基本没法看的,主要是因为网络上的喷子还是挺多的,尤其是在观看比赛的时候,很多弹幕不是喷选 ...





















