MongoDB用户及角色管理

目录

前言

一、用户管理

用户管理和身份验证方法

列出用户

创建用户

删除用户

修改用户密码

给用户授予角色

回收用户角色

二、形形色色的内置角色

客户端角色

 数据库管理角色

集群管理角色

备份和还原角色

所有数据库角色 

超级用户角色

内部角色


前言

本篇文章主要介绍关于MongoDB的用户管理及各种内置角色。

一、用户管理

大知识:

  • 用户和密码不要使用以下字符:: / ? # [ ] @,这些都是保留字。
  • 用户的姓名和身份验证数据库是该用户的唯一标识符。
  • MongoDB将所有用户信息(包括name、password和用户的authentication database)存储在admin数据库中的system.users集合中。
  • 在分片集群中,MongoDB将用户配置数据存储在config servers的admin数据库中。
  • 默认情况下,MongoDB不启用访问控制。可以使用命令行参数--auth或在配置文件中指定security.authorization来启用用户认证。

用户管理和身份验证方法

方法

作用

db.auth()

对数据库进行用户身份验证。

db.changeUserPassword()

更改现有用户的密码。

db.createUser()

创建一个新用户。

db.dropUser()

删除单个用户。

db.dropAllUsers()

删除与数据库关联的所有用户。

db.getUser()

返回有关指定用户的信息。

db.getUsers()

返回与数据库关联的所有用户的信息。

db.grantRolesToUser()

将角色及其特权授予用户。

db.removeUser()

不建议使用。从数据库中删除用户。

db.revokeRolesFromUser()

从用户中删除角色。

db.updateUser()

更新用户数据。

passwordPrompt()

提示密码,作为直接在各种mongosh用户身份验证/管理方法中指定密码的替代方案。

列出用户

列出所有用户

use admin
db.system.users.find().pretty()

查看用户信息

use accounts
db.getUser("appClient")

返回数据库中所有的用户信息

db.getUsers()

创建用户

# 示例1
use products
db.createUser( { user: "accountAdmin01",
                 pwd: passwordPrompt(),  // 或使用明文密码
                 customData: { employeeId: 12345 },
                 roles: [ { role: "clusterAdmin", db: "admin" },
                          { role: "readAnyDatabase", db: "admin" },
                          "readWrite"] },
               )
# 示例2
use admin
db.createUser(
   {
     user: "reportsUser",
     pwd: passwordPrompt(),  // 或使用明文密码
     roles: [ ]
   }
)

# 示例3
use admin
db.createUser(
   {
     user: "restricted",
     pwd: passwordPrompt(),      // 或使用明文密码
     roles: [ { role: "readWrite", db: "reporting" } ],
     authenticationRestrictions: [ {
        clientSource: ["192.0.2.0"],
        serverAddress: ["198.51.100.0"]
     } ]
   }
)

删除用户

use products
db.dropUser("reportUser1")

修改用户密码

# 提示密码输入
use products
db.changeUserPassword("accountUser", passwordPrompt())
# 明文密码
use products
db.changeUserPassword("accountUser", "123")

给用户授予角色

use products
db.grantRolesToUser(
   "accountUser01",
   [ "readWrite" , { role: "read", db: "stock" } ]
)

回收用户角色

use products
db.revokeRolesFromUser( "accountUser01",
                        [ { role: "read", db: "stock" }, "readWrite" ]
                      )

二、形形色色的内置角色

MongoDB使用基于角色的访问控制(RBAC)来管理对MongoDB系统的访问。用户被授予一个或多个角色,这些角色决定了用户对数据库资源和操作的访问。

客户端角色

角色

角色说明

可进行的操作

read

提供读取所有非系统集合和system.js集合上的数据的功能

changeStream;collStats;dbHash;dbStats;find;killCursors;listIndexes;listCollections

readWrite 

提供read角色的所有特权,以及修改所有非系统集合和system.js集合上的数据的能力

collStats;

convertToCapped;createCollection;dbHash;dbStats;dropCollection;createIndex;dropIndex;find;insert;killCursors;listIndexes;listCollection;remove;renameCollectionSameDB;update

 数据库管理角色

角色

权限

dbAdmin

