龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > nosql开发 >

Mongodb安全认证及Java调用(2)

时间:2014-05-22 15:59来源:网络整理 作者:网络 点击:
分享到:
1. 在分片集群环境中,副本集内成员之间需要用 keyFile 认证, mongos 与配置服务器,副本集之间也要 keyFile 认证,集群所有 mongod 和 mongos 实例使用内容相同

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

 

精彩图集

赞助商链接