MongoDB学习笔记—权限管理

1.MongoDB权限介绍

  a 上篇文章中,我们在Linux下配置了MongoDB环境并且将其设置为服务随机器启动而启动,那么接下来这篇文章我们就来简单说一下MongoDB下对登录用户权限的管理。
  b  MongoDB安装完成后,默认是不需要输入用户名密码即可登录的,但是往往数据库方面我们会处于安全性的考虑而设置用户名密码,本篇文章主要介绍了MongoDB添加管理员/普通用户的方法。
  c 在我们使用的关系型数据库中,一般都是含有权限控制的,也就是说配置什么用户访问什么数据库,什么数据表,什么用户可以对表进行增删改,什么用户可以对标进行读取等等都是可以配置,那么MongoDB作为一个非关系型数据库的典型,它其实也是可以配置的,而掌握MongoDB的权限我们只需要简单理解下面几点,后面按照下面的几点去配置即可(网上学习所得到的总结)。
    c.1 MongoDB是没有默认管理员账号的,所以要先添加管理员账号,在开启权限认证。
    c.2 切换到admin数据库,添加的账号才是管理员的账号。
    c.3 用户只能在用户所在的数据库登录,包括管理员账号。
    c.4 管理员可以管理所有的数据库,但是不能直接管理其它数据库,要先在admin数据库中认证才可以,也是为了 安全性考虑。
  d 本学习笔记在linux下安装的MongoDB的版本是3.2.8,所以下面操作的命令都是以3.2.8版本为例,这是因为老版本和新版本的命令有所不同,请大伙周知,如果大家用的版本比较低,请自行查看命令是什么进行测试操作。

2 MongoDB添加管理员账户

  a 上面简单的说明之后,下面我们需要开始连接数据库进入CLI管理界面,只有进入此页面之后我们才能够对其进行操作(暂时为用客户端,后面会用客户端来进行说明)。
    a.1 首先跳转到MongoDB安装包下的bin文件夹下,然后使用命令(./mongo)启动,则会启动成功(确保MongoDB的服务已启动),如图所示(MongDB的安装路劲为自己的安装路径,可能会和我的不一致,请检查):
      
    a.2 如图所示,则连接成功,我们即可在>后面进行操作。
  b 连接数据库并且切换到用户表下
    b.1 连接成功之后首先我们输入命令:show dbs,我们发现其系统中内置了一个数据库名字为local(如果大家查询出来还有一个admin数据库,那是因为你使用的是低版本的MongoDB),admin库是不存在的,需要我们自己创建。
    b.2 (use admin) 使用此命令创建一个admin数据库,权限管理就要使用admin数据库,此命令也是切换数据库的命令。
    b.3 (show collections) 切换到admin库之后,使用show collections查询,我们发现该数据库下包含了一个system.user和system.version表,我们主要来看system.user表,这张表是用来存放超级管理员的。
    b.4 (db.system.users.find())首先使用命令查询system.user表中含有数据否,输入命令:db.system.users.find(),查询发现数据库是空的,这时候我们给这个表添加一个管理员账户。
  d 添加用户并且为用户指定角色和数据库,命令如图所示:
    
    d.1 user:用户名
    d.2 pwd:密码
    d.3 customData:描述字段
    d.4 roles:指定用户的角色,可以用一个空数组给新用户设置空角色,在roles字段可以指定内置角色和用户定义的角色,内置角色在在第四个模块我们专门回来说它。
  e (show users、db.system.users.find())当创建完用户之后,我们可以用前面的两个命令来查询用户的信息,自行查询眼看。
  f  当添加完用户信息之后,我们的想法就是马上重新连接验证是否权限已经控制,这里就打击你了,当然还没有控制,这里我们还需要开启用户权限验证,因为MongoDB默认是不开启权限验证的,下面我们简单说一下如何开启权限验证。

3 MongoDB开启用户权限验证

  a 通过上面的简单介绍我们已经配置了用户和密码以及角色,但是正如上面最后一步我所说,这里登录还是登录不了,那么是因为我们没有开启用户权限验证,如何开启这个权限验证呢。
  b 首先我们打开上一篇我们配置的mongodb.conf配置文件,我的安装路径是:(/usr/local/kencery/mongoDB/mongodb/bin/),使用vim打开,找到这样一个属性(auth=true),将前面的注释去掉,保存。
  c 重启MongoDB服务,因为我在前面已经将MongoDB设置为服务,所以我使用下面的命令即可对MongoDB进行关闭和重启
    c.1 service mongod stop
    c.2 service mongod start
  d 重启之后我们在连接数据库然后切换到admin数据库下,使用db.system.users.find()命令查看,如下图所示,则说明配置已经成功
    
  e 如上图所示,提示信息提示我们没有对齐进行授权,此时,我们输入如下命令进行授权,授权之后我们使用查询命令去查询发现已经可以查询,到这里简单权限已经设置完成。
    e.1 db.auth("kencery","kencery")  

