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相同。
  • 首先验证下非配置认证模块的访问:

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

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

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

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

[root@fo169 bin]# cat mongodb.conf
systemLog:
destination: file
path: "/data/auth/log/mongod.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/data/auth/db"
directoryPerDB: true
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 4
directoryForIndexes: true
journalCompressor: zlib
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
net:
port: 27017
processManagement:
fork: true
security:
authorization: enabled
  • 创建授权用户(超级管理员):

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

[root@fo169 bin]# ./mongo
MongoDB shell version: 3.0.
connecting to: test
Server has startup warnings:
--30T16::36.127+ I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
--30T16::36.127+ I CONTROL [initandlisten]
> use admin
switched to db admin
> db.createUser(
... {
... user: "ljaiadmin",
... pwd: "123456",
... roles: [ { role: "root", db: "admin" } ]
... }
... )
Successfully added user: {
"user" : "ljaiadmin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}

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

[root@fo169 bin]# ./mongo
MongoDB shell version: 3.0.
connecting to: test
> show dbs (注:此时查看已提示没有授权执行listDatabases命令了)
--30T16::31.131+ E QUERY Error: listDatabases failed:{
"ok" : ,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" :
}
at Error (<anonymous>)
at Mongo.getDBs (src/mongo/shell/mongo.js::)
at shellHelper.show (src/mongo/shell/utils.js::)
at shellHelper (src/mongo/shell/utils.js::)
at (shellhelp2):: at src/mongo/shell/mongo.js:
> use admin
switched to db admin
> db.auth('ljaiadmin','123456') (注:切换到admin用户进行授权验证) > show dbs (注:验证完成后,就可以读写等操作)
admin .000GB
local .000GB
test100 .000GB
test2 .000GB
> use test2
switched to db test2
> show tables
test
test2
> db.test2.find()
{ "_id" : ObjectId("5632cf116207909a76446af7"), "name" : "" }
> db.test2.drop()
true
> db.dropDatabase()
{ "dropped" : "test2", "ok" : }
> show dbs
admin .000GB
local .000GB
test100 .000GB
> use test100
switched to db test100
> db.test111.insert({"test":"test"})
WriteResult({ "nInserted" : })
> db.test111.find()
{ "_id" : ObjectId("56332db373f771b3d95638bb"), "test" : "test" }
> use admin
switched to db admin
> show users
{
"_id" : "admin.ljaiadmin",
"user" : "ljaiadmin",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
>
  • 创建普通用户

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

> use test123
switched to db test123
> db.createUser(
... {
... user: "rwtest123",
... pwd: "123456",
... roles: [ { role: "readWrite", db: "test123" } ]
... }
... )
Successfully added user: {
"user" : "rwtest123",
"roles" : [
{
"role" : "readWrite",
"db" : "test123"
}
]
}

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

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. 后缀名为properties,config和xml的文件内容读取

    1.先建立文件(后缀名为properties和config) 2.读取类建立 public class Read{ public static Properties  properties = new ...

  2. 实用的Scala泛函编程

    既然谈到实用编程,就应该不单止了解试试一个新的编程语言那么简单了,最好通过实际的开发项目实例来演示如何编程.心目中已经有了一些设想:想用Scala泛函编程搞一个开源的数据平台应用系统,也就是在云平台P ...

  3. POJ 1061 青蛙的约会 扩展欧几里得

    扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...

  4. Fiddler (三) Composer创建和发送HTTP Request

      之前已经写过两篇Fiddler的文章了,分别是[Fiddler教程] [Fiddler script用法].  我准备把Fiddler写成一个系列. Fiddler的功能还有很多, 很多功能都没有 ...

  5. Strip JS – 低侵入,响应式的 Lightbox 效果

    Strip  是一个灯箱效果插件,显示的时候只会覆盖部分的页面,这使得侵扰程度较低,并留出了空间与页面上的大屏幕,同时给予小型移动设备上的经典灯箱体验.Strp JS 基于 jQuery 库实现,支持 ...

  6. 【特别推荐】几款极好的 JavaScript 下拉列表插件

    表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...

  7. mysql在Windows下使用mysqldump命令备份数据库

    在cmd窗口中使用mysqldump命令首先需要配置环境变量 1,在计算机中找到MySQL的安装位置,找到MySQL Workbench,比如我的是C:\Program Files\MySQL\MyS ...

  8. ALV的颜色分为行的颜色、列的颜色和CELL的颜色

    ALV的颜色分为行的颜色.列的颜色和CELL的颜色.任务要求,将一定的Tabellenfeld 用黄色填充,也就是说CELL的颜色 DATA:ls_cellcolorTYPElvc_s_scol,co ...

  9. BP神经网络实现

    # -*- coding: utf-8 -*- # -------------------------------------------------------------------------- ...

  10. SharePoint 2013 BCS

    http://liandove.blog.51cto.com/176335/1247410 http://liandove.blog.51cto.com/176335/1249339 http://l ...