1. 参考如下的文档:

    https://docs.mongodb.org/manual/tutorial/enable-authentication/

           1.1. 在启用匿名验证的情况下,创建一个可以管理所有数据库用户的用户。

use admin

db.createUser(

{

user: "admin",

pwd: "admin",

roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]

}

)

1.2. 用—auth选项重新启动MongoDB服务。

>先停止和删除已有的MongoDB服务,然后用如下的命令重新安装:

"C:\Program Files\MongoDB\Server\3.0\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\3.0\etc\mongodb.conf" --dbpath "C:\Program Files\MongoDB\Server\3.0\bin\data\db" --directoryperdb --service --install --auth

(如果去掉—auth, 就是允许匿名验证)

然后net start MongoDB.

>用命令行连接Mongo,

mongo admin -u root -p root

注意,一定要带上数据库名字admin,否则会报验证失败错误。因为它会找所在数据库中的system.users表,如果不写admin数据库的名字,可能就去找test.system.users, 当然找不到,就会报验证失败的错误。

1.3. 用命令行连接上后,就可以创建其他用户了。

当在admin中创建如下权限的用户时,是对所有数据库都有效的,也就是说权限会应用到cluster中所有的数据库中。

  • dbOwner role, when scoped to the admin database
  • userAdmin role, when scoped to the admin database
  • userAdminAnyDatabase role

例子:

db.createUser(

{

user: "dbOwner",

pwd: "dbOwner",

roles: [ { role: "dbOwner", db: "admin" } ]

}

)

目前我看到最大的权限时root:

root

Provides access to the operations and all the resources of the readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin roles, restore combined.

Changed in version 3.0.7: The root has validate action on system. collections. Previously, root does not include any access to collections that begin with the system. prefix.

The root role includes privileges from the restore role.

例子:

db.createUser(

{

user: "root",

pwd: "root",

roles: [ { role: "root", db: "admin" } ]

}

)

另外还有readAnyDatabase,readWriteAnyDatabase。

更多的Mongo内置角色请看这个文章:https://docs.mongodb.org/manual/reference/built-in-roles/#userAdminAnyDatabase

上面的这些角色我试了几个,以下是体会:

userAdminAnyDatabase: 只能管理用户,不能查看collection中的数据,其他权限应该也没有。

dbAdminAnyDatabase: 只能查看db列表,可能能够增加和删除db,但是不能查看collection,其他很多权限应该也没有。

readWriteAnyDatabase: 可以对所有数据库的所有collection进行增删改查操作。

Root: 目前我所看到的最高角色,在 MongoVue中貌似可以做任何事情。

                                  但是: 以上的这些超级用户权限,在MongoVue中跟文档上描述的权限时一致的,但我用.net的API操作的时候,写入collection的时候总是会报验证失败的错误。

if (!String.IsNullOrWhiteSpace(userName))

{

var db1Credential = MongoCredential.CreateMongoCRCredential(databaseName, userName, password);

settings.Credentials = new[] { db1Credential };

}

在用.net的API操作Mongo的时候,要想写入一个db中的一个collection, 只有对单个的数据库创建的用户才是好用的。

