# Mongodb的认证及权限管理

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:20:00.000Z
> 分类: 其他
> 标签: 数据库, Java
> 原文链接: http://117.50.162.249:3000/yun/articles/983

---

# Mongodb的认证及权限管理

> 来源: https://www.ucloud.cn/yun/129932.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:20

Mongodb的认证及权限管理

对于各种数据库软件，启用认证的方法都不同，比如PG是在pg\_hba.conf中对用户设置使用启用密码认证，而Oracle远程登录均需要使用密码认证。Mongodb是在参数中控制是否启用密码认证，并且启用后，对所有用户生效，并不能像PG一样对用户区别对待。需要启用认证，使用mongod --auth或者在参数文件中加入authorization: enabled。mongodb的认证分为用户验证(client auth)和集群间认证（internal auth）,在复制集中启用认证需指定keyFile参数，指定后即默认启用了用户验证。

从3.0开始，mongodb默认采用SCRAM加密算法，在3.0以前默认使用MongoDB-CR算法，所以如果数据库是从2.X版本升级上来的数据库，可能出现认证机制不兼容导致客户端无法连接数据库的情况。另外mongodb还支持x.509算法，主要用于加密连接中，本人也未使用过，此处不做探讨。

一. 用户创建及管理

在Mongodb中的用户是基于数据库的，不同数据库中可以存在同名用户，所以在登录数据库的时候，需要指定mongo --authenticationDatabase=XX 参数选择认证数据库。在生产中，为了规范和便于管理，我们建议将所有用户都创建在admin库中。需要注意的是Mongodb默认是没有创建任何内置用户的，所以在数据库实例启用认证前，需要先创建一个超管账号，然后再重启实例启用认证。

**——用户创建**

```
▼▼▼
```

{role:"read",db:"production"}，

表示在production库有read角色，可以看到roles值是一个数组，所以可以具有多个库的多种角色或者一个库的多种角色

**——用户授权**

```
▼▼▼
```

**——权限回收**

```
▼▼▼
```

**——用户查询**

```
▼▼▼
```

二.  角色管理

从上面用户管理的命令可以看到，不管是授权还是回收权限，都是基于角色的，Mongodb不能直接将某个集合或者数据库的操作权限授予用户，只能通过role来进行授权，role可以是系统内置的，也可以是用户自定义的。

内置角色包括root、dbOwner、clusterAdmin、read、readWrite等，root角色相当于PG的superuser超管权限。在生产环境中，会有给用户授予所有数据库读权限的需求，类似oracle的select any table ,Mongodb中具有all database role，如readAnyDatabase、readWriteAnyDatabase等 ，详细内置role可查看官方文档。

由于不能将对象权限授予用户，所以当要进行精细的权限控制，内置角色无法满足需求，就只能自定义角色。自定义角色里面可以直接对对象（resource）进行操作(action)的权限，也可以包含某个角色。如：

```
▼▼▼
```

从上面的例子可以看出resource是一个子文档，包含db和collection，如果为空则表示所有对象，action是一个数组，包含需要授予的操作权限。

当然也可以将role授权给role，使用db.grantRolesToRole() 。

在生产环境中若,经常需要在mongo上执行javascript脚本，并且使用db.eval()调用javascript脚本，则可能出现如下报错，提示无权限

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129932/images/129932_000.png)

eval需要所有资源的所有权限，需创建如下角色并授予用户

```
▼▼▼
```

在此，强烈不建议授予此类权限！调用javascript可以使用其他方案，比如load 。

相关阅读

以文本形式将MySql数据迁移Mongodb的方法

Mongodb聚合查询及在日常运维中的使用

Mongodb日常性能问题处理案例分享

Mongodb增量备份和基于时间点恢复

Mongodb升级方案概述

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129932/images/129932_001.png)

END

更多精彩干货分享

点击下方名片关注

IT那活儿

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129932/images/129932_002.png)