MongoDB数据库默认情况下是没有做权限控制的,只要能够连接所开放的端口就能进行访问,而且拥有root级别的权限;对于生产环境而言是极不安全的,所以需要建立用户,进行授权控制。

  • 单机环境下的用户授权模块配置:

MongoDB的社区版本中有两个模块可以控制用户的访问:

--auth: 在mongod启动项中加入--auth,mongodb启动后,就可以完成授权模块的启用);
PS:虽然auth模块启用后本机还能否登陆到数据库,但是不具备增删改查的权限了,所以启动auth模块之前就应该创建一个超级用户
--keyFile <file>: 主要用于分片集群与副本集相互之间的授权使用,在单机情况下只要用到auth,如果是在集群(分片+副本集)环境下,就必须要用到该参数;
security.authorization: 在MongoDB 2.6版本开始,mongod/mongos的启动配置文件增加了YAML格式的写法,功能更auth是一样的,后面的操作中,都是采用该格式
security.keyFile: 格式与security.authorization相同,功能与--keyFile相同。
  • 首先验证下非配置认证模块的访问:

  1. [root@fo169 bin]# ./mongo
  2. MongoDB shell version: 3.0.7
  3. connecting to: test
  4. Server has startup warnings:
  5. 2015-10-29T15:12:14.257+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
  6. 2015-10-29T15:12:14.257+0800 I CONTROL [initandlisten]
  7. > show dbs
  8. local 0.000GB

在没有配置的情况下,登录到数据库后,可以做任何操作。

  • 配置认证模块及重启服务:

编写了一个启动配置文件:mongodb.conf(文件中标红部分就为auth的授权模块)

  1. [root@fo169 bin]# cat mongodb.conf
  2. systemLog:
  3. destination: file
  4. path: "/data/auth/log/mongod.log"
  5. logAppend: true
  6. storage:
  7. journal:
  8. enabled: true
  9. dbPath: "/data/auth/db"
  10. directoryPerDB: true
  11. engine: wiredTiger
  12. wiredTiger:
  13. engineConfig:
  14. cacheSizeGB: 4
  15. directoryForIndexes: true
  16. journalCompressor: zlib
  17. collectionConfig:
  18. blockCompressor: zlib
  19. indexConfig:
  20. prefixCompression: true
  21. net:
  22. port: 27017
  23. processManagement:
  24. fork: true
  25. security:
  26. authorization: enabled
  • 创建授权用户(超级管理员):

MongoDB在V3.0版本之后内置了root 角色,也就是结合了readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin4个角色权限,类似于ORACLE的sysdba角色,但是MongoDB的超级管理员用户名称是可以随便定义的:

  1. [root@fo169 bin]# ./mongo
  2. MongoDB shell version: 3.0.
  3. connecting to: test
  4. Server has startup warnings:
  5. --30T16::36.127+ I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
  6. --30T16::36.127+ I CONTROL [initandlisten]
  7. > use admin
  8. switched to db admin
  9. > db.createUser(
  10. ... {
  11. ... user: "ljaiadmin",
  12. ... pwd: "123456",
  13. ... roles: [ { role: "root", db: "admin" } ]
  14. ... }
  15. ... )
  16. Successfully added user: {
  17. "user" : "ljaiadmin",
  18. "roles" : [
  19. {
  20. "role" : "root",
  21. "db" : "admin"
  22. }
  23. ]
  24. }

