如何管理MongoDB的用户和权限
管理用户的创建及使用
创建用户的函数是db.createUser({...}),创建用户时通常需要为该用户添加权限,如read、readWrite权限。
可添加的权限以及说明:
| 权限 | 作用 |
|---|---|
| read | 允许用户读取指定数据库。 |
| readWrite | 允许用户读写指定数据库。 |
| dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile。 |
| userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户。 |
| clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 |
| readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限。 |
| readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限。 |
| userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。 |
| dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 |
| root | 只在admin数据库中可用。超级账号,超级权限。 |
进入到MongoDB命令行,并切换到admin数据库:
> use admin
switched to db admin
为某用户添加userAdminAnyDatabase权限:
db.createUser({"user": "[username]", "pwd": "[password]", "roles": [{"role": "userAdminAnyDatabase", "db": "admin"}]})
提示Successfully字样的信息,即创建用户成功:
Successfully added user: {
......
}
在重启MongoDB服务之前,需在配置文件末尾处添加auth = true,之后必须先进行用户权限认证才可操作数据库:
# 权限认证
auth = true
进入到MongoDB命令行(会话)中,切换admin数据库,并进行权限认证:
> use admin
switched to db admin
> db.auth("[username]", "[password]")
1
1代表用户权限认证成功,0代表用户权限认证失败。
普通用户的创建及使用
普通用户除了无法使用clusterAdmin、readAnyDatabase、readWriteAnyDatabase等权限外,其他权限都可使用。
每一个数据库都有自己的用户组,用户组中有多个用户,每一个用户的权限可以拥有多个。
[root@VM-0-6-centos mongodb-4.4.6]# ./bin/mongo
......
> db.auth("[username]", "[password]")
Error: Authentication failed.
0
如果没有切换指定的数据库,直接进行用户权限认证,会提示认证失败的消息。只有admin数据库的用户才有权限添加普通用户。
> use admin
switched to db admin
> db.auth("[username]", "[password]")
1
为training数据库添加一个普通用户training:
> use training
switched to db training
> db.createUser( { user: "training", pwd: "training", roles: [ { role: "readWrite", db: "training" } ] } )
Successfully added user: {
......
}
提示:如果当前会话中已经认证了A数据库的用户,再切换到B数据库进行权限认证后,可能会提示“logical sessions can't have multiple authenticated users”错误。因为一次会话不能认证多个用户。
更新用户权限
db.updateUser("[username]", {...})函数可以修改用户的权限以及其他信息。
更新权限之前,需要切换到被更新用户所在的数据库,更新操作需要当前会话中认证过的用户具有userAdmin或userAdminAnyDatabase或root角色的用户执行。
切换到admin数据库,修改其中一个用户的用户权限:
db.updateUser(
"[username]",
{
"roles": [
{
"role": "userAdminAnyDatabase",
"db": "admin"
},
{
"role": "readWriteAnyDatabase",
"db": "admin"
},
{
"role": "dbAdminAnyDatabase",
"db": "admin"
}
]
}
)
修改成功之后,显示所有用户,查看是否更改成功:
> show users
{
"user" : "[username]",
"db" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
}
]
}
更改用户密码
db.updateUser("[username]", {"pwd": "[password]"})或db.changeUserPassword("[username]", "[password]")可以更改用户的密码。
更新密码之前,需要切换到被更新用户所在的数据库,更新操作需要当前会话中认证过的用户具有userAdmin或userAdminAnyDatabase或root角色的用户执行。
删除用户
db.dropUser("[username]")可以删除用户。
删除用户之前,需要切换到被删除用户所在的数据库,更新操作需要当前会话中认证过的用户具有userAdmin或userAdminAnyDatabase或root角色的用户执行。
如何管理MongoDB的用户和权限的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- MongoDB系列---用户及权限管理02
MongoDB-——Privilege 学习大纲: 1.用户权限管理 2.用户操作 知识回顾: 本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过 ...
- mongoDB之用户及权限设置
之前用MongoDB没有设置用户和权限,一直都是本机应用程序连接MongoDB.在服务器上部署后对外没有开数据库连接端口,本机应用程序连接再开放应用程序端口供外部访问. 我部署的环境是ubuntu 1 ...
- mysql用户管理(新增用户及权限管理)
一.登录: # mysql –u root –p 回车输入密码 退出: #exit; 二.修改密码: 格式:mysqladmin –u 用户名 –p旧密码 password 新密码 # ...
- mongodb 设置用户密码权限
1 设置管理员账户 use admindb.createUser({ user: "useradmin", pwd: "adminpassword", role ...
- MongoDB(四)mongodb设置用户访问权限
我们知道MySQL在安装的时候需要我们设置一个数据库默认的用户名和密码,mongodb也不例外,不过mongodb是默认的没有设置访问限制的,不需要输入用户名和密码都可以访问的,但是这样会十分的不安全 ...
- mongodb创建用户(转发)
参考文档: https://www.cnblogs.com/itxiongwei/p/5520863.html MongoDB 缺省是没有设置鉴权的,业界大部分使用 MongoDB 的项目也没有设置访 ...
- mongodb之用户/认证/角色/权限管理
前言 用户权限管理很重要,只给需要的权限,防止应用系统漏洞导致脱库 认证和授权 Authentication 认证识别,解决我是谁 Authorization 操作授权,我能做什么 认证机制 MONG ...
- 管理 MongoDB 用户和权限
创建用户 创建用户的函数是:db.createUser(). 创建用户时,需要为该用户添加权限.可添加的权限以及说明: 权限 作用 read 允许用户读取指定数据库. readWrite 允许用户读写 ...
随机推荐
- 003.Ansible配置文件管理
一 配置文件的优先级 ansible的配置文件名为ansible.cfg,它一般会存在于四个地方: ANSIBLE_CONFIG:首先,Ansible命令会检查该环境变量,及这个环境变量将指向的配置文 ...
- otter源码解读(一)
概览 lib存放的是项目依赖包,由于项目用到的包比较杂,可能有的包已经不在maven仓库中提供了,所以提供了一个lib包,执行里面的install命令,就可以把包安装到本地maven仓库. manag ...
- Mybatis 逆向工程使用(Day_17)
有三个方法可以解决所有的问题:接受,改变,离开.不能接受那就改变,不能改变,那就离开. [何为逆向工程?] 众 所 周 知 ,正向工程就是通过JAVA类的设置来生成对应的数据库表. MyBatis逆向 ...
- java 文件上传下载
翻新十年前的老项目,文件上传改为调用接口方式,记录一下子~~~ java后台代码: //取配置文件中的上传目录 @Value("${uploadPath}") String pat ...
- KVO后[obj class]与object_getClass(id obj)的结果竟会不一致?
说说背景,研究下面的代码时,KVO后[obj class]与object_getClass(id obj)的结果竟会不一致? PersonModel *aPersonModel = [[PersonM ...
- [ Java面试题 ]Java 开发岗面试知识点解析
如背景中介绍,作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向. 在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Jav ...
- [leetcode] 45. 跳跃游戏 II(Java)(动态规划)
45. 跳跃游戏 II 动态规划 此题可以倒着想. 看示例: [2,3,1,1,4] 我们从后往前推,对于第4个数1,跳一次 对于第3个数1,显然只能跳到第4个数上,那么从第3个数开始跳到最后需要两次 ...
- GO语言复合类型05---递归
package main import ( "fmt" "time" ) /* ·递归就是自己调自己 ·递归一定要有终止条件(否则就是无限死循环) */ /*使 ...
- C#-防止用户输入具有风险的敏感字符
最近有涉及到要防止用户在网页文本框中输入具有风险的敏感字符所以特地编写了一套针对用户输入的字符进行安全过滤的一个方法,在后台接收到用户输入的字符后调用执行该方法即可完成过滤操作,主要使用正则来匹配并替 ...
- JUC 并发编程--02,生产者和消费者 synchronized的写法 , juc的写法. Condition的用法
synchronized的写法 class PCdemo{ public static void main(String[] args) { //多个线程操作同一资源 Data data = new ...