前言

用户权限管理很重要,只给需要的权限,防止应用系统漏洞导致脱库

认证和授权

Authentication

认证识别,解决我是谁

Authorization

操作授权,我能做什么

认证机制

MONGODB-CR

官方自定义实现认证机制,通过用户名和密码,通过challenge-response方式,来识别和验证授权。SCRAM-SHA-1认证机制有更好的安全性,新版本默认使用SCRAM-SHA-1。不建议使用MONGODB-CR模式。

SCRAM-SHA-1

3.0版本新加功能,Mongodb默认的认证模式,通过用户名和密码认证,IETF标准:RFC 5802

x.509证书

2.6版本新加功能,公钥证书结构标准,由国际电信联盟(ITU)定义。认证授权时需要通过TLS/SSL加密连接,也就是说mongodb服务需要支持加密协议访问。配置非常麻烦,建议不使用>_<

判断流程,根据公开资料猜测

LDAP

仅企业版支持

Kerberos

仅企业版支持

用户管理

添加用户

通过mongo shell终端操作,用户保存在admin数据库system.user集合中

添加普通用户

切换到需要添加用户的db
use xxxx

执行添加

db.createUser(
{
user:"username",
pwd:"password",
roles:[
{role:"read", db:"xxxx"},
{role:"readWrite", db:"test"}
]
}
)

  

添加超级用户

切换到admin数据库
use admin

执行添加

db.createUser(
{
user:"username",
pwd:"password",
roles:[
{role:"root", db:"admin"}
]
}
)

  

删除用户

切换到用户授权的db
use xx

执行删除操作
db.dropUser("username")

更新用户

切换到用户授权的db
use xx

执行更新
字段会覆盖原来的内容

db.updateUser("username",{
pwd:"new password",
customData:{
"title":"PHP developer"
}
})

  

更新用户密码

use xx
db.changeUserPassword("username","newpassword")

查看用户信息

use admin
db.getUser("username")

删除用户角色

use xx

db.revokeRolesFromUser(
"usename",
[
{ role: "readWrite", db: "accounts" }
]
)

  

添加用户角色

use xx

db.grantRolesToUser(
"reportsUser",
[
{ role: "read", db: "accounts" }
]
)

  

角色管理

自定义角色

自定义角色保存在admin数据库system.roles集合中

切换到admin数据库
use admin

执行添加

