我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mongodb关于用户权限的总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mongodb关于用户权限的总结

官方文档

https://docs.mongodb.com/v3.6/reference/built-in-roles/

https://docs.mongodb.com/v3.6/reference/method/db.auth/


总结

1、mongodb启动的时候加了--auth参数,则mongo命令连接到mongodb数据库后,执行show dbs这样的操作都会报错,需要执行db.auth("user","PWD")验证用户密码正确后,才能执行操作,且该user有什么权限就只能执行什么操作

2、授权操作可以在创建用户db.createUser的时候授权,也可以使用db.grantRolesToUser对已存在用户授权

3、mongodb的用户是放在一个个的数据库里面,比如db.system.users.find()显示_id为db1.user1表示在db1库中创建了一个用户user1,_id为db2.user1表示在db2库中创建了一个用户user1,和mysql用户模式user@host有点类似

4、root、readWriteAnyDatabase等角色的用户必须绑定admin库,不是说root角色的用户只能在admin库中创建,如下在test1库中建立用户名为root的用户,拥有root角色绑定了admin库,以后在test1库中执行auth正常后,可以执行任何操作。当然这个test1库中建立的root用户在admin库中执行auth会报错Error: Authentication failed,因为这个用户并不是admin库中的用户

>use test1
>db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin" }]})

5、mongodb中admin数据库是一个特别的数据库,一些角色只能在admin库中用,但是不代表admin库中的用户就拥有所有权限,如下在admin库中建立一个用户admin_user,这个用户只在admin库中有读权限,无法读其他数据库。

>use admin
>db.createUser({user:"admin_user",pwd:"123456",roles:["read"]})

6、db.auth("user","PWD")验证时,这个用户user必须存在当前数据库下,如果当前数据库下不存在这样用户则会报错。不能说具有root角色的用户可以在任何数据库中执行db.auth验证,只能说具有root角色的用户1在这个用户1指定的数据库中执行db.auth验证后,可以访问其他所有数据库

7、异机使用mongo命令连接mongodb数据库服务器的数据库时,必须指定该数据库存在的用户名和密码。如下192.168.0.10/test1库存在一个root超级管理员角色的用户root密码是123456,在test1库中执行db.auth("root","123456")后是可以访问所有数据库的,但是192.168.0.10/test123库不存在这样的用户。则前一条语句可以正常连接,后一条语句报错Error: Authentication failed无法连接。

mongo 192.168.0.10/test1 -u root -p "123456"   --正常,可以连接
mongo 192.168.0.10/test123 -u root -p "123456"  --报错,认证失败,无法连接

8、mongodb查看当前用户使用命令db.runCommand({connectionStatus:1}),就像oracle执行show users可以显示当前会话的用户




创建用户的时候授权db.createUser

>use test1
>db.createUser({user:"a1",pwd:"123456",roles:[{role:"clusterAdmin",db:"admin" },{role:"readAnyDatabase",db:"admin" },{role:"readWrite",db:"test"},"readWrite"]})

在test1这个数据库中创建了一个用户a1,这个用户拥有集群管理权限、查询任何数据库的权限、读写test数据库权限、读写test1数据库的权限,最后一个readwrite没有标明数据库表示在本地数据库的权限即在test1这个数据库的权限

这个用户a1,show users时只能在test1这个数据库看到,在admin这个数据库执行show users看不这个用户a1,因为这个用户不是admin下面的用户


readAnyDatabase角色必须绑定admin库,否则报错

>db.createUser({user:"a2",pwd:"123456",roles:[{role:"readAnyDatabase",db:"test" }]})

报错[thread1] Error: couldn't add user: No role named readAnyDatabase@test

readAnyDatabase只在admin中可用,把db:"test"改成db:"admin"即可


授予权限db.grantRolesToUser

>use test1
>db.grantRolesToUser("a1",[{role:"readWrite",db:"test2"}])

对数据库test1中的a1用户授予test2数据库的读写权限


取消权限db.revokeRolesFromUser