4 MongoDB的roles角色简单介绍

  a MongoDB内置角色官网文档介绍:http://docs.mongoing.com/manual-zh/reference/built-in-roles.html
  b 关于MongoDB的内置角色,我们大概可以分为以下几种来简单说一下
    b.1 Database User Roles(数据库用户角色):read、readWrite
    b.2 Database Administration Roles(数据库管理角色):dbAdmin、dbOwner、userAdmin
    b.3 Culster Administration Roles(管理员组,针对整个系统进行管理):clusterAdmin、clusterManager、clusterMonitor、hostManager
    b.4 Backup and Restoration Roles(备份还原角色组):backup、restore
    b.5 All-Database Roles(所有数据库角色):readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    b.6 Superuser Roles(超级管理员):root、(dbOwner、userAdmin、userAdminAnyDatabase这几个角色角色提供了任何数据任何用户的任何权限的能力,拥有这个角色的用户可以在任何数据库上定义它们自己的权限)
    b.7  Internal Role(内部角色,一般情况下不建议设置):__system
  c 关于上面每一个角色的意义是什么,请自行去官网或者这篇文章去查看,地址是:http://www.cnblogs.com/SamOk/p/5162767.html
  d 我暂时只是理解了一些,还不能全部理解,因为毕竟只是自己学习,所以只是自己做实践测试了一些角色的意义,如果大家对那个不太懂,可以留言我们一块探讨。

5 MongoDB下创建一个新的数据库并且配置读写(read、readWrite)权限管理的案例说明

  a 在上面我们在admin数据库下为kencery用户建立了一个userAdminAnyDatabase角色,使用这个用户来管理用户,可以通过这个角色来创建、删除角色。首先我们切换到admin下授权用户登录(重新连接之后的操作),命令如下:
    a.1 use admin
    a.2 db.auth("kencery","kencery")  返回1则表示授权成功,否则授权失败
    a.3 show dbs  验证授权是否成功。
  b 授权成功之后,首先我们创建一个日志表(logs),给logs表创建一个read和readwrtite账号。read的账号对应制度账号,readwrite账号对应读写账号,命令如下:
    b.1 use logs
    b.2 db.createUser({
                  user:"read",                                   
                  pwd:"read",
                  roles:[{role:"read",db:"logs"}]
             })
    b.3 添加读写用户,将上面的命令中的user和pwd改为:readwrite,roles中的role改为readWrite,其它的不用改执行即可。
    b.4 最后查询我们添加的用户如下所示,则说明我们对其读和读写用户添加完成。
      
  c 上面我们创建了两个账号之后,首先我们来验证读写账号(readwrite(可以写入当前数据库的用户信息)),
    c.1 首先我们不要切换用户,直接在kencery用户下面对logs数据库下的payment表进行插入,会提示我们插入失败,没有权限,这是因为userAdminAnyDatabase权限只是针对用户管理的,对其它的表示没有操作权限的,如下如所示:
      
    c.2 从上面看到提示我们权授权失败,这时候用我们创建的readwriter(读写)账号授权,然后在进行插入和查询,则发现插入以及查询均成功,如图所示:
      
    c.3 从上面我们看到对于读写权限验证没有问题。
  d 上面测试了读写权限,下面我们测试一下读权限(read)
    d.1 继续上面的操作,首先我们授权给read用户,然后使用read用户去插入和查询,则发现插入提示没有授权,而查询成功,则我们期望的所实现,如图所示:
      
    d.2 如上图所示,则说明授权已经完成,完全可以配置给某些用户只能去读而不能插入修改的权限。

6 MongoDB超级管理员root

  a 上面我们简单介绍了读写权限以及读权限,那么下来我们说一下root权限,它是超级权限,也就是说你只要配置其账号,则可以对数据进行任何的操作,当然正常环境中不建议使用,危险性极高!但是为了学习,我们还是来讲述一下这个角色的使用,
  b  首先在上面的环境中我们继续授权给kencery用户,然后创建一个超级用户nouse(不建议使用)。但是当我们授权的时候发现报错了,报错截图:
    
        备注:原因是我们在admin数据库下面创建的用户,不能直接在其它库下面授权,只能在账号创建库下面授权,然后在去其他库访问。
  c 从上面得到,首先我们切换数据库到admin,然后创建用户nouse,权限角色给root,数据库对应admin,脚本在上面都已经写过,这里就不再累赘了。
  d 完成之后,我们切换授权给用nouse之后,切换到logs数据库下面进行各种操作,发现都是可以操作的,简单截图如下:
    
  e 因为账号始终都是在当前需呀授权的数据库下面进行授权的,那要不是在当前数据库下面授权呢,意思就是,我现在切换到admin数据库下添加用户给logs数据库,创建完成之后如何操作呢?始终记下来上面所述的那句:(哪里创建哪里认证)在admin数据库下面创建的用户,不能直接在其它库下面授权,只能在账号创建库下面授权,然后在去其他库访问。
  f 从文章开始到现在我们已经创建了很多账户,那么我们可以使用下面两条命令来查询账户以及账户总数
    f.1 db.system.users.find().pretty()
    f.2 db.system.users.find().count()

