本文主要介绍了MongoDB的账户新建,权限管理(简单的),以及在Python,Java和默认客户端中的登陆。

默认的MongoDB是没有账户权限管理的,也就是说,不需要密码即可登陆,即可拥有读写的权限(当然,重启服务还是需要在本机执行)。
这个对于自己做实验室足够使用的,但是对于开放数据给他人使用时很不安全的,倒不是怕窃取数据,主要是怕某些猪队友一下把db给drop了,如果没有容灾备份哭都来不及。
对于MongoDB的权限配置,我看着官方文档和别人的笔记也算是踩过坑的人了,把踩过的坑写出来给大家看一下,减少别人踩坑的次数。主要踩的坑还是集中在不同的语言的登陆上,这一方面资料比较少。

首先切换到admin数据库
 use admin 
然后创建一个超级用户,其中user和pwd的值可以自己随便定义。

 db.createUser(
{
user: "super_user",
pwd: "super_user_paasswd",
roles: [ { role: "__system", db: "admin" } ]
}
)

随后我们新建两个用户,一个具有读写权限,一个只有读取的权限。
读写权限的账号给所有需要写数据的服务和程序使用,读取的账号给同事查看和聚集数据的时候使用。

 //新建读账号
db.createUser( {
"user" : "rouser",//账号名称
"pwd": "rouserpwd",//密码
"customData" : {
//注释
user_abs:"read-only user for data analysis"
},
"roles" : [
{
role: "readAnyDatabase",//读所有数据库
db: "admin"
}
]
},{
w: "majority" ,
wtimeout: 5000
}
)
//新建读写账号
db.createUser( {
"user" : "rwuser",//账号名称
"pwd": "rwuser_pwd",//密码
"customData" : { //注释
user_abs:"read-write user for data extractor"
},
"roles" : [
{
role: "readWriteAnyDatabase",//读写所有数据库
db: "admin"
}
]
},{
w: "majority" ,
wtimeout: 5000
}
)

创建完成以后,首先检查一下是不是新建好了,简单的说,就是看一下admin里面是不是记录了你要的用户账户:

 db.getCollection("system.users").find({})

 //输出:
