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

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

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

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

1 db.createUser(2   {3     user: "super_user",4     pwd: "super_user_paasswd",5     roles: [ { role: "__system", db: "admin" } ]6   }7 )

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

 1 //新建读账号 2 db.createUser( { 
 3     "user" : "rouser",//账号名称 4     "pwd": "rouserpwd",//密码 5     "customData" : { 6         //注释 7         user_abs:"read-only user for data analysis" 
 8     }, 9     "roles" : [ 
10         {11             role: "readAnyDatabase",//读所有数据库12             db: "admin"13         } 
14     ]15     },{ 
16         w: "majority" , 
17         wtimeout: 5000 
18     } 
19 )20 //新建读写账号21 db.createUser( { 
22     "user" : "rwuser",//账号名称23     "pwd": "rwuser_pwd",//密码24     "customData" : { //注释25         user_abs:"read-write user for data extractor" 
26     },27     "roles" : [ 
28         {29             role: "readWriteAnyDatabase",//读写所有数据库30             db: "admin"31         } 
32     ]33     },{ 
34         w: "majority" , 
35         wtimeout: 5000 
36     } 
37 )

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

1 db.getCollection("system.users").find({})2 3 //输出:4 //实际输入:db.getCollection("system.users").find({},{"credentials":0})5 { "_id" : "admin.super_user", "user" : "super_user", "db" : "admin", "roles" : [ { "role" : "__system", "db" : "admin" } ] }6 { "_id" : "admin.rouser", "user" : "rouser", "db" : "admin", "customData" : { "user_abs" : "read-only user for data analysis" }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }7 { "_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参数即可:

 1 #存放数据目录 2 dbpath=F:\FeaturesData\data 3 #日志文件 4 logpath=F:\FeaturesData\mongo.log 5 #Cache Size 6 wiredTigerCacheSizeGB=1 7  8 auth = true 9 logappend = true10 directoryperdb = true11 12 #执行13 # 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登陆:

 1 try:# Python 3.x 2     from urllib.parse import quote_plus 3 except ImportError:# Python 2.x 4     from urllib import quote_plus 5 from pymongo import MongoClient 6  7 #Example 8 user = ‘USER‘ 9 password = ‘PASSWORD‘10 host = ‘127.0.0.1:27017‘11 #Code12 uri = "mongodb://%s:%[email protected]%s" % (13     quote_plus(user), quote_plus(password), host)14 client = MongoClient(uri)

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

 1 //这个是我自己封装的读取Properties文件的类 2 import com.zjtj.yuanyifan.Util.PropertiesUtil; 3  4 import com.mongodb.BasicDBObject; 5 import com.mongodb.MongoClient; 6 import com.mongodb.MongoCredential; 7 import com.mongodb.ServerAddress; 8 import com.mongodb.client.FindIterable; 9 import com.mongodb.client.MongoCollection;10 11 private MongoCollection<Document> getMongoDBConnection() {12         //初始化Mongodb数据库连接,变量名我想不需要解释了13         PropertiesUtil pu = new PropertiesUtil();14         String vfdbname = pu.getPropString("vehicle_features_db_name", "vf");15         String vfdbip = pu.getPropString("vehicle_features_db_ip", "127.0.0.1");16         String vfdbport = pu.getPropString("vehicle_features_db_port", "27017");17         String vfdbuser = pu.getPropString("vehicle_features_db_user", "USER_HERE");18         String vfdbpwd  = pu.getPropString("vehicle_features_db_pwd", "PASSWD_HERE");19         try {20             21             ServerAddress sainfo = new ServerAddress(vfdbip, Integer.valueOf(vfdbport));22             List<MongoCredential> mgauth = new ArrayList<>();23             mgauth.add(MongoCredential.createCredential(vfdbuser,"admin",vfdbpwd.toCharArray()));24             MongoCollection<Document> mgdbc = new MongoClient(sainfo,mgauth).getDatabase(vfdbname).getCollection("daily_features");25             String dbgInfo = String.format("Connected to mongodb://%s:%s/%s/\n", vfdbip, vfdbport, vfdbname);26             System.out.printf(dbgInfo);27             fcc_log.info(dbgInfo);28             return mgdbc;29         } catch (Exception ex) {30             String errInfo = "Error while initializing MongoDB connection: " + ex.getMessage();31             System.err.println(errInfo);32             fcc_log.fatal(errInfo);33         }34     }

时间: 2024-08-10 23:51:20

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

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