这样就创建好一个ljaiadmin的超级管理员用户,创建全局用户或者超级用户,需要在MongoDB的admin数据库中创建(在其他库也可以创建,但是没有该角色功能),重启完mongod进程后,接下来做一下权限的验证:

  1. [root@fo169 bin]# ./mongo
  2. MongoDB shell version: 3.0.
  3. connecting to: test
  4. > show dbs (注:此时查看已提示没有授权执行listDatabases命令了)
  5. --30T16::31.131+ E QUERY Error: listDatabases failed:{
  6. "ok" : ,
  7. "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
  8. "code" :
  9. }
  10. at Error (<anonymous>)
  11. at Mongo.getDBs (src/mongo/shell/mongo.js::)
  12. at shellHelper.show (src/mongo/shell/utils.js::)
  13. at shellHelper (src/mongo/shell/utils.js::)
  14. at (shellhelp2):: at src/mongo/shell/mongo.js:
  15. > use admin
  16. switched to db admin
  17. > db.auth('ljaiadmin','123456') (注:切换到admin用户进行授权验证)
  18.  
  19. > show dbs (注:验证完成后,就可以读写等操作)
  20. admin .000GB
  21. local .000GB
  22. test100 .000GB
  23. test2 .000GB
  24. > use test2
  25. switched to db test2
  26. > show tables
  27. test
  28. test2
  29. > db.test2.find()
  30. { "_id" : ObjectId("5632cf116207909a76446af7"), "name" : "" }
  31. > db.test2.drop()
  32. true
  33. > db.dropDatabase()
  34. { "dropped" : "test2", "ok" : }
  35. > show dbs
  36. admin .000GB
  37. local .000GB
  38. test100 .000GB
  39. > use test100
  40. switched to db test100
  41. > db.test111.insert({"test":"test"})
  42. WriteResult({ "nInserted" : })
  43. > db.test111.find()
  44. { "_id" : ObjectId("56332db373f771b3d95638bb"), "test" : "test" }
  45. > use admin
  46. switched to db admin
  47. > show users
  48. {
  49. "_id" : "admin.ljaiadmin",
  50. "user" : "ljaiadmin",
  51. "db" : "admin",
  52. "roles" : [
  53. {
  54. "role" : "root",
  55. "db" : "admin"
  56. }
  57. ]
  58. }
  59. >
  • 创建普通用户

用可以对test123数据库读写的rwtest123用户为例:

  1. > use test123
  2. switched to db test123
  3. > db.createUser(
  4. ... {
  5. ... user: "rwtest123",
  6. ... pwd: "123456",
  7. ... roles: [ { role: "readWrite", db: "test123" } ]
  8. ... }
  9. ... )
  10. Successfully added user: {
  11. "user" : "rwtest123",
  12. "roles" : [
  13. {
  14. "role" : "readWrite",
  15. "db" : "test123"
  16. }
  17. ]
  18. }

  19. #所建的rwtest123用户可以在test123数据库中进行增删改查操作,但是其他操作就不行了
  20. >db.auth('rwtest123','123456')
  21. switched to db test123
  22. > db.test123.insert({"test":"test"})
  23. WriteResult({ "nInserted" : })
  24. > db.test123.find()
  25. { "_id" : ObjectId("563332ebc8a59ae4fe96bbf5"), "test" : "test" }
  26. > db.test123.drop()
  27. true
  28. > use test100
  29. switched to db test100
  30. > db.test100.find()
  31. Error: error: { "$err" : "not authorized for query on test100.test100", "code" : }
  32. >
  • 配置参考:

MongoDB数据库的用户权限控制权限还是比较多的,有系统自带的,已经定义好的角色,也可以自己定义角色权限,需要根据业务需要进行权限分配:

自带角色的说明(一般内置的角色基本上就可以满足生产环境需求了):

https://docs.mongodb.org/manual/core/security-built-in-roles/

用户自行定义角色的说明:

https://docs.mongodb.org/manual/core/security-user-defined-roles/

用户管理配置的说明

https://docs.mongodb.org/manual/reference/method/#user-management-methods

