当前位置: 首页 > article >正文

MongoDB 用户管理

概述

MongoDB安装完成后,数据库 admin 中没有任何用户账户。此时,MongoDB 向从本地主机发起的连接提供完整的数据库管理权限。因此配置 MongoDB 新实例时,首先需要创建用户管理员账户和数据库管理员账户:

  • 用户管理员账户可在 admin 和其他数据库中创建用户账户。
  • 数据库管理员账户,用于管理数据库、集群、复制和 MongoDB 其他方面的超级用户。

用户管理员账户和数据库管理员账户都是在数据库 admin 中创建的。在 MongoDB 服务器中启用身份验证后,要以用户管理员或数据库管理员的身份连接到服务器,必须向 admin 数据库验证身份,您还需在每个数据库中创建用户账户,让这些用户能够访问该数据库。

MongoDB中的用户角色: 

  • 数据库用户角色:read、readWrite;  
  • 数据库管理角色:dbAdmin、dbOwner、userAdmin;  
  • 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;  
  • 备份恢复角色:backup、restore;  
  • 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase  
  • 超级用户角色:root
  • 内部角色:__system

一些角色的功能说明

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

创建用户

注意:用户只能在数据库里面创建,我这里说的是你需要 use 一个数据出来之后再创建

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

启用认证

修改/etc/mongod.conf

security: 
  authorization: enabled

重启mongo后,需要验证

use admin;
db.auth("admin","admin")

也可以通过如下方式直接验证:

mongo -uadmin -padmin --authenticationDatabase admin

创建数据库管理员账户

db.createUser({
  user: "dbadmin",
  pwd: "dbadmin",
  roles: ["readWriteAnyDatabase","dbAdminAnyDatabase","clusterAdmin"]
})

readWriteAnyDatabase:授予该权限的用户只能被创建在admin数据库中,该权限赋予用户所有数据库的读写权限;  

dbAdminAnyDatabase:授予该权限的用户只能被创建在admin数据库中,该权限赋予用户所有数据库的dbAdmin权限;

clusterAdmin:授予该权限的用户只能被创建在admin数据库中,该权限赋予用户所有分片和复制集相关函数的管理权限; 

创建超级管理员账户

db.createUser({
  user: "dbadmin",
  pwd: "dbadmin",
  roles: ["root"]
})

root:授予该权限的用户只能被创建在admin数据库中。超级账号,超级权限; 

创建普通用户

db.createUser({
    user: "bernie",
    pwd: "bernie",
    roles: [{role: "readWrite",db: "test"}]
})

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

查看用户

show users;

查看指定用户

adb> db.runCommand({usersInfo:'bernie'})
{
  users: [
    {
      _id: 'adb.bernie',
      userId: UUID('bc118876-f261-4330-9273-710d2b7da1ca'),
      user: 'bernie',
      db: 'adb',
      roles: [ { role: 'readWrite', db: 'test' } ],
      mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
    }
  ],
  ok: 1
}

删除用户

db.dropUser("bernie")

修改用户信息

db.changeUserPassword("username", "xxx")
db.runCommand(
    {
        updateUser:"username",
        pwd:"xxx",
        customData:{title:"xxx"}
    }
)

修改用户权限

// 为用户natasha追加权限
db.grantRolesToUser("zhangsan",[{role: "readWrite", db: "saturn"}])  
// 替换原有的权限
db.updateUser("zhangsan",{roles: [{role: "readWrite",db: "saturn"},{role: "readWrite",db: "runoob"}]}) 
// 删除指定权限
db.revokeRolesFromUser("zhangsan",[{role: "readWrite", db: "saturn"}])


http://www.kler.cn/news/327694.html

相关文章:

  • docker 部署minio
  • Webpack 打包后文件过大,如何优化?
  • Maven超详细教程(三):Maven依赖查找顺序
  • PHP中的时间和日期详解
  • 无人机之数据提取篇
  • 性能优化-数据库分区技术深入解析
  • Java爬虫抓取数据的艺术
  • 56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版
  • 【JavaEE】——多线程常用类
  • spring boot集成日志
  • Hadoop集群的高可用(HA):NameNode和resourcemanager高可用的搭建
  • tauri中加载本地文件图片或者下载网络文件图片后存储到本地,然后通过前端页面展示
  • Trilium Notes笔记本地化部署与简单使用指南打造个人知识库
  • 数据结构和算法基础(一)
  • 探索Cherry键盘的FN+F9游戏模式与Ctrl+Fn功能
  • ffmpeg 结合 opencv 显示ps流文件
  • 深入计算机语言之C++:C到C++的过度
  • set和map结构的使用
  • Spring Boot技术在足球青训管理中的实践与挑战
  • STM32的DMA技术介绍
  • failed to load steamui.dll的多种处理方法,steamui.dll的作用
  • 论文阅读 | HiDDeN网络架构
  • 【规控+slam】探索建图方案及代码分享
  • 基于Springboot+Vue的农场投入品运营线上管理系统 (含源码数据库)
  • Python学习(3):画散点图和箱线图
  • 助农小程序|助农扶贫系统|基于java的助农扶贫系统小程序设计与实现(源码+数据库+文档)
  • 大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
  • 2024年7月大众点评宁波美食店铺基础信息
  • Oracle控制文件全部丢失如何使用RMAN智能恢复?
  • uniapp 通过标签生成海报