MongoDB3.0.x版本用户授权配置(单机环境)
MongoDB数据库默认情况下是没有做权限控制的,只要能够连接所开放的端口就能进行访问,而且拥有root级别的权限;对于生产环境而言是极不安全的,所以需要建立用户,进行授权控制。
单机环境下的用户授权模块配置:
MongoDB的社区版本中有两个模块可以控制用户的访问:
首先验证下非配置认证模块的访问:
- [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版本用户授权配置(单机环境)的更多相关文章
- 记录一次MongoDB3.0.6版本wiredtiger与MMAPv1引擎的写入耗时对比
一.MongoDB3.0.x的版本特性(相对于MongoDB2.6及以下): 增加了wiredtiger引擎: 开源的存储引擎: 支持多核CPU.充分利用内存/芯片级别缓存(注:10月14日刚刚发布的 ...
- mysql8.0无法给用户授权或提示You are not allowed to create a user with GRANT的问题
提示意思是不能用grant创建用户,mysql8.0以前的版本可以使用grant在授权的时候隐式的创建用户,8.0以后已经不支持,所以必须先创建用户,然后再授权,命令如下: mysql> CRE ...
- springboot v2.0.3版本多数据源配置
本篇分享的是springboot多数据源配置,在从springboot v1.5版本升级到v2.0.3时,发现之前写的多数据源的方式不可用了,捕获错误信息如: 异常:jdbcUrl is requir ...
- Spring boot2.0 与 2.0以前版本 跨域配置的区别
一·简介 spring boot升级到2.0后发现继承WebMvcConfigurerAdapter实现跨域过时了,那我们就紧随潮流. 二·全局配置 2.0以前 支持跨域请求代码: import or ...
- 修改mongodb3.0副本集用户密码遇到的坑
最近公司对项目安全方面的问题很是重视,进行了多次各种安全漏洞的扫描,于是乎就扫到了mongodb弱口令的问题. 在项目部署初期,因为大家对这个都不是特别重视,大概是因为觉得反正是内网项目吧,所以mon ...
- webpack + vuejs(都是1.0的版本) 基本配置(一)
开始之前 本文包含以下技术,文中尽量给与详细的描述,并且附上参考链接,读者可以深入学习: 1.webpack12.Vue.js13.npm4.nodejs —- 这个就不给连接了,因为上面的连接都是在 ...
- UltraEdit-14.10.0.1024版本语法着色配置
用了UltraEdit有段时间了,一直没做语法着色,当做普通文本编辑器使用,这也太委屈这个“神器”了. 今天就让它物尽其用吧.体验一把UltraEdit的语法高亮功能. 参考:http://www.1 ...
- 0702-spring cloud config-git仓库配置、用户授权
一.概述 参看地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#_environm ...
- 【iOS】7.4 定位服务->2.1.1 定位 - 官方框架CoreLocation: 请求用户授权
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...
随机推荐
- SQL简单语句总结习题
创建一个表记员工个人信息: --创建一个表 create table plspl_company_info( empno ) not null, ename ) not null, job ), ma ...
- Hibernate总结(二)
在上一篇Hibernate总结(一)简单总结了一级缓存,快照,增删改查的简单使用,这一篇总结两张表的级联操作. 级联涉及到三种情况,many-many,1-many,many-1. 首先是1-many ...
- log4j配置文件详解
在开发中经常会碰到日志,网上关于日志的框架也很多,像log4j.self4j.common-logging等,下面对log4j进行介绍. log4j是java开发的日志框架,具有低侵入的特点,其重点使 ...
- Alfresco 4 项目介绍
body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } Alfresco 是一个开源的企业内容管理系统(ECM) ...
- svg-高斯模糊+swiper伦播
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- windows的IIS下的负载均衡
来自http://www.cnblogs.com/allen0118/p/4294066.html 在大型Web应用系统中,由于请求的数据量过大以及并发的因素,导致Web系统会出现宕机的现象,解决这一 ...
- HTML自学基础
关于自学HTML中遇到的各类细节问题 1.<a>表示链接标签,类似的有<img src>.链接的地址在<base>中填写.<base href="h ...
- Droidicon – 1600+ 漂亮的 Android 图标
Droidicon 提供超过1600款定制图标,让你可以超级容易的把图标和徽章添加到您的应用程序中.你可以自定义你想要的各种形式的图标,给图标添加描边,透明度和颜色过滤器.包括这些 Google Ma ...
- Type.js – 帮助你更好的控制网页字体排版
Type.js 是一款很好的网页字体排版工具.它可以让你使用新的 CSS 属性,在网页上试下更精细的排版控制.设置很简单.上传 type.js 到您的网站,并在你的 HTML 链接中引用.接下来,你就 ...
- 【干货分享】Node.js 中文学习资料和教程导航
这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...