>use test1
>db.revokeRolesFromUser("a1",[{role:"readWrite",db:"test2"}])

对数据库test1中的a1用户取消test2数据库的读写权限


查询用户的三种方法

>show users --只能查看当前数据库下的用户
>use admin
>db.system.users.find() --必须进入admin数据库执行,能查询所有数据库下的所有用户
>db.system.users.find().pretty() --必须进入admin数据库执行,能查询所有数据库下的所有用户,结果显示界面比db.system.users.find()友好

如果不是进入admin数据库而是进入其他数据库比如A执行上面两个,没有返回结果,就算这个数据库A下有用户。


删除用户

>db.dropAllUsers();--删除当前库下面的所有用户,其他库的用户不受影响
>db.dropUser('a3');--删除当前库下面的a3用户


验证用户

>use test1
>db.auth("a1","123456")

对数据库test1中的a1用户进行验证,首先在test1库中,a1用户必须存在,其次a1用户的密码必须是123456,才能验证成功

结果返回1表示成功


mongodb启动时没有用--auth参数,mongo命令连接后也可以执行db.auth

use db
db.createUser({user:"admin2",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
db.auth("admin2","admin2")--报错Error: Authentication failed
db.auth("admin2","123456")


角色列表

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户拥有指定数据库的的所有权限,如数据库或集合或索引的创建、删除,查看

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户及角色

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mongodb关于用户权限的总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux用户组以及权限总结

用户组 在linux 中每个用户必须属于一个组,而Linux下有三种组的概念,如下:文件所拥有者用户所在组其他组文件所有者: 就是文件的创造者,谁创建的文件,谁就是文件的所有者。 用户所在组: 当Linux当前用户创建了一个文件后,则这
2022-06-04

MySQL查询用户权限的方法总结

介绍两种查看MySQL用户权限的两种方法 1、 使用MySQL grants命令mysql> show grants for username@localhost;+-------------------------------------
2022-05-27

linux给用户添加root权限方法总结

1、添加用户,首先用adduser命令添加一个普通用户,命令如下:#adduser tommy //添加一个名为tommy的用户 #passwd tommy //修改密码 Changing password for user tommy.
2022-06-04

一些Linux Shell中的权限相关知识总结

一个文件一经创建,就具有三种访问方式: 1) 读,可以显示该文件的内容。 2) 写,可以编辑或删除它。 3) 执行,如果该文件是一个s h e l l脚本或程序。 按照所针对的用户,文件的权限可分为三类: 1) 文件属主,创建该文件的用户。
2022-06-04

关于Linux的curl指令使用总结

目录Linujavascriptx的curl指令使用curl指令发送GET请求curl指令发送POST请求curl命令解读总结linux的curl指令使用 curl指令发送GET请求 格式如下: c编程客栈url -H [header参数]
2023-04-03

MongoDB的权限管理与用户认证怎么实现

MongoDB的权限管理和用户认证是通过创建用户和设置角色来实现的。下面是MongoDB权限管理和用户认证的步骤:创建管理员用户:首先,在MongoDB中创建一个管理员用户,用于管理数据库的用户和角色。创建普通用户:使用管理员用户登录Mon
MongoDB的权限管理与用户认证怎么实现
2024-05-07

Discuz用户权限设置指南:掌握权限管理的关键技巧

Discuz用户权限设置指南随着互联网的快速发展,在线社区已经成为人们交流、分享信息的重要平台。而Discuz作为一款知名的论坛系统,在其权限管理方面拥有非常丰富的功能,包括用户权限设置、版块权限控制等,可以帮助管理员更好地管理论坛,保障
Discuz用户权限设置指南:掌握权限管理的关键技巧
2024-03-10

关于Android8 获取应用容量的问题(权限获取)

在Android 8.0以后,google出于安全的考虑,废除了以前的方法,但是为我们提供了新的API,我们可以使用StorageStatsManager 类来获取应用大小、用户数据和缓存,从而得到应用的总大小。但是在使用StorageSt
2022-06-06

编程热搜

目录