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

  • A+
所属分类: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操作的鉴权得到了许可。

以上例子可能让你对数据库鉴权有了点浅显熟悉,那么接下来开端说点观点了,年夜致是叫基于脚色的权限节制

 

[图-脚色权限节制]

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

Resource,资本 一个资本可所以一个数据库、聚拢、或者一个集群..往年夜了说,任何可能被操作的事物都可以被当做资本。
Action,动作 动作是指对资本的一个执行行动,好比读取表、读取数据库,此中读取就是一个动作。
Privilege,权限 权限指的是对某类或某一些资本执行某些动作的容许,与Permission的意义同等。
Role,脚色 体系中的脚色,通常是代表了一种权利品级的象征,好比论坛中的治理员、版主、旅客等等,便是脚色; 体系界说中,脚色每每代表一组权限的聚拢。
User,用户 可登录体系的实体,一个用户通常可被赋予多个脚色。

噢,关于图的简单解释: 权限制义了对某些资本的某些操作,脚色则可以拥有多个权限; 用户User可以被赋予多个脚色,从而得到这些脚色所拥有的权限以操作某些资本

对付Mongodb来说,只要开启鉴权,所有的DB拜访操作都必要经由过程权限反省。而年夜致的操作流程跟下图相似

 

[图-mongo鉴权]

Mongodb 的用户归属于某个数据库,用户必要在所属的数据库中进行鉴权;
一旦经由过程鉴权,当前的会话(衔接)中所有操作将依照用户被赋予的脚色权限执行反省。

二、鉴权方式

论述Mongodb支撑的几种鉴权方式 鉴权方式是指Mongodb若何辨认接入用户,若何反省权限是否正当的一系列校验机制。

SCRAM-SHA-1 SCRAM-SHA-1 是默认的鉴权机制,界说于 IETF standard, RFC 5802 是一种平安性较高的"大众挑战-应答"大众鉴权机制。关于"大众挑战-应答"大众可以参考维基百科
MongoDB Challenge and Response (MONGODB-CR) 3.0 以前采纳的机制,已经放弃
x.509 Certificate Authentication. 基于证书的鉴权,采纳该方式可树立 SSL/TLS 加密衔接
LDAP proxy authentication 基于LDAP 体系的鉴权,仅企业版支撑
Kerberos authentication 基于Kerberos 的鉴权,仅企业版支撑

SCRAM-SHA-1 是当前保举使用的鉴权方式,既然如斯,有需要上图继续解释:

步调解读

客户端提议一个SCRAM鉴权哀求; 鉴权参数中带上用户名、客户端随机字符串(防止重放进击);
服务端发出一个挑战相应; 服务侧先反省用户名,经由过程后天生一个salt因子、迭代数、归并字符串(包括客户端随机串和服务端随机串)
客户端相应一个proof(证实数据)和归并字符串; 相应的 proof数据依据服务所给的随机参数以及客户端密钥天生,是一个客户端署名与密钥异或计算后的成果;
服务端将存储的密钥联合随机参数,使用同样的算法天生署名并校验客户端 proof数据; 若校验经由过程,服务端采纳相似方式发送本身的署名;
客户端校验服务端署名数据。

可以看到,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
内部脚色,用于集群间节点通信

根本是这些,有兴致可看看官方的内置脚色 Mongodb 的用户及脚色数据一样平常位于当前实例的 admin数据库,system.users寄存了所稀有据; 存在破例的环境是分片集群,利用接入mongos节点,鉴权数据则寄存于config节点。是以有时刻为了便利分片集群治理,会零丁为分片内部节点创立自力的治理操作用户;

五、相关操作

简单列举用户权限相关的常用操作

授权启动

./bin/mongod --auth

默以为非授权启动 也可以经由过程security.authorization设置装备摆设指定

创立治理员用户

创立用户

付与权限

删除权限

更多操作

六、常见问题

shell 操作提醒差错

缘故原由:当前衔接未鉴权或用户没有操作权限 办理:为用户分派恰当权限,并执行auth操作,如下:

无法执行 eval 操作

db.eval() 是一个全局操作,可执行随意率性数据库剧本; 执行该敕令必要拥有anyAction或anyResource的权限,通常不建议为数据库用户赋予如许的权限。 该敕令存在平安风险,已不建议使用(mongodb 3.0之后已颠末期)。

总结

以上便是这篇文章的全体内容了,本文还有很多不敷,愿望本文的内容对年夜家的进修或者事情具有必定的参考进修代价,假如有疑问年夜家可以留言交流,谢谢年夜家对剧本之家的支撑。

扩大浏览

Mongodb 鉴权机制 https://docs.mongodb.com/manual/core/authentication/

Mongodb 内置脚色先容 https://docs.mongodb.com/manual/reference/built-in-roles/#database-user-roles

Mongodb 权限操作先容 https://docs.mongodb.com/manual/reference/privilege-actions/#security-user-actions

运维-Mongodb鉴权先容 http://www.ywnds.com/?p=5635

您可能感兴致的文章:

linux体系下MongoDB单节点安装教程vue+socket.io+express+mongodb 实现简略单纯多房间在线群聊示例node.js操作MongoDB的实例详解windows7下使用MongoDB实现仓储设计java操作mongoDB查询的实例详解MongoDB若何查询耗时记载的办法详解MongoDB 3.4 安装以 Windows 服务方式运行的具体步调详解MongoDB数据库根基操作及实例MongoDB TTL索引的实例详解

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: