首页 > 数据库 >MongoDB用户权限管理

MongoDB用户权限管理

时间:2022-09-23 13:57:22浏览次数:51  
标签:training admin MongoDB 数据库 db 用户 权限

管理用户创建及使用

利用createUser函数创建用户:

db.createUser({
	user: "username",
	pwd: "password",
	roles: [
		{
			role: "authorityName",
			db: "admin"
		}
	]
})

createUser函数中可使用的权限有如下几个:

权限作用
read 允许用户读取指定数据库。
readWrite 允许用户读写指定数据库。
dbAdmin 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile。
userAdmin 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户。
clusterAdmin 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读权限。
readWriteAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读写权限。
userAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。
dbAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root 只在admin数据库中可用。超级账号,超级权限。

首先确保MongoDB服务已经启动,进入MongoDB的命令行,并且切换到admin数据库:

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> use admin
switched to db admin

添加权限为userAdminAnyDatabase的权限:

db.createUser({
	user: "testUser",
	pwd: "testPwd",
	roles: [
		{
			role: "userAdminAnyDatabase",
			db: "admin"
		}
	]
})

当出现如下提示信息时,代表创建成功:

Successfully added user: {
	"user" : "testUser",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		}
	]
}

然后重启MongoDB服务,在重启MongoDB服务时,可以在配置文件末尾处添加auth`参数,即以后的使用必须使用用户名和密码认证:

...其他配置信息省略,在配置文件末尾处添加:
# 必须先进行权限认证
auth = true

然后进入到MongoDB命令行(会话)中:

> use admin
switched to db admin
> db.auth("testUser", "testPwd")
1

输出1代表认证成功,0代表认证失败。

普通用户创建及使用

普通用户是指可在指定的数据库中进行操作的用户。

[root@VM-0-6-centos mongodb-4.4.6]# ./bin/mongo
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("3bef2e39-9e2a-4f4b-8d42-9b848f072872") }
MongoDB server version: 4.4.6
> db.auth("管理用户账号", "管理用户密码")
Error: Authentication failed.
0

进入MongoDB命令行后,如果没有切换指定数据库,而直接进行权限认证,结果会提示认证失败的消息。每一个数据库都有用户组,用户组中有多个用户,每一个用户的权限都可以是不一样的。

如果要添加普通用户,则需先认证admin数据库的用户:

> use admin
switched to db admin
> db.auth("管理用户账号", "管理用户密码")
1

对指定的数据库中添加一个普通用户:

> use training
switched to db training
> db.createUser({user:"training",pwd:"training",roles:[{role:"readWrite",db:"training"}]})
Successfully added user: {
	"user" : "training",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "training"
		}
	]
}

如果当次会话中只认证了training数据库的用户,则无法使用show users指令:

> use training
switched to db training
> db.auth("training", "training")
1
> show users
uncaught exception: Error: not authorized on training to execute command { usersInfo: 1.0, lsid: { id: UUID("69aeee09-7b51-47fc-a130-779b26626bd2") }, $db: "training" }

因此,要先对admin数据库进行认证才可以使用show users指令。这也证明,没有对admin数据库进行认证,而后创建指定的数据库的用户是不可能的!

提示:如果当前会话中已经认证了除admin数据库之外的数据库的用户,再切换到admin数据库进行认证,使用管理用户可使用的指令时,会提示“logical sessions can't have multiple authenticated users”错误。因为一次会话连接不能认证多个用户的权限,所以需要退出当前会话,重新进入MongoDB命令行(会话),再对admin数据库进行认证。

标签:training,admin,MongoDB,数据库,db,用户,权限
From: https://www.cnblogs.com/gaoyanbing/p/16722446.html

相关文章

  • CAS5.3自定义加密方法获取用户名
    CAS5自定义加密方法获取用户名项目用到CAS单点登录,根据用户名自定义加密方式1.添加pom.xml依赖<dependency><groupId>javax.servlet</......
  • springboot用户上传图片
    前端图片上传.html<htmlxmlns:th="http://www.thymeleaf.org"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"><title>图片上......
  • SpringBoot中集成MobileIMSDK并实现记录所有用户以实现消息群发
    场景若依(基于SpringBoot的权限管理系统)集成MobileIMSDK实现IM服务端的搭建:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/111032404在上面将MobileIMSD......
  • sql练习-- 计算用户的平均次日留存率
    描述题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。 示例:question_practice_detailiddevice_idquest_idresultda......
  • sql练习--计算用户8月每天的练题数量
    描述题目:现在运营想要计算出2021年8月每天用户练习题目的数量,请取出相应数据。 示例:question_practice_detailiddevice_idquestion_idresultdate121381......
  • mysql练习--计算25岁以上和以下的用户数量
    描述题目:现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量本题注意:age为null也记为25岁以下 示例:user_profileiddevic......
  • sql练习--查看不同年龄段的用户明细
    描述题目:现在运营想要将用户划分为20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况,请取出相应数据。(注:若年龄为空请返回其他。)   示例:user......
  • 对于Java中权限修饰符的理解
    老是把Java中权限修饰符给忘记,写一个博客加深印象吧权限分为四个作用域:当前类,同一个包,其他包的子类,其他包的类。首先要知道包的概念,Java中一个包是指一个package下的所......
  • Spring Boot 切面AOP实现权限校验(实例演示与注解全解)
    目录理解AOP什么是AOPAOP体系与概念AOP实例第一个实例第二个实例AOP相关注解@Pointcut@Around@Before@After@AfterReturning@AfterThrowing1......
  • flask MongoDB 很好例子
    逻辑图代码#fromcollectionsimportnamedtuplefromflaskimportFlask,make_response,jsonify,requestfromflask_mongoengineimportMongoEngine#fromapi_co......