MongoDB的账户与权限管理及在Python与Java中的登陆
本文主要介绍了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中的登陆的更多相关文章
- MongoDB的账户与权限管理及在Python与Java中的登录
本文主要介绍了MongoDB的账户新建,权限管理(简单的),以及在Python,Java和默认客户端中的登陆. 默认的MongoDB是没有账户权限管理的,也就是说,不需要密码即可登陆,即可拥有读写的权 ...
- MongoDB系列---用户及权限管理02
MongoDB-——Privilege 学习大纲: 1.用户权限管理 2.用户操作 知识回顾: 本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过 ...
- MongoDB用户验证和权限管理
官方参考页面: https://docs.mongodb.com/v3.6/tutorial/enable-authentication/ https://docs.mongodb.com/v3.6/ ...
- mongodb的安装和权限管理
mongodb4.0已经发布,但是鉴于线上环境更多的是使用旧版本的mongodb,我们这里使用的mongodb3.4版本. 官网下载地址为:https://fastdl.mongodb.org/lin ...
- MongoDB 学习笔记之 权限管理基础
权限管理基础 MongoDB有很多用户roles,这里只是简单列举下命令的使用,具体的role的含义,请查阅官方文档. https://docs.mongodb.com/manual/referenc ...
- mongodb 3.2 用户权限管理配置
使用mongodb 有段时间了,由于是在内网使用,便没有设置权限,一直是裸奔. 最近有时间,研究了下mongodb 3.2 的用户权限配置,网上有许多用户权限配置的文章,不过大多是之前版本,有些出入, ...
- MongoDB——权限管理
MongoDB--权限管理 MongoDB默认是没有权限验证的,但生产环境中,没有权限控制是很不安全的. 我们先不详谈太多概念,直接动手创建两个典型的账号: 超级管理员,类似sql server的sa ...
- TFS 2010 使用手册(三)权限管理
本文参考了 蔚蓝的宁静 http://www.cnblogs.com/tymo/archive/2011/03/21/1990550.html 等文章. 1.权限说明 1.1 权限关联 TFS的权限与 ...
- (大数据工程师学习路径)第一步 Linux 基础入门----用户及文件权限管理
用户及文件权限管理 实验介绍 1.Linux 中创建.删除用户,及用户组等操作. 2.Linux 中的文件权限设置. 一.Linux 用户管理 Linux 是一个可以实现多用户登陆的操作系统,比如“李 ...
随机推荐
- (中等) CF 585B Phillip and Trains,BFS。
The mobile application store has a new game called "Subway Roller". The protagonist of the ...
- ACM录 之 输入输出。
—— 简单介绍一下ACM里面的输入输出... —— 主要说C++的输入输出(其实其他的我不会...). —— C++里面有输入输出流,也就是cin和cout,用起来也算是比较方便吧... —— 但是, ...
- 配置 Gitblit 进行 Git 代码管理
配置 Gitblit 进行 Git 代码管理 环境 CentOS 7 x64 IP: 10.6.0.2 首先需要安装jdk 安装步骤 就略过了 下载最新版本 gitblit wget http:/ ...
- 函数之return
return语句用来从一个函数 返回 即跳出函数.我们也可选从函数 返回一个值 .使用字面意义上的语句~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 例7.7 使用字面意义上的语句 ...
- PHP 正则小解
正则表达式(Regular Expression) 正则表达式系统: 1.POSIX 2.Perl PHP中使用的regex是PCRE: NOTE:PCRE(Perl兼容正则表达式,Perl Comp ...
- FZU 1063 三维扫描
水题.DFS求连通块. #include<cstdio> #include<cstring> #include<cmath> #include <iomani ...
- 单位冲击响应与频响以及FIR实现代码(C语言)(转)
源:FIR数字滤波器C语言 1.单位冲击响应与频响 就如同之前所说的一样,使用下图所示的单位冲击响应,所设计的滤波器,是无法实现的. 现在,让我们看看其这个滤波器的频响.所谓频响,就是计算其单位冲击响 ...
- Java使用POI实现数据导出excel报表
Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...
- Mac OS10.11更新ruby,gem,安装cocoapods
1.装cocoapods,ruby版本忒低->开始更新ruby->开始更新gem,这是一条不归路啊同志们,各种permission denied,各种路径不存在,各种路径没有读写权限,各种 ...
- Memcached源码分析
作者:Calix,转载请注明出处:http://calixwu.com 最近研究了一下memcached的源码,在这里系统总结了一下笔记和理解,写了几 篇源码分析和大家分享,整个系列分为“结构篇”和“ ...