MongoDB 权限管理

打印 上一主题 下一主题

主题 649|帖子 649|积分 1947

前言

上一篇 《MongoDB 单机安装摆设》 文章中,为 MongoDB 设置了授权功能,当时只介绍了创建一个高权限账户,没有详细介绍 MongoDB 的权限相关的内容,本篇文章将详细 MongoDB 的权限控制。
1. 权限控制

MongoDB 权限控制是基于脚色分别的,脚色是一部分权限的组合。在创建用户时,需要指定用户所属的脚色,一个用户可拥有多种脚色,每个脚色又可以包含多种权限。MongoDB 提供了多种默认脚色,当然也支持用户自定义脚色。
1.1 MongoDB 默认脚色

刚才提到 MongoDB 可以自定义脚色,也为用户提供了部分默认脚色。关于默认脚色,不同的脚色范例,它的作用范围也不一样,例如 readWrite 脚色,它的作用范围就是一个特定的数据库。
1.1.1 读写脚色

读写权限的作用域是特定的数据库,默认脚色又 read 和 readWrite 两种:


  • read:表示用户针对数据库中所有非体系聚集具有 “读” 操作权限。
  • readWrite:表示用户针对数据中所有非体系聚集具有 “读/写” 操作权限。
授权案例,为 test 库创建一个 test_user 用户,具有只读权限。
  1. use test;
  2. db.createUser({user: "test_user", pwd: "1234", roles: [{role: "read", db: "test"}]});
复制代码
进行登岸测试。
  1. mongo -utest_user -p1234 --authenticationDatabase test
复制代码

1.1.2 管理脚色

MongoDB 提供以下默认的数据库管理脚色:


  • dbAdmin:该脚色可以管理数据库中的聚集与索引,具有创建和删除的权限,但不能为数据库创建新脚色和用户,也不能管理其他脚色。
  • userAdmin:该脚色可以管理数据库中的其他用户和脚色,可以进行授权或者采取权限。
  • dbOwner:该脚色可以管理数据库中的所有聚集和索引,也可以管理数据库中的用户和权限,相当于是 readWrite、dbAdmin、userAdmin 三种脚色的组合权限。
1.1.3 其他脚色

前面介绍的脚色,都作用于特定的数据库,接下来介绍的脚色,可以作用于所有的数据库(local 与 config 数据库除外)进行管理和操作。
针对所有数据库(可以理解为所有由用户创建的数据库)进行管理操作的权限如下:


  • readAnyDatabase:该脚色可以对所有数据库进行读操作,相当于是 read 脚色的全局范围脚色。
  • readWriteAnyDatabase:该脚色可以对所有数据库进行读写操作,相当于是 readWrite 脚色的全局范围脚色。
  • dbAdminAnyDatabase:该脚色可以管理所有数据库中的聚集和索引,相当于是 dbAdmin 脚色的全局范围脚色。
  • userAdminAnyDatabase:该脚色可以管理所有数据库中的脚色和用户的权限,相当于是 userAdmin 脚色的全局范围脚色。
授权案例,创建一个全局只读的脚色。
  1. use admin;
  2. db.createUser({user: "test_admin1", pwd: "1234", roles: [{role: "readAnyDatabase", db: "admin"}]});
复制代码
使用全局的脚色时 db 需要填写为 admin 负责会创建失败。
1.1.4 超等用户脚色

MongoDB 默认提供了一个 root 超等用户脚色,当为一个用户分配 root 脚色后,该用户将同时拥有刚才介绍的所有脚色的权限,别的还有 clussterAdmin、restore、backup 的脚色权限。
root 脚色,创建示例:
  1. use admin
  2. db.createUser({user: "root",pwd: "admin123",roles: [{role: "root", db: "admin"}]})
复制代码
1.2 用户管理

本末节介绍如何对 MongoDB 中的用户进行管理,例如创建、删除、修改暗码等。
1.2.1 查看用户

查看数据库中所有的用户,可以使用如下下令:
  1. db.getUsers();
复制代码
1.2.2 创建新用户

授权案例,为 test 库创建一个 test_user 用户,具有只读权限。
  1. use test;
  2. db.createUser({user: "test_user", pwd: "1234", roles: [{role: "read", db: "test"}]});
复制代码
1.2.3 调整脚色

通过实行如下下令,可以修改用户的脚色。
  1. db.grantRolesToUser()
复制代码
例如,将刚才创建的 test_user 只有 read 脚色,无法查看用户相关的信息:
  1. myReplSet:PRIMARY> db.getUsers();
  2. 2024-02-20T16:08:50.236+0800 E  QUERY [js] uncaught exception: Error: not authorized on test to execute command { usersInfo: 1.0, lsid: { id: UUID("3cd3d4c7-cc42-447d-b782-b2773b7193c2") }, $clusterTime: {
复制代码
使用高权限账户,为其添加一个 userAdmin 脚色:
  1. db.grantRolesToUser( "test_user", [{role: "userAdmin", db: "test"}])
复制代码
再次使用 test_user 查看用户相关信息,没有报错:
  1. >>> mongo -utest_user -p1234 --authenticationDatabase test
  2. MongoDB shell version v4.2.25myReplSet:PRIMARY> db.getUsers()[  {    "_id" : "test.test_admin",    "userId" : UUID("753e07d3-7f32-4f69-b53a-10a0d33d0d02"),    "user" : "test_admin",    "db" : "test",    "roles" : [      {        "role" : "dbAdmin",        "db" : "test"      }    ],    "mechanisms" : [      "SCRAM-SHA-1",      "SCRAM-SHA-256"    ]  }]
复制代码
1.2.4 删除用户

删除单个用户的语法如下:
  1. db.dropUser("username")
复制代码
删除一个 db 下,所有的用户:
  1. use test;
  2. db.dropAllUsers();
复制代码
1.2.4 修改暗码

例如,将 user123 用户暗码修改为 112233 的语法如下:
  1. db.updateUser("user123",
  2.   {
  3.     pwd: '112233'
  4.   }
  5. )
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表