MongoDB用户配置的更多相关文章

  1. MongoDB 用户配置

    ====[安装]====DOS下切换到文件所在盘符 例如 D:\MongoDB\bin设置数据库保存位置 mongod.exe --dbpath D:\MongoDB\Data [--auth]//用 ...

  2. MongoDB用户权限管理配置

    MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...

  3. MongoDB启动配置等

    目录: 一.mongoDB 启动配置 二.导出,导入,运行时备份 三.Fsync锁,数据修复 四.用户管理,安全认证 一.启动项 mongod --help C:\Windows\system32&g ...

  4. MongoDB用户

    MongoDB  增加用户 删除用户  修改用户  读写权限 只读权限,   MongoDB用户权限分配的操作是针对某个库来说的.--这句话很重要.   1. 进入ljc 数据库:       use ...

  5. mongodb用户管理和服务安装

    一.忘记密码快速找回 任何系统忘记密码都是一样的操作:以无需授权的模式开启程序,然后进入系统修改权限设置,退出来重新以授权方式开启程序.MySQL是这样,MongoDB也是这样.好的系统都提供了无授权 ...

  6. MongoDB 安全配置

    前言 随着MongoDB使用人群企业越来越广泛,黑客的注意力也转移到了其中.比如去年很火热的MongoDB劫持事件,很多人对MongoDB的安全也越来越重视.今天,我们就简单总结一些MongoDB的安 ...

  7. MongoDB和Java(7):MongoDB用户管理

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  8. python爬虫-MongoDB安装配置

    MongoDB安装配置: 在安装配置MongoDB的过程中遇到了很多问题,现在重新梳理一遍安装流程.遇到的问题及其解决方法 系统版本:Windows 10 MongoDB版本:4.2.1 1.下载地址 ...

  9. 烂泥:Postfix邮件服务器搭建之虚拟用户配置

    virtual_gid_maps = static: virtual_transport = dovecot dovecot_destination_recipient_limit = 1 注意:po ...

随机推荐

  1. (转)pt-online-schema-change在线修改表结构

    原文:http://www.ywnds.com/?p=4442 一.背景 MySQL大字段的DDL操作:加减字段.索引.修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响 ...

  2. (转)http://blog.csdn.net/renfufei/article/details/38474435

    原文:http://blog.csdn.net/renfufei/article/details/38474435

  3. 搜索类网站记录 && 代理服务器

    搜索类网站记录 && 代理服务器 技巧 1.使用site   我们在搜索的时候,其实不全依赖搜索引擎也是可以的, 比如我们要搜索一个 “中国” ,可以在搜索框输入   中国  site ...

  4. 如何安装windows7

    前因:之前安装的win7的系统,用了激活工具,刚开始的几个星期还没察觉有何问题.直到有天系统给出异常提示:系统资源不足,无法完成请求的服务.仔细排查之后发现是系统内核句柄数一直增加不释放,句柄数大概有 ...

  5. margin折叠及hasLayout && Block Formatting Contexts

    margin折叠的产生有几个条件: 这些margin都处于普通流中,并在同一个BFC中: 这些margin没有被非空内容.padding.border 或 clear 分隔开: 这些margin在垂直 ...

  6. sql 获取列名

    --查询所有列 select name from syscolumns where id=OBJECT_ID('PTS_ProjectTask') --列转为行 GetColumnJoin 'Proj ...

  7. 广州.NET俱乐部简介

    广州.NET俱乐部 简介 广州 .NET 俱乐部自2018年底重新在广州地区活跃. 目前已经成功在广州.深圳.苏州和东莞组织并参与了多长线下技术交流活动. 已经有超过1200+人加入了俱乐部线上社区. ...

  8. [C语言]声明解析器cdecl修改版

    一.写在前面 K&R曾经在书中承认,"C语言声明的语法有时会带来严重的问题.".由于历史原因(BCPL语言只有唯一一个类型——二进制字),C语言声明的语法在各种合理的组合下 ...

  9. Koa2实用入门

    koa2已发布了一段时间,可以考虑入手,参见Node.js最新Web技术栈(2016年4月) 本文主要是koa 2的文档解读和runkoa介绍,让大家对koa 2有一个更简单直接的理解 一.依赖Nod ...

  10. C语言理论知识

    C语言-----理论部分   一:软件开发概述1.程序语言的发展:机器语言-->汇编语言-->高级语言.2.软件开发的基本步骤与方法:分析问题,建立数学模型-->确定数据结构和算法- ...