Chinaunix首页 | 论坛 | 博客
  • 博客访问: 566877
  • 博文数量: 287
  • 博客积分: 27
  • 博客等级: 民兵
  • 技术积分: 547
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-01 20:20
文章分类

全部博文(287)

文章存档

2015年(1)

2014年(95)

2013年(90)

2012年(101)

分类:

2012-07-29 20:45:39

访问控制

官方手册中启动 MongoDB 服务时没有任何参数,一旦客户端连接后可以对数据库任意操作,而且可以远程访问数据库,所以推荐开发阶段可以不设置任何参数,但对于生产环境还是要仔细考虑一下安全方面的因素,而提高 MongoDB 数据库安全有几个方面:

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

l  设置监听端口

l  使用用户名和口令登录

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

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

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

[root@localhost bin]# ./mongod --bind_ip 192.168.1.103

 

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

[root@localhost bin]# ./mongo 192.168.1.102

MongoDB shell version: 1.8.1

connecting to: 192.168.1.103/test

设置监听端口

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

将服务端监听端口修改为28018

[root@localhost bin]# ./mongod --bind_ip 192.168.1.103 --port 28018

 

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

[root@localhost bin]# ./mongo 192.168.1.102

MongoDB shell version: 1.8.1

connecting to: 192.168.1.102/test

Sun Apr 15 15:55:51 Error: couldn't connect to server 192.168.1.102 shell/mongo.js:81

exception: connect failed

 

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

[root@localhost bin]# ./mongo 192.168.1.102:28018

MongoDB shell version: 1.8.1

connecting to: 192.168.1.102:28018/test

使用用户名和口令登录

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

 

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

[root@localhost bin]# ./mongod --auth

 

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

[root@localhost bin]# ./mongo

MongoDB shell version: 1.8.1

connecting to: test

> show collections;

很奇怪,为什么我们启用了登录验证模块,但我们登录时没有指定用户,为什么还可以登录呢?在最初始的时候 MongoDB 都默认有一个 admin 数据库(默认是空的),

而 admin.system.users 中将会保存比在其它数据库中设置的用户权限更大的用户信息。

注意:当 admin.system.users 中没有添加任何用户时,即使 MongoDB 启动时添加了 --auth 参数,如果在除 admin 数据库中添加了用户,此时不进行任何认证依然可以使用任何操作,直到知道你在 admin.system.users 中添加了一个用户。

 

1、建立系统root用户

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

[root@localhost bin]# ./mongo

MongoDB shell version: 1.8.1

connecting to: test

db.addUser("root","111")

{

        "user" : "root",

        "readOnly" : false,

        "pwd" : "e54950178e2fa777b1d174e9b106b6ab"

}

db.auth("root","111")  

1

 

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

[root@localhost bin]# ./mongo

MongoDB shell version: 1.8.1

connecting to: test

> show collections;

Sun Apr 15 16:36:52 uncaught exception: error: {

        "$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",

        "code" : 10057

}

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

 

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

[root@localhost bin]# ./mongo -u root -p

MongoDB shell version: 1.8.1

Enter password:

connecting to: test

> show collections;

system.indexes

system.users

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

 

2、建立指定权限用户

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

[root@localhost bin]# ./mongo -u root -p

MongoDB shell version: 1.8.1

Enter password:

connecting to: test

> show collections;

system.indexes

system.users

> use test

switched to db test

db.addUser("user_reader", "user_pwd", true)

{

        "user" : "user_reader",

        "readOnly" : true,

        "pwd" : "0809760bb61ee027199e513c5ecdedc6"

}

 

客户端用此用户来访问:

[root@localhost bin]# ./mongo -u user_reader -p

MongoDB shell version: 1.8.1

Enter password:

connecting to: test

> show collections;

system.indexes

system.users


阅读(787) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~