理解admin数据库

  安装MongoDB时,会自动创建admin数据库,这是一个特殊的库。有些用户账户角色赋予用户操作多个数据库的权限,而这些用户只能在admin数据库中创建。要创建有权操作所有数据库的超级用户,必须将该用户加入到admin数据库中。检查凭证时,MongoDB将在指定数据库和admin数据库中检查用户账户。

管理用户账户

  在MongoDB shell中,可添加、删除和配置用户。

创建用户账户

  数据库管理的一个重要部分是创建能够管理用户和数据库以及读写数据库的用户账户。

  创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误。

db.createUser(user, writeConcern) 

  user: 这个文档创建关于用户的身份认证和访问信息。

  writeConcern: 这个文档描述保证MongoDB提供写操作的成功报告。

  user文档,定义了用户的以下形式

    { user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
]
}

  user文档字段介绍

user

独一无二的用户名

pwd  用户的密码
cusomData 为任意内容,例如可以为用户全名介绍
roles 指定用户的角色,可以用一个空数组给用户设定空角色

   在roles字段,可以指定内置角色和用户定义的角色。

  内置角色(Built-In Roles)

  内置角色是MongoDB预定义的角色,操作的资源是在DB级别上。MongoDB拥有一个SuperUser的角色:root,拥有最大权限,能够执行任意操作。

  数据库用户角色(Database User Roles):

  •   read:授予User用户只读权限
  • readWriter:授予User用户读写权限

  数据库管理角色(Database Administration Riles):

  •   dbAdmin:在当前DB中执行管理操作
  •   adOwner:在当前DB中执行任意操作
  •   userAdmin:在当前DB中管理用户

  集群管理角色(Cluster Administration Roles):

  •   clusterAdmin:授予管理集群的最高权限
  •   clusterManager:授予管理和监控集群的权限
  •   clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限
  •   hostManager:管理Server

  备份恢复角色(Backup and Restoration Roles):

  •   backup
  •   restore

  所有数据库角色(All-Database Roles):

  •   readAnyDatabase:授予在所有数据库上读取数据的权限
  •   readWriterAnyDatabase:授予在所有数据库上读取数据的权限
  •   userAdminAnyDatabase:授予在所有数据库上管理用户的权限
  •   dbAdminAnyDatabase:授予管理所有数据库的权限

  writeConcern文档

  •   w选项:允许的值分别是 1、0、大于1的值、"majority"、<tag set>;
  •   j选项:确保mongod实例写数据到磁盘上的journal(日志),这可以确保mongd以外关闭不会丢失数据。设置true启用。
  •   wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。

  实例

  在admin数据库中创建一个管理员用户。

use admin
db.createUser( { user: "testadmin",
pwd: "",
roles:[ "dbAdmin" ] } );

  如图表示添加成功。

列出用户

  在每个数据库中,用户账户都存储在集合db.system.users中。要获取用户列表,可以使用两种不同的方法。

  方法一:

    切换到要列出其用户账户的数据库,再执行命令show users。

 use admin
show users

  方法二:

    切换到要列出其用户账户的数据库,对集合db.system.users执行find等查询。db.system.users.find()返回一个游标对象,可以用它来访问User文档。

 var cur = db.system.users.find()
cur.count()
cur.toArray()

  如图不光可列出用户,还可调用 count() 方法显示出有几个用户。

删除用户

  要将用户从MongoDB数据库中删除,可使用方法 dropUser(<username>)。

  实例

  删除之前演示中在 admin 数据库中创建的 testadmin。

 use admin
db.dropUser("testAdmin")

配置访问控制

  MongoDB提供了数据库级身份验证和授权,这意味着用户账户存在与单个数据库中。为支持基本的身份验证,MongoDB在每个数据库中都将用户凭证存储在集合system.users中。

  MongoDB安装后,数据库admin中没有任何用户账户,此时MongoDB向从本地主机发起的连接提供全面的数据库管理权限。配置MongoDB时,首先需要创建用户管理员账户和数据库管理员账户。用户管理员账户可在admin和其他数据库中创建用户账户。数据库管理员账户可作为管理数据库、集群、复制和MongoDB其他方面的超级用户。

  注意:

    用户管理员账户和数据库管理员账户都是在admin数据库中创建的。

创建用户管理员账户

  用户管理员应只有创建用户账户的权限,而不能管理数据库或执行其他管理任务。

  用户管理员的角色应为 userAdminAnyDatabase,这可以让用户管理员能够新建用户账户,但不能对数据库执行其他操作。

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

启用身份验证

  创建用户管理员账户后,使用参数--auth重启MongoDB服务器,也可在配置文件中指定auth设置。

mongod -dbpath <mongo_data_location>/data/db -auth

  或配置文件

  配置完成后,再想从MongoDB shell访问MongoDB服务器管理用户时,必须向数据库验证身份,不然没有权限管理用户。

   可以执行下面的命令向admin数据库验证身份。

use admin
db.auth("userAdmin","123456")

  或在启动MongoDB shell 时使用选项 --username和--password 向数据库admin验证身份。

 mongo --username "userAdmin" --password ""

创建数据库管理员账户

  数据库管理员的角色应为 readWriteAnyDatabase、dbAdminAnyDatabase 和 clusterAdmin 。这让这名用户能够访问系统中所有数据库、创建新的数据库以及管理MongoDB集群和副本集。

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