db.createRole(
{
role: "manageOpRole",
privileges: [
{ resource: { cluster: true }, actions: [ "killop", "inprog" ] },
{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
],
roles: []
}
)

  

查看角色信息

use admin
db.getRole("rolename",{showPrivileges:true})

删除角色

use admin
db.dropRole("rolename")

系统内置用户角色

大部分内置的角色对所有数据库共用,少部分仅对admin生效

数据库用户类

read
非系统集合有查询权限

readWrite
非系统集合有查询和修改权限

数据库管理类

dbAdmin
数据库管理相关,比如索引管理,schema管理,统计收集等,不包括用户和角色管理

dbOwner
提供数据库管理,读写权限,用户和角色管理相关功能

userAdmin
提供数据库用户和角色管理相关功能

集群管理类

clusterAdmin
提供最大集群管理权限

clusterManager
提供集群管理和监控权限

clusterMonitor
提供对监控工具只读权限

hostManager
提供监控和管理severs权限

备份和恢复类

backup
提供数据库备份权限
restore
提供数据恢复权限

All-Database类

readAnyDatabase
提供读取所有数据库的权限除了local和config数据库之外

readWriteAnyDatabase
和readAnyDatabase一样,除了增加了写权限

userAdminAnyDatabase
管理用户所有数据库权限,单个数据库权限和userAdmin角色一样

dbAdminAnyDatabase
提供所有用户管理权限,除了local,config

超级用户类

root
数据库所有权限

内部角色

__system
提供数据库所有对象任何操作的权限,不能分配给用户,非常危险

参考资料

【1】认证识别
https://docs.mongodb.com/manual/core/authentication/

【2】openssl 证书操作命令
http://blog.csdn.net/madding/article/details/26717963

【3】维基百科X.509介绍
https://en.wikipedia.org/wiki/X.509

【4】mongodb - security-x.509
https://docs.mongodb.com/manual/core/security-x.509/

【5】Use x.509 Certificates to Authenticate Clients
https://docs.mongodb.com/manual/tutorial/configure-x509-client-authentication/

【6】Enterprise Authentication Mechanisms - ldap and Kerberos
https://docs.mongodb.com/manual/core/authentication-mechanisms-enterprise/

【7】mongodb添加用户
https://docs.mongodb.com/manual/tutorial/create-users/

【8】更改mongodb用户密码和自定义数据
https://docs.mongodb.com/manual/tutorial/change-own-password-and-custom-data/

【9】mongodb数组
http://www.cnblogs.com/ljhdo/p/5428037.html

【10】管理mongodb用户和角色
https://docs.mongodb.com/manual/tutorial/manage-users-and-roles/

【11】security-users
https://docs.mongodb.com/manual/core/security-users/

【12】Internal Authentication
https://docs.mongodb.com/manual/core/security-internal-authentication/

【13】Built-In Roles
https://docs.mongodb.com/manual/core/security-built-in-roles/

【14】reference:built-in-roles and built-in-actions
https://docs.mongodb.com/manual/reference/built-in-roles/

【15】SCRAM-SHA1认证方式介绍
https://docs.mongodb.com/manual/core/security-scram-sha-1/#authentication-scram-sha-1

mongodb之用户/认证/角色/权限管理的更多相关文章

  1. MongoDB 4.X 用户和角色权限管理总结

    关于MongoDB的用户和角色权限的梳理一直不太清晰,仔细阅读了下官方文档,并对此做个总结. 默认情况下,MongoDB实例启动运行时是没有启用用户访问权限控制的,也就是说,在实例本机服务器上都可以随 ...

  2. MongoDB 的用户和角色权限

    副本和分片集群的安全设置参考这个:高级:https://files.cnblogs.com/files/sanduzxcvbnm/mongodb_advance.pdf 默认情况下,MongoDB实例 ...

  3. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10

    今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求 ...

  4. [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity

    项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...

  5. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...

  6. springboot(十四):springboot整合shiro-登录认证和权限管理

    这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security ...

  7. Springboot-shiro-redis实现登录认证和权限管理

    Springboot-shiro-redis实现登录认证和权限管理 在学习之前: 首先进行一下Apache Shiro和Shiro比较: Apache Shiro是一个功能强大.灵活的,开源的安全框架 ...

  8. Spring boot 入门(四):集成 Shiro 实现登陆认证和权限管理

    本文是接着上篇博客写的:Spring boot 入门(三):SpringBoot 集成结合 AdminLTE(Freemarker),利用 generate 自动生成代码,利用 DataTable 和 ...

  9. spring-boot(八) springboot整合shiro-登录认证和权限管理

    学习文章:springboot(十四):springboot整合shiro-登录认证和权限管理 Apache Shiro What is Apache Shiro? Apache Shiro是一个功能 ...

随机推荐

  1. 面试题:InnoDB中一棵B+树能存多少行数据?

    阅读本文大概需要 5 分钟. 作者:李平 | 来源:个人博客 一.InnoDB 一棵 B+ 树可以存放多少行数据? InnoDB 一棵 B+ 树可以存放多少行数据? 这个问题的简单回答是:约 2 千万 ...

  2. BZOJ 4310 二分+SA+RMQ

    思路: 首先求出后缀数组和height数组,这样能得到本质不同的子串数目 这里利用:本质不同的子串=∑(Len−SA[i]−height[i])=∑(Len−SA[i]−height[i])利用SA[ ...

  3. django 菜单权限

    一.什么是权限 能做哪些事情,不能做哪些事情,可以做的权限 二.设计权限 思路: web应用中,所谓的权限,其实就是一个用户能够访问的url,通过对用户访问的url进行控制,从而实现对用户权限的控制. ...

  4. ACM_蛋糕小王子铁头娃

    Problem Description: 铁头娃制作了很多蛋糕,想分给他的小伙伴们,他的小伙伴很喜欢铁头娃做的蛋糕,每个人都想分到最多蛋糕 铁头娃想到了一个头铁主意:先给小伙伴们从1到N编号,在1-N ...

  5. 345 Reverse Vowels of a String 反转字符串中的元音字母

    编写一个函数,以字符串作为输入,反转该字符串中的元音字母.示例 1:给定 s = "hello", 返回 "holle".示例 2:给定 s = "l ...

  6. Mysql(三):多表查询和存储程序

    今天内容: ● 多表查询(内连接 外连接 子查询) ● 存储程序(存储过程 函数) 多表查询 ​ 同时从多张数据表中查取到需要的数据即是多表查询. 多表查询时,参与查询的表中每条数据进行组合,这种效果 ...

  7. Robomongo 0.9.0 连接mongo数据库时,提示连接失败 的解决方案

    Robomongo 0.9.0 连接mongo数据库时,提示连接失败.(IP和端口号确定是对的) 基本注意点: 1.mongodb服务打开,打开时,指定端口号,默认为27017,使用默认值,则不用指定 ...

  8. c++中std::set自定义去重和排序函数

    c++中的std::set,是基于红黑树的平衡二叉树的数据结构实现的一种容器,因为其中所包含的元素的值是唯一的,因此主要用于去重和排序.这篇文章的目的在于探讨和分享如何正确使用std::set实现去重 ...

  9. Caffe FCN:可视化featureMaps和Weights(C++)、获取FCN结果

    为何不使用C++版本FCN获取最后的分割掩模,何必要使用python呢!因此需要获取网络最后层的featureMaps,featureMaps的结果直接对应了segmentation的最终结果,可以直 ...

  10. sqlserver 2014 删除主键约束

    truncate table menu SELECT * FROM sys.foreign_keys WHERE referenced_object_id=OBJECT_ID('menu'); --找 ...