提供执行管理任务的能力,例如与架构相关的任务,索引编制和收集统计信息。该角色不授予用户和角色管理特权

dbOwner

数据库所有者可以对数据库执行任何管理操作。这个角色组合由授予的权限readWrite, dbAdmin和userAdmin角色

userAdmin

提供在当前数据库上创建和修改角色和用户的功能。由于该userAdmin角色允许用户向任何用户(包括他们自己)授予任何特权,因此该角色还间接提供了 对数据库或 集群(如果作用域为数据库)的超级用户访问权限admin。

集群管理角色

admin数据库包含以下角色,用于管理整个系统,而不仅仅是管理单个数据库。这些角色包括但不限于复制集和分片集群管理功能。

角色

权限

clusterAdmin

提供最大的集群管理访问。这个角色组合了clusterManager、clusterMonitor和hostManager角色授予的特权。此外,该角色还提供了dropDatabase操作。。

clusterManager

提供对集群的管理和监视操作。具有此角色的用户可以访问config和local 数据库,分别用于分片和复制。

clusterMonitor

提供对监视工具的只读访问。例如:例如MongoDB Cloud Manager 和Ops Manager监视代理

hostManager

提供监视和管理服务器的功能

备份和还原角色

admin数据库包括以下角色,用于备份和还原数据

角色

权限

backup

提供备份数据所需的最小特权。该角色提供了足够的特权,可以使用MongoDB Cloud Manager备份代理, Ops Manager备份代理,或用于备份 mongodump整个mongod实例。

restore

从备份还原数据

所有数据库角色 

角色

权限

readAnyDatabase

除local 和config数据库外的所有数据库上提供与read相同的只读特权。该角色还在整个集群上提供listDatabases操作。

readWriteAnyDatabase

除local 和config数据库外的所有数据库上提供与读写相同的特权。该角色还在整个集群上提供listDatabases操作

userAdminAnyDatabase

提供与userAdmin一样的用户管理操作权限,对所有数据库(除了local和config)进行访问

dbAdminAnyDatabase

除local 和config数据库外的所有数据库上提供与dbAdmin相同的特权。该角色还在整个集群上提供listDatabases操作

超级用户角色

角色

权限

root

提供对所有资源的完整特权

内部角色

角色

权限

__system

MongoDB将此角色分配给代表集群成员的用户对象,例如副本集成员和mongos实例。该角色授权其持有者对数据库中的任何对象采取任何措施

基本MongoDB内置的各种角色已经能够覆盖我们的大部分日常权限需求了,如果还需要自己定制我们自己的角色,可以使用db.createRole()方法来创建。

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB 中,可以通过以下方式进行用户管理: 1. 创建用户: 使用 `db.createUser()` 方法创建新用户。例如,创建一个用户名为 "admin",密码为 "password",角色为 "userAdminAnyDatabase" 的用户可以执行以下命令: ``` db.createUser( { user: "admin", pwd: "password", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) ``` 2. 删除用户: 使用 `db.dropUser()` 方法删除现有用户。例如,删除名为 "admin" 的用户可以执行以下命令: ``` db.dropUser("admin") ``` 3. 修改用户密码: 使用 `db.changeUserPassword()` 方法修改现有用户的密码。例如,将名为 "admin" 的用户的密码修改为 "newpassword" 可以执行以下命令: ``` db.changeUserPassword("admin", "newpassword") ``` 4. 切换到其他数据库管理用户: 使用 `use <db>` 命令切换到其他数据库,然后使用上述命令进行用户管理。 5. 查看当前数据库用户: 使用 `db.getUsers()` 方法查看当前数据库用户列表。例如,查看当前数据库(如 "admin")的用户列表可以执行以下命令: ``` db.getUsers() ``` 6. 查看指定数据库用户: 使用 `db.getSiblingDB(<db>).getUsers()` 方法查看指定数据库用户列表。例如,查看数据库 "mydb" 的用户列表可以执行以下命令: ``` db.getSiblingDB("mydb").getUsers() ``` 7. 用户认证: 使用 `db.auth()` 方法对用户进行身份验证。例如,使用名为 "admin" 的用户和密码 "password" 进行身份验证可以执行以下命令: ``` db.auth("admin", "password") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值