MongoDB用户权限管理配置
MongoDB系列第四课:MongoDB数据库、集合、文档的操作
Mongodb作为时下最为热门的数据库,那么其安全验证也是必不可少的,否则一个没有验证的数据库暴露出去,任何人可随意操作,这将是非常危险的。我们可以通过使用为MongoDB创建用户的方式来降低风险。
MongoDB用户权限列表
read |
允许用户读取指定数据库 |
readWrite |
允许用户读写指定数据库 |
dbAdmin |
允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile |
userAdmin |
允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 |
clusterAdmin |
只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 |
readAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的读权限 |
readWriteAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的读写权限 |
userAdminAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 |
dbAdminAnyDatabase |
只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 |
root |
只在admin数据库中可用。超级账号,超级权限 |
MongoDB用户使用
一、 创建DB管理用户
mongodb有一个用户管理机制,简单描述为,有一个管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。
管理员通常没有数据库的读写权限,只有操作用户的权限, 因此我们只需要赋予管理员userAdminAnyDatabase角色即可。
另外管理员账户必须在admin数据库下创建,3.0版本后没有admin数据库,但我们可以手动use一个。注:use命令在切换数据库时,如果切换到一个不存在的数据库,MongodDB会自动创建该数据库。
1.1 切换到admin库
管理员需要在admin数据库下创建,所以我们需要切换到admin数据库。
1.2 查看admin中的用户
可以通过db.system.users.find()函数来查看admin库中的所有用户信息。
目前在admin库中没有用户,所以查无结果。
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:数组类型,配置用户的权限。
1.4 创建管理员用户
我们现在需要在admin库中创建一个名为bjsxt的管理员用户,密码为bjsxtpwd。
db.createUser({user:'bjsxt',pwd:'bjsxtpwd',roles:[{role:'userAdminAnyDatabase',db:'admin'}])
创建成功后会看到如下提示:
1.5 重启MongoDB
在管理员账户创建完成后,我们需要重新启动MongoDB,并开启验证。
重新启动函数:db.shutdownServer()。
1.6 使用权限方式启动MongoDB
在默认的情况下MongoDB是不开启用户认证的。如果我们添加用户,那么需要开启用户认证机制。通过修改mongodb.conf配置文件,在文件中添加auth=true即可。
修改完成后启动MongoDB。
1.7 用户认证
创建管理员后,需要认证方可使用该用户,否则会提示需要认证。
认证函数:db.auth(‘用户名’,’密码’)
如果结果返回1,则表示认证成功,返回0则表示认证失败。
登录成功后可查询用户
二、 创建普通用户
普通用户由管理员创建。通常需要指定某个数据库来操作。
2.1 需求
我们创建一个sxt数据库,给这个数据库添加一个用户,用户名为itsxt,密码为itsxtpwd。并授予该用户对sxt数据库进行读写操作的权限。
2.2 使用管理员用户登录
普通用户需要由管理员创建并授权。所以,我们首先做的就是用管理员账户登录数据库。
2.3 创建sxt数据库
use命令切换数据库时如果该库不存在,那么则会创建该数据库。
2.4 创建普通用户
2.5 使用普通用户
打开一个新的客户端。
2.6 切换到sxt数据库
由于我们是在sxt数据库中创建的itsxt用户,所以需要先切换到sxt库。
2.7 登录普通用户
如果我们不登录会发现无法对该数据库进行插入操作。因为缺少用户认证。
通过认证函数对用户进行登录认证。
认证成功后操作通过该用户操作sxt库。该用户对sxt库具备读写操作。
三、 更新用户角色
如果我们需要对已存在的用户的角色做修改,那么我们可以使用db.updateUser()函数来更新用户角色。注意,该函数需要当前用户具有userAdminAnyDatabase或者更高的权限。
3.1 更新角色语法格式
db.updateUser( "用户名","roles":[{"role":"角色名称"},{"更新项2":"更新内容"}])
3.2 需求
目前bjsxt管理员用户只具备userAdminAnyDatabase用户管理角色,我们为该用户添加一个dbAdminAnyDatabase数据库管理角色。
3.3 更新角色
db.updateUser("bjsxt",{roles : [{"role" : "userAdminAnyDatabase","db" : "admin"},{"role" : "dbAdminAnyDatabase","db" : "admin"}]})
如果没有提示任何信息则表示更新成功。退出当前客户端重新连接即可生效。
3.4 查看用户信息
通过show users命令查看到bjsxt用户的角色已经发生改变。
四、 更新用户密码
更新用户密码有两种方式:
1)使用db.updateUser()函数更新密码。
2)使用db.changeUserPassword()函数更新密码
4.1 更新密码方式一
使用db.upateUser()函数将bjsxt用户的密码修改为sxt
语法格式:db.updateUser("用户名",{"pwd":"新密码"})
4.2 更新密码方式二
使用db.changeUserPassword()函数将bjsxt用户的密码修改为sxtpwd。
语法格式:db.changeUserPassword("用户名","新密码")
如果未提示任何信息则表示更新成功。退出当前客户端重新连接认证即可。
重新使用bjsxt用户登录
五、 删除用户
通过db.dropUser()函数可删除指定用户。删除成功后会返回true。在删除用户时需要切换到创建时用户所指定的数据库中才可以删除。注意:需要使用具有userAdminAnyDatabse角色管理员用户才可以删除其他用户。
5.1 需求
我们使用db.dropUser()函数将itsxt用户删除。
5.2 切换数据库
itsxt用户在sxt数据库中,所以需要先切换到sxt数据库。
5.3 通过函数删除用户
我们可以看到,该函数返回了true,表示删除成功。
MongoDB用户权限管理配置的更多相关文章
- 如何对MongoDB 3.2.7进行用户权限管理配置
转自:https://www.jianshu.com/p/a4e94bb8a052 上次写了一篇在CentOS7上源码安装MongoDB 3.2.7,完成了MongoDB 3.2.7的安装,但需要应用 ...
- mongodb 3.2 用户权限管理配置
使用mongodb 有段时间了,由于是在内网使用,便没有设置权限,一直是裸奔. 最近有时间,研究了下mongodb 3.2 的用户权限配置,网上有许多用户权限配置的文章,不过大多是之前版本,有些出入, ...
- [MongoDB] 用户权限管理
在新环境按照原来的步骤新装了MongoDB,结果出现了一些错误,才发现版本升到了2.6.1,用户权限相关的内容全部改掉了. 现在使用Role来管理用户,有一些内置的Role,也可以自定义Role. 内 ...
- mongodb用户权限管理(二)
数据库 分配用户权限 有了创建语法,和参数说明,接下来开始实践. 注意,还有一点,账号是跟着数据库绑定的,在那个库里授权,就在那个库里验证(auth) 否则会失败 创建 账号管理授权权限 的账号 &g ...
- MongoDB用户权限管理
创建用户账号: (roles参数指定了用户的角色以及这个账号授权的数据库,在同一个数据库中不能同时创建两个用户名相同的账号) Mongodb内置的用户角色: 数据库用户角色:read.readWrit ...
- mongodb用户权限管理的CRUD
https://blog.csdn.net/weixin_34332905/article/details/88759759?utm_medium=distribute.pc_relevant.non ...
- ClickHouse学习系列之二【用户权限管理】
背景 最近花了些时间看了下ClickHouse文档,发现它在OLAP方面表现很优异,而且相对也比较轻量和简单,所以准备入门了解下该数据库系统.在安装完之后首先做的应该如何设置用户密码以及权限控制.因为 ...
- [原]Jenkins(十三)---jenkins用户权限管理
* 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5337874.html 两种策略的比较
- Jenkins拾遗--第三篇(用户权限管理)
采访过很多实用Jenkins的同学,发现Jenkins的安全是一个很薄弱的地方.很多公司用作生产部署的Jenkins安全管理都不是很规范,就更别提测试用的Jenkins了. 其实Jenkins是一个很 ...
随机推荐
- C语言应用--数据类型定制一结构体数组
结构体定义成功后,其实和c语言内部的类型区别也不大了,自然可以用来定义结构体类型的数组了.我们根据结构体定义的方式不同,分别用多种方式定义结构体数组:
- linux pip install gdal apyt-get install libgdal-dev export cplus_path=/usr/include/gdal export c_path=/usr/include/gdal
apt-get install libgdal-dev pip install gdal
- return EXIT_SUCCESS;
就是 return 0; EXIT_SUCCESS是C语言头文件库中定义的一个符号常量. 头文件stdlib.h中:#include <cstdlib> /* Definition of ...
- MySQL批量导入Excel数据
MySQL批量导入Excel数据 1.确定需要导入数据的表名称以及字段,然后在新建的Excel表中,按照表字段正确排序:(注:(Excel文件的名称最好和数据库的名称一致,sheet表的名字最好和表名 ...
- 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_17-身份校验-身份校验过虑器编写
5 身份校验 5.1 需求分析 本小节实现网关连接Redis校验令牌: 1.从cookie查询用户身份令牌是否存在,不存在则拒绝访问 2.从http header查询jwt令牌是否存在,不存在则拒绝访 ...
- Qt编写自定义控件58-直方对称图
一.前言 本控件也非原创控件,是参考网上的代码而来的,对称顾名思义就是将画布平均成上下两部分,将设置的值自动按照画布高度的一半作为参照高度进行绘制,然后增加动态过渡效果,有点类似于声音播放时候的频谱效 ...
- Mysql coalesce()函数认识和用法
Mysql coalesce()函数认识和用法 coalesce()解释:返回参数中的第一个非空表达式(从左向右): 鉴于在mysql中没有nvl()函数, 我们用coalesce()来代替 ...
- 【Leetcode_easy】1103. Distribute Candies to People
problem 1103. Distribute Candies to People solution:没看明白代码... class Solution { public: vector<int ...
- iOS-tabBar切换不同控制器封装(自定义导航+自定义uiviewcontroler+系统自带tabbar+自定义tabbarController)
首先,一个app的搭建环境非常重要.既要实现基本功能,又要考虑后期优化的性能. 现在很多应用不仅仅是系统自带的控制器,由于需求复杂,基本上需要自定义多控制器来管理. 新建一个BasicNavigati ...
- 《CNCF × Alibaba云原生技术公开课》知识点自测(三):Kubernetes核心概念
(单选)1.Kubernetes的中文含义是___. A. 船 B.舵手 C.容器平台 D.起重机 (单选) 2.Kubectl是_____. A. 一个与Kubernetes集群进行交互.管 ...