Nosql Mongodb之旅(15)—MongoDB 安全访问

前端之家收集整理的这篇文章主要介绍了Nosql Mongodb之旅(15)—MongoDB 安全访问前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

MongoDB安全访问将从以下三个方面得到控制!

1、绑定IP内网地址访问MongoDB服务

2、设置监听端口

3、使用用户名和密码

绑定IP内网地址访问MongoDB服务

MongoDB可以限制只允许某一特定IP来访问,只要在启动时加一个参数bind_ip即可,如下:

服务端限制只有192.168.1.103这个IP可以访问MongoDB服务

  1. [root@localhostbin]#./mongod--bind_ip192.168.1.103

客户端访问时需要明确指定服务端IP,否则会报错:

  1. [root@localhostbin]#./mongo192.168.1.102
  2. MongoDBshellversion:1.8.1
  3. connectingto:192.168.1.103/test
  4. >

设置监听端口
官方默认的监听端口是27017,为了安全起见,一般都会修改这个监听端口,避免恶意的连接尝试,具体如下:

将服务端监听端口改为28018

  1. [root@localhostbin]#./mongod--bind_ip192.168.1.103--port28018

客户端访问时不指定端口,会连接到默认端口27017,对于本例会报错

  1. connectingto:192.168.1.102/test
  2. SunApr1515:55:51Error:couldn'tconnecttoserver192.168.1.102shell/mongo.js:81
  3. exception:connectFailed

所以当服务端指定了端口后,客户端必须要明确指定端口才可以正常访问

  1. [root@localhostbin]#./mongo192.168.1.102:28018
  2. connectingto:192.168.1.102:28018/test
  3. >

使用用户名和密码
MongoDB默认的启动是不验证用户名和密码的,启动MongoDB后,可以直接用MongoDB连接上来,对所有的库具有root权限。所以启动的时候指定参数,可以阻止客户端的访问和连接。

先来启用系统的登录验证模块,只需在启动时指定auth参数即可

  1. [root@localhostbin]#./mongod--auth

本地客户端连接一下看看效果

很奇怪,为什么我们启用了登录验证模块,但我们登录时没有指定用户,为什么还可以登录呢?在最初始的时候 MongoDB 都默认有一个 admin 数据库(默认是空的)而 admin.system.users 中将会保存比在其它数据库中设置的用户权限更大的用户信息。注意:当 admin.system.users 中没有添加任何用户时,即使 MongoDB 启动时添加了 --auth参数,如果在除 admin 数据库添加用户,此时不进行任何认证依然可以使用任何操作,直到知道你在 admin.system.users 中添加了一个用户

两种添加用户方式

建立系统root用户

在admin库中新添一个用户root:

  1. [root@localhostbin]#./mongo
  2. connectingto:test
  3. >db.addUser("root","111")
  4. {
  5. "user":"root",
  6. "readOnly":false,
  7. "pwd":"e54950178e2fa777b1d174e9b106b6ab"
  8. }
  9. >db.auth("root",108); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> 1
  10. >

本地客户端连接,但不指定用户,结果如下:

  1. >showcollections;
  2. SunApr1516:36:52uncaughtexception:error:{
  3. "$err":"unauthorizeddb:testlocktype:-1client:127.0.0.1",108); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> "code":10057
  4. }
  5. >

连上test库了,但进一步操作时有异常,看来MongoDB允许未授权连接,但不能进行任何操作。

本地客户端连接,指定用户,结果如下:

  1. [root@localhostbin]#./mongo-uroot-p
  2. Enterpassword:
  3. connectingto:test
  4. >showcollections;
  5. system.indexes
  6. system.users
  7. >

看来指定了用户名之后,访问数据库才是正常。

建立指定权限用户

MongoDB也支持为某个特定的数据来设置用户,如我们为test库设置一个只读的用户user_reader:

  1. >usetest
  2. switchedtodbtest
  3. >db.addUser("user_reader","user_pwd",true)
  4. "user":"user_reader",108); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> "readOnly":true,108); list-style:decimal-leading-zero outside; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> "pwd":"0809760bb61ee027199e513c5ecdedc6"
  5. >

客户端用此用户来访问:

  1. [root@localhostbin]#./mongo-uuser_reader-p
  2. MongoDBshellversion:1.8.1
  3. Enterpassword:
  4. connectingto:test
  5. >showcollections;
  6. system.indexes
  7. system.users
  8. >

猜你在找的NoSQL相关文章