MongoDB3.0.x版本用户授权配置(单机环境)的更多相关文章

  1. 记录一次MongoDB3.0.6版本wiredtiger与MMAPv1引擎的写入耗时对比

    一.MongoDB3.0.x的版本特性(相对于MongoDB2.6及以下): 增加了wiredtiger引擎: 开源的存储引擎: 支持多核CPU.充分利用内存/芯片级别缓存(注:10月14日刚刚发布的 ...

  2. mysql8.0无法给用户授权或提示You are not allowed to create a user with GRANT的问题

    提示意思是不能用grant创建用户,mysql8.0以前的版本可以使用grant在授权的时候隐式的创建用户,8.0以后已经不支持,所以必须先创建用户,然后再授权,命令如下: mysql> CRE ...

  3. springboot v2.0.3版本多数据源配置

    本篇分享的是springboot多数据源配置,在从springboot v1.5版本升级到v2.0.3时,发现之前写的多数据源的方式不可用了,捕获错误信息如: 异常:jdbcUrl is requir ...

  4. Spring boot2.0 与 2.0以前版本 跨域配置的区别

    一·简介 spring boot升级到2.0后发现继承WebMvcConfigurerAdapter实现跨域过时了,那我们就紧随潮流. 二·全局配置 2.0以前 支持跨域请求代码: import or ...

  5. 修改mongodb3.0副本集用户密码遇到的坑

    最近公司对项目安全方面的问题很是重视,进行了多次各种安全漏洞的扫描,于是乎就扫到了mongodb弱口令的问题. 在项目部署初期,因为大家对这个都不是特别重视,大概是因为觉得反正是内网项目吧,所以mon ...

  6. webpack + vuejs(都是1.0的版本) 基本配置(一)

    开始之前 本文包含以下技术,文中尽量给与详细的描述,并且附上参考链接,读者可以深入学习: 1.webpack12.Vue.js13.npm4.nodejs —- 这个就不给连接了,因为上面的连接都是在 ...

  7. UltraEdit-14.10.0.1024版本语法着色配置

    用了UltraEdit有段时间了,一直没做语法着色,当做普通文本编辑器使用,这也太委屈这个“神器”了. 今天就让它物尽其用吧.体验一把UltraEdit的语法高亮功能. 参考:http://www.1 ...

  8. 0702-spring cloud config-git仓库配置、用户授权

    一.概述 参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_environm ...

  9. 【iOS】7.4 定位服务->2.1.1 定位 - 官方框架CoreLocation: 请求用户授权

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

随机推荐

  1. SQL简单语句总结习题

    创建一个表记员工个人信息: --创建一个表 create table plspl_company_info( empno ) not null, ename ) not null, job ), ma ...

  2. Hibernate总结(二)

    在上一篇Hibernate总结(一)简单总结了一级缓存,快照,增删改查的简单使用,这一篇总结两张表的级联操作. 级联涉及到三种情况,many-many,1-many,many-1. 首先是1-many ...

  3. log4j配置文件详解

    在开发中经常会碰到日志,网上关于日志的框架也很多,像log4j.self4j.common-logging等,下面对log4j进行介绍. log4j是java开发的日志框架,具有低侵入的特点,其重点使 ...

  4. Alfresco 4 项目介绍

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; }       Alfresco 是一个开源的企业内容管理系统(ECM) ...

  5. svg-高斯模糊+swiper伦播

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. windows的IIS下的负载均衡

    来自http://www.cnblogs.com/allen0118/p/4294066.html 在大型Web应用系统中,由于请求的数据量过大以及并发的因素,导致Web系统会出现宕机的现象,解决这一 ...

  7. HTML自学基础

    关于自学HTML中遇到的各类细节问题 1.<a>表示链接标签,类似的有<img src>.链接的地址在<base>中填写.<base href="h ...

  8. Droidicon – 1600+ 漂亮的 Android 图标

    Droidicon 提供超过1600款定制图标,让你可以超级容易的把图标和徽章添加到您的应用程序中.你可以自定义你想要的各种形式的图标,给图标添加描边,透明度和颜色过滤器.包括这些 Google Ma ...

  9. Type.js – 帮助你更好的控制网页字体排版

    Type.js 是一款很好的网页字体排版工具.它可以让你使用新的 CSS 属性,在网页上试下更精细的排版控制.设置很简单.上传 type.js 到您的网站,并在你的 HTML 链接中引用.接下来,你就 ...

  10. 【干货分享】Node.js 中文学习资料和教程导航

    这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...