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 认证鉴权那点事

[图-角色权限控制]

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

Resource,资源 一个资源可以是一个数据库、集合、或者一个集群..往大了说,任何可能被操作的事物都可以被当做资源。

Action,动作 动作是指对资源的一个执行行为,比如读取表、读取数据库,其中读取便是一个动作。

Privilege,权限 权限指的是对某类或某一些资源执行某些动作的允许,与Permission的意义一致。

Role,角色 系统中的角色,通常是代表了一种权力等级的象征,比如论坛中的管理员、版主、游客等等,就是角色; 系统定义中,角色往往代表一组权限的集合。

User,用户 可登录系统的实体,一个用户通常可被赋予多个角色。

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

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

MongoDB 认证鉴权那点事

[图-mongo鉴权]

Mongodb 的用户归属于某个数据库,用户需要在所属的数据库中进行鉴权;

一旦通过鉴权,当前的会话(连接)中所有操作将按照用户被赋予的角色权限执行检查。

二、鉴权方式

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

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

MongoDB 认证鉴权那点事

步骤解读

客户端发起一个SCRAM鉴权请求; 鉴权参数中带上用户名、客户端随机字符串(防止重放攻击);

服务端发出一个挑战响应; 服务侧先检查用户名,通过后生成一个salt因子、迭代数、合并字符串(包含客户端随机串和服务端随机串)

客户端响应一个proof(证明数据)和合并字符串; 响应的 proof数据根据服务所给的随机参数以及客户端密钥生成,是一个客户端签名与密钥异或计算后的结果;

服务端将存储的密钥结合随机参数,使用同样的算法生成签名并校验客户端 proof数据; 若校验通过,服务端采用类似方式发送自己的签名;

客户端校验服务端签名数据。

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

信息窃听,传输过程中全部采用动态签名,保证密码不会被传输;

重放攻击,由于使用了随机数,每次生成的数据都不一样,可避免重复数据攻击;

服务假冒,鉴权过程是双向的,即客户端会校验服务端身份,而服务端密钥也根据密码生成,中间人无法仿造;

存储安全,密码在数据库中均没有明文存储,都通过不可逆的算法加密存储。

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9c122ccc12d63b162ae5cee604389e45.html