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

Mongodb安全认证及Java调用

时间:2014-05-22 15:59来源:网络整理 作者:网络 点击:
分享到:
Mongodb安全认证在单实例和副本集两种情况下不太一样,单实例相对简单,只要在启动时加上 --auth参数即可,但副本集则需要keyfile。   一、单实例 1.启动服务(先不要加auth参数) 2.登

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启动服务,即可完成并使用。

 

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

 

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

 

精彩图集

赞助商链接