`

Mongodb安全认证及Java调用

 
阅读更多

Mongodb安全认证在单实例和副本集两种情况下不太一样,单实例相对简单,只要在启动时加上 --auth参数即可,但副本集则需要keyfile。

 

一、单实例

1.启动服务(先不要加auth参数)

2.登陆后切换到admin库并添加管理员账号

  2.1  创建系统管理员用户

默认条件下,超级管理员只能用于帐号管理,不能进行其他数据库操作,可以通过自己给自己授权实现。生产环境中的管理员,如果某个帐号包含了角色userAdminAnyDatabase或者userAdmin,就应该仅仅用于帐号和角色管理,不应该再授予别的角色了。

(1)我们首先就要建立一个超级管理员,然后再用超级管理员建立其他帐号:

   use admin

   db.addUser( { user: "superman", pwd: "talent", roles: [ "userAdminAnyDatabase" ] } )

2)为帐号启用admin数据库认证,这样他就可以操作admin数据库了。
   db.auth("root", "123456")  //为账号授权
   db.system.users.find(); //查看当前已有的用户信息

 

3)使用用刚才的超级帐号登录数据库(admin)mongo localhost:27017admin -u superman -p superman

现在,我们就可以为其他数据库添加用户了:

比如test库

use test

db.addUser("text","text")

授予这个用户的权限:(必须要,否则无法进行读写操作)

db.auth("text","text")

4)现在可以用新用户登录并且操作test数据库了

 

3.关闭本地例外登录方式

一旦拥有了超级管理员,就可以考虑关闭本地例外方式登录了

方法如下:

重启数据库,启动时候加上--setParameter enableLocalhostAuthBypass=0即可,这样登录的话就必须要用账户认证了

4.删除用户

删除用户要针对某个数据库进行删除

> use test

switched to db test

> db.removeUser("superman11111")

5.修改用户密码

普通用户只能修改自己的密码,userAdmin角色帐号可以修改其他用户密码

例如:

mongo 192.168.69.54:40000/admin -u superman -p superman

use test

db.changeUserPassword("test","111")

二、副本集认证

副本集总体思路是用户名、密码和keyfile文件,keyfile需要各个副本集服务启动时加载而且要是同一文件,然后在操作库是需要用户名、密码

KeyFile文件必须满足条件:

(1)至少6个字符,小于1024字节

(2)认证时候不考虑文件中空白字符

(3)连接到副本集的成员和mongos进成的keyfile文件内容必须一样

(4)必须是base64编码,但是不能有等号

(5)文件权限必须是x00,也就是说,不能分配任何权限给group成员和other成员

注:win下可以通过记事本文件,输入任意内容,删除后缀名后使用,是否可行还在试验

 

以副本集sh0为例:(以下为linux系统操作,win系统出了创建keyfile文件不一样 其他相同)

1.生成keyFile文件:

54上执行:

[root@54 ~]# openssl rand -base64 100 > /mongodb/scheme2/keyfile0 --文件内容采base64编码,一共100个字符

2.修改文件权限:

[root@54 ~]# chmod 600 /mongodb/scheme2/keyfile0

把生成的文件拷贝到副本集剩余各台机器上,存放的目录可以不一样,注意权限。

3.三台机器启动时指定--keyFile选项

numactl --interleave=all  mongod  --replSet sh0 --port 10000 \

--dbpath=/mongodb/scheme2/sh0/data --logpath=/mongodb/scheme2/sh0/logs/sh0.log \

--logappend --fork --directoryperdb --bind_ip=127.0.0.1,192.168.69.54 --nohttpinterface \

--keyFile=/mongodb/scheme2/keyfile0

这样,没有这个文件的机器就无法加入副本集,Sh1sh2副本集的操作类似。

开启了keyFile,隐含就开启了auth,这个时候连接副本集就需要进行认证了,否则只能通过本地例外方式操作数据库。

在副本集中添加用户需要在服务未加--keyFile参数启动的情况加按照单实例方法添加(访问任意一个副本器操作,其他副本集会自动同步),账户添加、授权成功后重新加入keyFile启动服务,即可完成并使用。

 

副本集+分片环境下的认证

 

结合上面的两种环境的认证方式,可以实现副本集+分片环境中安全认证,需要注意以下几点

 

1.在分片集群环境中,副本集内成员之间需要用keyFile认证,mongos与配置服务器,副本集之间也要keyFile认证,集群所有mongodmongos实例使用内容相同的keyFile文件。

2.进行初始化,修改副本集时,都从本地例外登录进行操作

3.由于启用了认证,需要建立一个管理员帐号,才能从远程登录。建立管理员帐户,利用管理员账户从远程登录后,需要建立一个可以操作某个数据库的用户,客户端就用这个用户访问数据库。

4.分片集群中的管理员帐号需要具备配置服务器中adminconfig数据库的读写权限,才能进行分片相关操作

5.集群中每个分片有自己的admin数据库,存储了集群的各自的证书和访问权限。如果需要单独远程登录分片,可以按照3.2的办法建立用户

相关操作如下:

1.启动集群中的配置服务器,路由进程和副本集,每个进程都要指定KeyFile文件,而且每个进程的keyfile内容相同,详细操作见3.2

2.初始化副本集。

3. 连接mongos,为集群建立管理员帐号和普通帐号,步骤如下;

(1)建立管理员帐号

管理员需要具备对集群中配置服务器的读写权限,这些权限包括:

建立新的普通管理员,用于客户端连接集群中的数据库;

分片相关权限,例如查看分片状态,启用分片,设置片键等操纵。

首先用本地例外方式登录,建立管理员帐号:

[root@54 ~]# mongo --port 30000

mongos> use admin

db.addUser( { user: "superman",

 pwd: "superman",

 roles: [ "clusterAdmin","userAdminAnyDatabase","dbAdminAnyDatabase","readWriteAnyDatabase" ] } )


 

mongos> db.auth("superman","superman")


 

mongos> use config

switched to db config

mongos> db.addUser( { user: "superman",

  pwd: "superman",

  roles: [ "clusterAdmin","userAdminAnyDatabase","dbAdminAnyDatabase","readWriteAnyDatabase" ] } )

mongos> db.auth("superman","superman")


(2)
用上面建立的管理员帐号登录mongos进程,对数据库(比如test)启用分片,设置集合片键。

 

3)用管理员账户登录,建立新账户,让他可以读写数据库test

[root@54 ~]# mongo localhost:30000/admin -u superman -p superman

mongos> use test

switched to db test

mongos> db.addUser("test","test")

{

        "user" : "test",

        "readOnly" : false,

        "pwd" : "a6de521abefc2fed4f5876855a3484f5",

        "_id" : ObjectId("51fb5d4ecaa5917203f37f63")

}

mongos> db.auth("test","test")

1

4)用新帐号test登录,操作数据库test

[root@54 ~]# mongo localhost:30000/test -u test -p test            

MongoDB shell version: 2.4.4

connecting to: localhost:30000/test

> for( var i = 1; i < 100000; i++ ) db.test.insert( { x:i, C_ID:i } );

说明:为分片集群启用认证后,本地例外方式登录由于只具备admin数据库读写权限,无法进行分片操作。对本例来讲,添加分片,查看分片状态等操作都需要用superman帐号登录才行。执行数据库test操作用test帐号,这个帐号就是提供给客户端的帐号。

 

四 java操作中用户验证登陆

对于认证启动的服务,在java中操作在原有基础上增加一部db验证即可

DB db = mongo.getDB("dbname");

boolean auth = db.authenticate("name","password".toCharArray());

验证成功则返回true 否则返回false

注:db验证只能一次,如果成功后就不能继续验证,否则会报重复验证异常

然就就可按需求进行相关操作

 

部分参考 http://www.91linux.com/html/article/database/MongoDB/2013/0923/22679.html

相关参考 http://www.linuxidc.com/Linux/2012-06/63588.htm

http://www.dotblogs.com.tw/newmonkey48/archive/2012/12/05/85431.aspx

http://www.cnblogs.com/-clq/archive/2012/03/02/2376972.html

http://blog.csdn.net/lzy_1515/article/details/7027474

http://www.blogjava.net/anchor110/articles/385978.html

 

http://www.oschina.net/code/snippet_35115_2888

http://blog.sina.com.cn/s/blog_8413c1e201019l4e.html

http://www.linuxidc.com/Linux/2013-07/86926.htm

http://www.cnblogs.com/zcy_soft/archive/2011/04/09/2010578.html

 

分享到:
评论

相关推荐

    真实可用的mongodb下周地址.txt

    视频目录: 01-mongodb文档型数据库特点介绍 01-NoSQL简介 02-mongodb安装过程 02-mongodb操作1 03-mongodb操作2 ...04-mongodb操作3 ...06-索引的使用 ...09-mongoDB备份与恢复 ...12-使用java操作mongodb

    springMongodb参考文档中文版

    使用Spring Data MongoDB和MongoDB 3.0 17.1.1。配置选项 17.1.2。WriteConcern和WriteConcernChecking 17.1.3。认证 17.1.4。服务器端验证 17.1.5。其他事情要注意 附录 附录A:命名空间参考 元素 附录B:Poppers...

    MongoDB权威指南(中文版)高清

    1098.1.3 停止MongoDB 1108.2 监控 1108.2.1 使用管理接口 1108.2.2 serverStatus 1128.2.3 mongostat 1138.2.4 第三方插件 1138.3 安全和认证 1148.3.1 认证的基础知识 1148.3.2 认证的工作原理 ...

    springmvc4.0+mongodb3.0 demo

    本项目以spring4.0+mongodb3.0为基础开发简易demo,对mongodb进行权限认证,简单增删改查,mapreduce,aggregate操作简单演示,java项目,非maven项目,使用之前先配好mongodb及其修改mongodb.properties里参数。

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    注重实战,通过实际中的案例为读者讲解使用MongoDB时遇到的各种问题,并给出了解决方案。本书旨在帮助云计算初学者迅速掌握MongoDB数据库,提升读者在云计算实践中的应用和开发能力。同时本书极强的系统性和大量翔实...

    电子书:MongoDB权威指南(中文版)

    1078.1.2 配置文件 1098.1.3 停止MongoDB 1108.2 监控 1108.2.1 使用管理接口 1108.2.2 serverStatus 1128.2.3 mongostat 1138.2.4 第三方插件 1138.3 安全和认证 1148.3.1 认证的基础知识 1148.3...

    MongoDB_Demo

    //1、通过连接认证获取MongoDB连接 MongoClient mongoClient = new MongoClient(addrs,credentials); MongoDatabase mongoDatabase = mongoClient.getDatabase("test"); System.out.println("1--Connect ...

    MongoDB权威指南 中文版第一版

    在项目中灵活运用面向文档的存储方式。...了解监控、安全和认证、备份和修复等内容。建立主从集群和自动故障恢复复制。利用分片水平扩展MongoDB,了解其对应用的影响。Java、PHP、Python和Ruby的应用实例应有尽有。

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    注重实战,通过实际中的案例为读者讲解使用MongoDB时遇到的各种问题,并给出了解决方案。本书旨在帮助云计算初学者迅速掌握MongoDB数据库,提升读者在云计算实践中的应用和开发能力。同时本书极强的系统性和大量翔实...

    mongodb运维_动力节点Java学院整理

    3. 安全认证 4. 备份和恢复, 下面我们就一点一点的讲解。 一:安装部署  我之前的文章都是采用console程序来承载,不过在生产环境中这并不是最佳实践,谁也不愿意在机器重启后满地找牙似找mongodb,在mongodb...

    基于java的校园二手交易网站.zip

    项目简介: 本项目旨在开发一个基于Java技术的校园二手交易网站...数据库管理:使用MySQL或MongoDB进行数据存储和管理,保证数据的安全性和高效检索。 安全措施:实施SSL加密、用户认证和授权机制,确保交易的安全性。

    基于springboot+mongodb搭建的简约个人博客系统源码+项目说明.zip

    【资源说明】 1、基于springboot+mongodb搭建的简约个人博客系统源码+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业... - 跨域认证:jwt ## 项目构建

    经过改造的mongo-java-driver-2.14.3.jar.zip

    使用此资源可以在kettle里面使用mongo input组件连接有用户名和密码认证的mongodb

    基于Java的在线购物系统的设计与实现1.rar

    用户认证与授权:采用安全的用户认证和授权机制,确保用户身份的安全性和权限的控制。 数据加密:对用户敏感信息和交易数据进行加密处理,保护用户隐私和数据安全。 防止注入攻击:使用参数化查询或者ORM框架来防止...

    基于JAVA的网络通讯系统设计与实现.rar

    数据存储:可以使用关系型数据库如MySQL或非关系型数据库如MongoDB来存储用户信息、消息记录等数据。 安全性考虑: 数据加密:对用户登录、消息传输等敏感信息进行加密处理,保障数据的机密性和完整性。 身份认证:...

    基于java的聊天系统的设计于实现.rar

    数据存储:可以使用关系型数据库如MySQL或非关系型数据库如MongoDB来存储用户信息、消息记录等数据。 安全性考虑: 数据加密:对用户登录、消息传输等敏感信息进行加密处理,保障数据的机密性和完整性。 身份认证:...

    大数据技术开发环境搭建.docx

    MongoDB安装和使用 83 Neo4j安装和使用 96 安装Spark 103 使用 Spark Shell 编写代码 104 Scala独立应用编程 106 Java独立应用编程 109 使用Eclipse编写Spark应用程序(scala+sbt) 112 使用Eclipse编写Spark...

    校园二手交易网站,主要为在校大学生提供一个要交易二手物品的展示平台.zip

    项目简介: 本项目是一个专门为在校大学生设计的校园二手交易网站。...数据库管理:使用MySQL或MongoDB数据库,确保数据的安全性和高效访问。 安全措施:实施SSL加密、用户认证和授权机制,保障交易的安全性。

    基于流行技术栈Vue.js + SpringBoot开发的学生课程管理系统源码,适合用于毕业设计,java课程设计等

    数据库大作业,学生选课系统,前后端分离界面美观,使用流行技术栈Vue ElementUI SpringBoot,Redis实现分布式Session,AOP记录日志由MongoDB存储,可做学习使用。 ## 技术栈 ### 前端Vue.js - ElementUI - axios...

    mongo-express-node-blog::newspaper:使用mongodb,express,nodejs和views ejs模板构建的简单博客网站

    建于HTML CSS /引导程序Java脚本节点表示EJS模板MongoDB /猫鼬 :magnifying_glass_tilted_left: 网站预览 :memo: 网站功能内容管理创建,读取,更新,删除内容管理博客文章用户认证-Passportjs和Bcrypt正在安装使用...

Global site tag (gtag.js) - Google Analytics