db.createUser(

{

user: "user1",

pwd: "user1",

roles: [ { role: "dbOwner", db: "Database1" } ]

}

             如果要执行dropDatabase和createDatabase的操作,除了在单个的数据库上,还需要在admin也添加dbOwner的权限(或者其他创建数据库的权限?这个没试过。dbOwner是好用的。)

            

use admin

db.createUser(

{

user: "user1",

pwd: "user1",

roles: [ { role: "dbOwner", db: "admin" } ]

}

  

2. Mongo的验证机制:

参考这个文档:https://docs.mongodb.org/manual/core/authentication/

在Mongo3.0之前,默认的验证机制是MONGODB-CR, 从3.0开始,默认的验证机制是SCRAM-SHA-1.

貌似.net针对Mongo的API还不支持SCRAM-SHA-1,所以如果用Mongo3.0以及以后的版本,必须将Mongo的默认验证机制改成MONGODB-CR。 方法参考这个文章:http://stackoverflow.com/questions/30854155/how-to-change-default-authentication-method-from-scram-sha-1-back-to-mongodb-cr

就是在mongo的命令行中定位到admin数据库后,执行如下的命令:

var schema = db.system.version.findOne({"_id" : "authSchema"})

schema.currentVersion = 3

db.system.version.save(schema)

 如果要改回SCRAM-SHA-1,用如下的命令:

(参考: https://docs.mongodb.org/manual/release-notes/3.0-scram/ )

db.adminCommand({authSchemaUpgrade: 1});

此时schema.currentVersion为5.

3. 删除用户:

定位到所在的数据库后,运行命令db.dropUser('<username>')

Mongo的安全验证的更多相关文章

  1. mongo的身份验证和授权

    问题来源 刚装好的mongo,准备登陆进去测一把的,结果就给我报这个错,鄙人是新手,还不太清楚这个,现学一下~ Mongo的身份验证 在上一篇安装mongo的博客中(https://www.cnblo ...

  2. mongo 记得开启验证 auth = true

    dbpath=/mnt/mongodb/data/logpath=/usr/local/mongodb/log/mongodb.logauth = trueport=27017logappend=1f ...

  3. Docker Mongo数据库开启用户认证

    一.启动mongo容器的几种方式 #简化版 docker run --name mongo1 -p 21117:27017 -d mongo --noprealloc --smallfiles #自定 ...

  4. mongo创建数据库和用户

    1.linux安装mongo conf文件配置: 配置文件: dbpath=/home/data/mongodb/mongodb logpath=/home/data/logs/mongodb.log ...

  5. MongoDB用户验证和权限管理

    官方参考页面: https://docs.mongodb.com/v3.6/tutorial/enable-authentication/ https://docs.mongodb.com/v3.6/ ...

  6. [Config]Zabbix的Mongodb插件安装,centos

    1.yum install php-devel php-pear httpd-devel 2.安装mongo php驱动,pecl install mongo 3.pecl install mongo ...

  7. mongodb维护常用命令

    一,用户操作:1. #进入数据库adminuse admin2. #增加或修改用户密码db.addUser('name','pwd')3. #查看用户列表db.system.users.find()4 ...

  8. 32位linux(centos)下mongoDB的安装

    下载mongoDB wget http://downloads.mongodb.org/linux/mongodb-linux-i686-2.4.9.tgz 如果上面地址不对可以去官网自己下载http ...

  9. mongodb与spring mvc 整合

    1.pom文件添加对mongodb的倚赖 <dependency> <groupId>org.mongodb</groupId> <artifactId> ...

随机推荐

  1. [LOJ#2980][THUSCH2017]大魔法师(线段树+矩阵)

    每个线段树维护一个行向量[A,B,C,len]分别是这个区间的A,B,C区间和与区间长度,转移显然. 以及此题卡常,稍微哪里写丑了就能100->45. #include<cstdio> ...

  2. java多线程技术之条件变量

    上一篇讲述了并发包下的Lock,Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇 ...

  3. 【洛谷】2602: [ZJOI2010]数字计数【数位DP】

    P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入输出格式 输入格式: 输入文件中仅包含一行两个整数a ...

  4. 浙江省队选拔 ZJOI2015 (Round 1) 解题报告

    最近莫名其妙地喜欢上了用这种格式写各省省选的全套题解= = 今年浙江省选的出题人是算法竞赛界传说级人物陈立杰,看样子他的出题风格很有特点……ABC三题难度是严格递减的,感觉如果在做第一题的时候被卡住的 ...

  5. bzoj 4127 线段树维护绝对值之和

    因为d>=0,所以一个位置的数只会单调不降并且只会有一次穿过0. 用这个性质,我们我可在线段树中记录正数负数的个数和和,以及最大的负数以及答案. 修改操作:如果当前最大负数+d<=0,那么 ...

  6. 深入理解RESTful Web Services

    RESTful的软件架构已经多火不用多说,和MVC架构一样,很多网站服务(Web Services)都遵循RESTful设计模式,那么到底什么是RESTful Web Services呢?设计一个RE ...

  7. Node.js学习笔记(3) - 简单的curd

    这个算是不算完结的完结吧,前段时间也是看了好久的Node相关的东西,总想着去整理一下,可是当时也没有时间: 现在看来在整理的话,就有些混乱,自己也懒了,就没在整理,只是简单的记录一下 一.demo的简 ...

  8. maven 自动部署到 tomcat7

    多方搜索,终于使maven项目可以自动发布到tomcat下了. tomcat7 需要使用 tomcat-maven-plugin 的新版本,版本支持tomcat6和tomcat7,groupId也由o ...

  9. TASKER 手机在有同一个号码的三个未接电话时自动回复短信

    http://tieba.baidu.com/p/3695018030 感谢默默为Tasker吧奉献的人! 配置为>未接来电 任务为>代码>javascriptlet 代码为: va ...

  10. 《Android学习指南》文件夹

    转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描写叙述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不 ...