//实际输入:db.getCollection("system.users").find({},{"credentials":0})
{ "_id" : "admin.super_user", "user" : "super_user", "db" : "admin", "roles" : [ { "role" : "__system", "db" : "admin" } ] }
{ "_id" : "admin.rouser", "user" : "rouser", "db" : "admin", "customData" : { "user_abs" : "read-only user for data analysis" }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
{ "_id" : "admin.rwuser", "user" : "rwuser", "db" : "admin", "customData" : { "user_abs" : "read-write user for data extractor" }, "roles" : [ { "role" : "readWriteAnyDatabase", "db" : "admin" } ] }

看到输出了所有的账户信息,就OK了,下一步就是重新启动服务,在重启服务之前,需要在config文件中设置`auth = true`,这样才会需要登录,否则什么都没变
以下是我的Config文件,最后一行是重新安装服务的Command,如果没有安装过,使用--install参数即可:

 #存放数据目录
dbpath=F:\FeaturesData\data
#日志文件
logpath=F:\FeaturesData\mongo.log
#Cache Size
wiredTigerCacheSizeGB= auth = true
logappend = true
directoryperdb = true #执行
# mongod --config "F:\FeaturesData\mongo.config" --serviceName "MongoDB" --reinstall

这样启动以后Mongo就有权限了,这个时候的登陆要使用账号密码:
 mongo" -u super_user -p super_user_paasswd --authenticationDatabase admin 127.0.0.1/test 
其中127.0.0.1/test是IP/数据库名称以连接默认数据库。

这个时候你可以试一下使用只读账号删库或者删集合,会出现drop failed: MongoError: not authorized on test to execute command

意味着你没有权限删除,这个时候不要说删除,插入操作也是不能做的。

除了使用默认的客户端连接,我们还可以使用其它语言的Driver去连接。

这里考虑使用Python和Java两种情况
首先考虑在Python中的连接,我们使用URI登陆:

 try:# Python 3.x
from urllib.parse import quote_plus
except ImportError:# Python 2.x
from urllib import quote_plus
from pymongo import MongoClient #Example
user = 'USER'
password = 'PASSWORD'
host = '127.0.0.1:27017'
#Code
uri = "mongodb://%s:%s@%s" % (
quote_plus(user), quote_plus(password), host)
client = MongoClient(uri)

再考虑使用Java登陆(稍微麻烦一点):

 //这个是我自己封装的读取Properties文件的类
import com.zjtj.yuanyifan.Util.PropertiesUtil; import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection; private MongoCollection<Document> getMongoDBConnection() {
//初始化Mongodb数据库连接,变量名我想不需要解释了
PropertiesUtil pu = new PropertiesUtil();
String vfdbname = pu.getPropString("vehicle_features_db_name", "vf");
String vfdbip = pu.getPropString("vehicle_features_db_ip", "127.0.0.1");
String vfdbport = pu.getPropString("vehicle_features_db_port", "27017");
String vfdbuser = pu.getPropString("vehicle_features_db_user", "USER_HERE");
String vfdbpwd = pu.getPropString("vehicle_features_db_pwd", "PASSWD_HERE");
try { ServerAddress sainfo = new ServerAddress(vfdbip, Integer.valueOf(vfdbport));
List<MongoCredential> mgauth = new ArrayList<>();
mgauth.add(MongoCredential.createCredential(vfdbuser,"admin",vfdbpwd.toCharArray()));
MongoCollection<Document> mgdbc = new MongoClient(sainfo,mgauth).getDatabase(vfdbname).getCollection("daily_features");
String dbgInfo = String.format("Connected to mongodb://%s:%s/%s/\n", vfdbip, vfdbport, vfdbname);
System.out.printf(dbgInfo);
fcc_log.info(dbgInfo);
return mgdbc;
} catch (Exception ex) {
String errInfo = "Error while initializing MongoDB connection: " + ex.getMessage();
System.err.println(errInfo);
fcc_log.fatal(errInfo);
}
}

MongoDB的账户与权限管理及在Python与Java中的登陆的更多相关文章

  1. MongoDB的账户与权限管理及在Python与Java中的登录

    本文主要介绍了MongoDB的账户新建,权限管理(简单的),以及在Python,Java和默认客户端中的登陆. 默认的MongoDB是没有账户权限管理的,也就是说,不需要密码即可登陆,即可拥有读写的权 ...

  2. MongoDB系列---用户及权限管理02

    MongoDB-——Privilege 学习大纲: 1.用户权限管理 2.用户操作 知识回顾:  本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过 ...

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

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

  4. mongodb的安装和权限管理

    mongodb4.0已经发布,但是鉴于线上环境更多的是使用旧版本的mongodb,我们这里使用的mongodb3.4版本. 官网下载地址为:https://fastdl.mongodb.org/lin ...

  5. MongoDB 学习笔记之 权限管理基础

    权限管理基础 MongoDB有很多用户roles,这里只是简单列举下命令的使用,具体的role的含义,请查阅官方文档. https://docs.mongodb.com/manual/referenc ...

  6. mongodb 3.2 用户权限管理配置

    使用mongodb 有段时间了,由于是在内网使用,便没有设置权限,一直是裸奔. 最近有时间,研究了下mongodb 3.2 的用户权限配置,网上有许多用户权限配置的文章,不过大多是之前版本,有些出入, ...

  7. MongoDB——权限管理

    MongoDB--权限管理 MongoDB默认是没有权限验证的,但生产环境中,没有权限控制是很不安全的. 我们先不详谈太多概念,直接动手创建两个典型的账号: 超级管理员,类似sql server的sa ...

  8. TFS 2010 使用手册(三)权限管理

    本文参考了 蔚蓝的宁静 http://www.cnblogs.com/tymo/archive/2011/03/21/1990550.html 等文章. 1.权限说明 1.1 权限关联 TFS的权限与 ...

  9. (大数据工程师学习路径)第一步 Linux 基础入门----用户及文件权限管理

    用户及文件权限管理 实验介绍 1.Linux 中创建.删除用户,及用户组等操作. 2.Linux 中的文件权限设置. 一.Linux 用户管理 Linux 是一个可以实现多用户登陆的操作系统,比如“李 ...

随机推荐

  1. ios开发环境配置及cordova安装与常用命令

    一.ios开发环境配置 1.首先要有台Mac Book,如果有Mac Book,跳过步骤2.3.4,如果没有,执行步骤2.3.4: 2.下载并安装VMware Workstation,最好是下最新版本 ...

  2. (简单) POJ 3126 Prime Path,BFS。

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

  3. Javascript Fromdata 与jQuery 实现Ajax文件上传以及文件的删除

    前端HTML代码: <!DOCTYPE html> <html> <head> <title>ajax</title> <script ...

  4. linux动态链接库---一篇讲尽

    一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: tmux: error while loading shared libraries: libevent-1.4.s ...

  5. angular中的$http配置和参数

    依赖:$httpBackend $cacheFactory $rootScope $q $injector 使用:$http(config); 参数: method:字符串,请求方法. url:字符串 ...

  6. 小偷网站工具--Teleport Ultra

    可以克隆别人网站的工具 http://jingyan.baidu.com/article/219f4bf7dce58bde442d3836.html

  7. 你会做Web上的用户登录功能吗?

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...

  8. 查看错误日志发现有两个警告(ignored in --skip-name-resolve mode)

    2016-08-02 17:30:26 17374 [Warning] 'user' entry '@losnau-223.com' ignored in --skip-name-resolve mo ...

  9. java中集合框架

    java平台提供了一个全新的集合框架."集合框架"主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型. 在很大程度上,一旦您理解了接口,您就理解了框架.虽然您总要创建接 ...

  10. 【转】java调用存储过程和函数

    一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...