MongoDB-——Privilege 学习大纲: 1.用户权限管理 2.用户操作 知识回顾:  本系列上一篇博文我们讲述了如何搭建环境以及配置我们的MongoDB,通过搭建环境后我们又学习了如何通过简单的命令和配置来启动关闭我们的MongoDB. 一 用户及权限管理 前言: MongoDB 作为时下最为热门的数据库,那么其安全验证也是必不可少的,否则一个没有验证的数据库暴露出去,任何人可随意操作,这将是非常危险的.我们可以通过使用为MongoDB 创建用户的方式来降低风险 1 MongoDB用

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

权限管理基础 MongoDB有很多用户roles,这里只是简单列举下命令的使用,具体的role的含义,请查阅官方文档. https://docs.mongodb.com/manual/reference/built-in-roles/#userAdmin 在启用权限验证之前,需要重启服务,开启auth: 命令使用示例: use admin; #创建用户,这里Mongo 3和Mongo 2用的方法不同了. db.createUser({user: 'sky', pwd: 'CSL', roles:

Mongodb七天总结—权限管理(2)

Mongodb权限管理 版本:Mongodb3.0 说到对数据库我安全问题我们一般就会从以下几点考虑怎么去解决数据库安全的问题. 1.最安全的是物理隔离: 2.网络隔离: 3.防火墙隔离: 4.用户名和密码: 下面我们来说说mongodb的用户名和密码认证: 认证是确定client身份的机制,默认情况下mongodb并没有开启权限认证,我们部署好MGDB之后需要进行,一般常用mongodb权限认证的方式有: 1.auth开启(在启动的时候知道--auth=true) 2.Keyfile开启 怎么

mongodb 3.2 用户权限管理配置

环境 MongoDB shell version: 3.2.6 Win 7 设置方法 用户权限设置 1.进入mongodb的shell : mongo 2.切换数据库: use admin 从3.0 版本起,默认只有 local 库,没有admin 库,需要我们自己来创建. 3.添加用户,指定用户的角色和数据库: db.createUser( { user: "admin", customData:{description:"superuser"}, pwd: &q

mongodb 2.6.6 权限管理

mongodb2.6的权限管理与2.4有很大不同,网上能看到的文章基本都是基于2.4以下的,很多并不适用.经过一番摸索终于理顺了2.6的权限管理,做下笔记. 我所用的版本是Linux 64-bit,下载地址:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.6.tgz mongodb默认不启用权限管理,访问不需要验证.要开启权限管理功能,启动时增加--auth参数. 启用后,数据库中还没有任何的用户,此时非本机客户端访问会提示错误

Linux学习之账户、权限管理

权限: Linux权限主要分为三类属主.属组和其他,分别有r.w.x三种属性 对于文件来说: r:可读,可以使用类似cat的命令查看 w:可写,可以编辑或删除此文件 x:可执行,可以在命令提示符下当做命令提交给内核运行 对于目录来说: r:可以对此目录执行ls以列出内部的文件 w:可以在此目录下创建文件 x:可以使用cd切换,也可以使用ls -l查看内部文件的详细属性信息 权限用二进制和8进制表示不同的类型 rwx 111 7 rw- 110 6 r-x 101 5 r-- 100 4 -wx

详解Linux账户和权限管理

一.管理用户账号1.用户账号在 Linux系统中,根据系统管理的需要将用户账号分为不同的类型,其拥有的权限.担任的角色也各不相同,主要包括超级用户.普通用户和程序用户.(1)超级用户:root用户是 Linux系统中默认的超级用户账号,对本主机拥有最高的权限,类似于 Windows系统中的 Administrator用户.只有当进行系统管理.维护任务时,才建议使用root用户登录系统,日常事务处理建议只使用普通用户账号.(2)普通用户:普通用户账号需要由root用户或其他管理员用户创建,拥有的权

深入浅出Zabbix 3.0 -- 第四章 主机、用户和权限管理

第四章  主机.用户和权限管理 Zabbix中主机作为一个管理单元,用来管理和组织监控项,它可以包含任意数量和类型的监控项,并且每个主机必须属于至少一个主机组.当主机中的监控项获取监控数据后,Zabbix中创建的用户就可以访问这些数据,同样这些用户必须属于至少一个用户组.你可能注意到不管是主机还是用户,在Zabbix中必须属于至少一个主机组或用户组.为什么要这么做呢?这是因为Zabbix中是通过用户组和主机组来实现用户对主机中监控数据进行访问权限的分配和管理. 4.1主机 4.1.1创建主机 Z

Linux 基础入门----用户及文件权限管理

用户及文件权限管理 实验介绍 1.Linux 中创建.删除用户,及用户组等操作. 2.Linux 中的文件权限设置. 一.Linux 用户管理 Linux 是一个可以实现多用户登陆的操作系统,比如“李雷”和“韩梅梅”都可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件.但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理 和 权限机制 ,不同用户不可以轻易地查看.修改彼此的文件. 下面我们就来学