欢迎来到51自学网!

51自学网

当前位置: 主页 > 数据库 >

关于Mongodb 认证鉴权你需要知道的一些事

时间:2018-03-14 01:58来源:网络整理 作者:51自学网 点击:
前言 本文主要给大家介绍了Mongodb认证鉴权的一些相关内容,通过设置认证鉴权会对大家的mongodb安全进一步的保障,下面话不多说了,来一起看看详细的介绍吧。 一、Mongodb 的权限管理

前言

本文主要给大家介绍了Mongodb认证鉴权的一些相关内容,通过设置认证鉴权会对大家的mongodb安全进一步的保障,下面话不多说了,来一起看看详细的介绍吧。

一、Mongodb 的权限管理

认识权限管理,说明主要概念及关系

与大多数数据库一样,Mongodb同样提供了一套权限管理机制。 为了体验Mongodb 的权限管理,我们找一台已经安装好的Mongodb,可以参照这里搭建一个单节点的Mongodb。

直接打开mongo shell:

./bin/mongo --port=27017

尝试执行stats命令以查看appdb数据库的状态:

MongoDB Enterprise > use appdb MongoDB Enterprise > db.stats() { "ok" : 0, "errmsg" : "not authorized on nscl to execute command { dbstats: 1.0, scale: undefined }", "code" : 13 }

此时的提示正是说明你当前的操作没有获得许可,使用appdb预创建的用户进行鉴权:

> db.auth('appuser','yourpassword') 1 > db.stats() { "db" : "appdb", "collections" : 0, "views" : 0, "objects" : 0, "avgObjSize" : 0, "dataSize" : 0, "storageSize" : 0, "numExtents" : 0, "indexes" : 0, "indexSize" : 0, "fileSize" : 0, "ok" : 1 }

可以发现,在通过验明身份之后,stats操作的鉴权获得了许可。

以上例子可能让你对数据库鉴权有了点浅显认识,那么接下来开始说点概念了,大致是叫基于角色的权限控制

关于Mongodb 认证鉴权你需要知道的一些事

 

[图-角色权限控制]

先解释下图中的几个实体:

  • User,用户 可登录系统的实体,一个用户通常可被赋予多个角色。
  • 噢,关于图的简单解释: 权限定义了对某些资源的某些操作,角色则可以拥有多个权限; 用户User可以被赋予多个角色,从而获得这些角色所拥有的权限以操作某些资源。

    对于Mongodb来说,只要开启鉴权,所有的DB访问操作都需要通过权限检查。而大致的操作流程跟下图类似

     

    关于Mongodb 认证鉴权你需要知道的一些事

    [图-mongo鉴权]

    Mongodb 的用户归属于某个数据库,用户需要在所属的数据库中进行鉴权;
    一旦通过鉴权,当前的会话(连接)中所有操作将按照用户被赋予的角色权限执行检查。

    二、鉴权方式

    阐述Mongodb支持的几种鉴权方式 鉴权方式是指Mongodb如何识别接入用户,如何检查权限是否合法的一系列校验机制。

    SCRAM-SHA-1 是当前推荐使用的鉴权方式,既然如此,有必要上图继续解释:

    关于Mongodb 认证鉴权你需要知道的一些事


    步骤解读

    可以看到,SCRAM鉴权时也类似SSL/TLS 的握手过程,但相比之下简单许多,同时在性能方面也要具备优势; 然后我们看看安全性的部分:

    另外SCRAM-SHA-1 相比MONGODB-CR的优势还有:

    A tunable work factor (iterationCount), 可灵活调整的安全系数 Per-user random salts rather than server-wide salts 每个用户有独立的随机系数 A cryptographically stronger hash function (SHA-1 rather than MD5), 更安全的hash函数 Authentication of the server to the client as well as the client to the server. 支持双向认证

    对 SCRAM-SHA-1的实现感兴趣?戳这里

    三、内部鉴权

    副本集、分片集群内鉴权方式

    内部鉴权是指 Mongo集群内部节点之间进行访问的鉴权方式,比如副本集内主备之间的访问、分片集群内Mongos 与Mongod之间的访问。 内部鉴权目前支持两种方式:

  • KeyFiles 密钥文件方式,采用SCAM-SHA-1 的鉴权机制,文件内包含了一个共享密钥,由集群内所有成员共同持有。 通常,密钥的长度在6-1024字符内,采用Base64编码。如何使用?
  • X.509 证书 证书鉴权,用于SSL/TLS加密连接通道。 如何使用?
  • 四、数据库角色

    针对Mongodb数据库中的各种角色进行说明

    数据库访问

    角色名称 拥有权限

    read 允许读取指定数据库的角色

    readWrite 允许读写指定数据库的角色

    数据库管理

    角色名称 拥有权限

    dbAdmin 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

    userAdmin 允许管理当前数据库的用户,如创建用户、为用户授权

    dbOwner 数据库拥有者(最高),集合了dbAdmin/userAdmin/readWrite角色权限

    集群管理

    角色名称 拥有权限

    clusterAdmin 集群最高管理员,集合clusterManager/clusterMonitor/hostManager角色权限

    clusterManager 集群管理角色,允许对分片和副本集集群执行管理操作,如addShard,resync等

    clusterMonitor 集群监控角色,允许对分片和副本集集群进行监控,如查看serverStatus

    hostManager 节点管理角色,允许监控和管理节点,比如killOp、shutdown操作

    备份恢复

    角色名称 拥有权限

    backup 备份权限,允许执行mongodump操作

    restore 恢复权限,允许执行mongoresotre操作

    数据库通用角色

    角色名称 拥有权限

    readAnyDatabase 允许读取所有数据库

    readWriteAnyDatabase 允许读写所有数据库

    userAdminAnyDatabase 允许管理所有数据库的用户

    dbAdminAnyDatabase 允许管理所有数据库

    特殊角色

    角色名称 拥有权限

    root 超级管理员,拥有所有权限

    __system 内部角色,用于集群间节点通讯

    (责任编辑:admin)

    织梦二维码生成器
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线----------------------------
    栏目列表
    推荐内容