注意:用户管理员没有权限通过MongoDB shell关闭mongod服务器,必须切换到数据库管理员账户才可关闭mongod服务器。

MongoDB学习(配置用户账户和访问控制)的更多相关文章

  1. MongoDB下配置用户权限

    MongoDB默认设置为无权限訪问限制 注:研究成果基于Windows平台 在部署mongodb成功后.进入控制台: 输入命令:mongod  use admin,你会发现该DB下包括了一个syste ...

  2. UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息

    应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...

  3. CentOS 7 用户账户配置

    说明: 1.这篇博文记录的是CentOS 7 用户账户的配置,包括添加用户.添加用户组.删除用户.删除用户组等.其中包括分析用户的配置文件.目录以及对安全的思考. 2.用户配置方面CentOS 7与以 ...

  4. window服务器上mongodb的安装与如何将mongodb设置为服务,为mongodb设置管理用户,mongodb连接字符串配置

    最近公司有一个项目模块让用nosql-mongodb替换了,故,对mongodb做了一点研究,然后分享一下! 1.首先说一下安装时的坑 下载mongodb,如果你从官网下载,将会是一件很慢的事情,在公 ...

  5. Mongodb学习笔记一(Mongodb环境配置)

    Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...

  6. MongoDB学习笔记——数据库安装及配置

    MongoDB数据库安装 MongoDB官方下载地址:https://www.mongodb.com/download-center 首先需要根据Windows版本选择正确的MongoDB版本进行安装 ...

  7. mongodb创建数据库和配置用户

    上一篇我们说了mongodb远程连接配置,今天给大家说下mongodb怎么创建数据库和配置用户,毕竟光有远程连接是不够的,我们还要上去操作和放数据的.   系统:centos 5.x   环境:mon ...

  8. ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(三)—用户账户及cookie配置

    修改用户账户及cookie配置 一.修改密码强度和用户邮箱验证规则: 打开Startup.cs,找到public void ConfigureServices(IServiceCollection s ...

  9. mongodb怎么创建数据库和配置用户

    mongodb怎么创建数据库和配置用户,远程连接是不够的,还要上去操作和放数据的. 系统:centos 5.x 环境:mongodb 1.安装mongodb 这步就不说了,大家自己去看Centos安装 ...

随机推荐

  1. jquery版 发同步请求 自定义头部信息 公共请求体

    //jquery版 发同步请求 function getData(url,param,fn){ var Authorization=localStorage.getItem("Authori ...

  2. clang如何获得程序控制流图

    在低版本的clag中,可以直接clang -cc1 -analyze -cfg-dump 1.c来获得程序控制流图,但较高版本后就不行了 另外clang -cc1默认仅限当前目录,所以会出现fata ...

  3. .Net 事件总线之Autofac解耦

    事件总线是通过一个中间服务,剥离了常规事件的发布与订阅(消费)强依赖关系的一种技术实现.事件总线的基础知识可参考圣杰的博客[事件总线知多少] 本片博客不再详细概述事件总线基础知识,核心点放置使用Aut ...

  4. SSM+Maven+MySQL实现简易的挂机修仙页游

    一段时间没有写过SSM的项目了,最近重新整合框架做了一个小Demo 学Java的萌新可以看一看:大佬呢,欢迎指出不足! 我一直钟爱挂机类游戏,同时也喜欢修仙和武侠小说,于是突发奇想,自己搞一个小游戏? ...

  5. 【swoole】使用swoole简单实现TCP服务

    上一篇写到了如何在windows系统上面利用docker快速搭建swoole开发环境,接下来体验下swoole的使用 使用swoole实现tcp服务 <?php $serv = new Swoo ...

  6. 【学习笔记Part 1 ● Linux】

    本章目标 Linux简介 Linux发展 Linux界面熟悉 Linux常用命令 Linux简介 经常看到的或者熟悉的操作系统: Windows操作系统:Window 10或者Window 7 Mac ...

  7. 如何通过免费开源的ERP Odoo打造企业全员营销整体解决方案

    应用场景的背景故事 在一些二级城市,往往线索的来源是通过企业当地口碑积累.熟人转介绍等线下的方式为主,利用互联网的模式往往很难奏效,企业面临的第一个问题就是如何把握线索真实的来源介绍的问题.在这个问题 ...

  8. 6.使用桌面版AI伴侣或手机版AI伴侣实时预览编程效果

    1.根据自己系统下载对应版本AI伴侣,最好解压到D盘根目录. 运行ailaunch.bat ,可以启动原本自带的2.46版AI伴侣.运行AI伴侣247.bat可以启动汉化2.47版的AI伴侣.并且默认 ...

  9. Api管家系列(一):初探

    前段时间发现一个很好用的API管理工具--API管家,用了一段时间,已经感觉离不开了,抱着分享使我快乐的想法,因为刚开始用的时候随便写过一篇简介,不是很详细,所以现在就重新写,把我这段时间使用的经验和 ...

  10. SVN使用规范

    1.提交之前先更新.当完成功能之后,首先检查自己修改了什么 ,然后通过编译并且自己测试之后,谨慎地提交,不可强行提交. 2.在更新时注意所更新文件的列表,如果提交过程中产生了更新,也需要重新编译并且完 ...