MongoDB官方讲解安全验证:
http://www.mongodb.org/display/DOCS/Security+and+Authentication
在MongoDB中,服务启动默认是没有权限验证的,就安全性方面来说,这肯定是不行的,所以需要加上权限验证。
既然是要进行权限验证,那肯定是得有用户的吧,所以权限验证的第一步就是给MongoDB库添加用户。
启动MongoDB服务端,然后启动MongoDB客户端,在客户端使用命令给MongoDB库添加用户,看代码:
> db.addUser("jiangzhichao","jzc19880316");
{
"user" :"jiangzhichao",
"readOnly" :false,
"pwd" :"f7559cfe0bc0a305f82c0d83664538fd"
}
小知识:在admin库里面添加用户是全局的,也就是说在admin中添加用户,在其他库里面也是适用的。
要给MongoDB的服务器端添加权限验证,需要在启动MongoDB的服务的时候添加--auth参数,代码如下:
d:\mongodb\bin>mongod --dbpath d:\mongodb\data --logpath d:\mongodb\log\mongodb.log --logappend --serviceName MongoDB --auth --install
all output going to: d:\mongodb\log\mongodb.log
Creating service MongoDB.
Service creation successful.
Service can be started from the command line via'net start "MongoDB"'.
d:\mongodb\bin>net start"MongoDB"
Mongo DB 服务正在启动 .
Mongo DB 服务已经启动成功。
在这里我是以服务的方式启动MongoDB服务,第一条命令是安装服务,第二条就是启动服务了。
服务都已经启动了,那就剩下打开客户端了,这个就简单了,看代码:
d:\mongodb\bin>mongo
MongoDB shell version: 1.8.2
connecting to: test
> show dbs;
Mon Oct 24 21:54:13 uncaught exception: listDatabases failed:{
"assertion" :"unauthorized db:admin lock type:-1 client:127.0.0.1",
"assertionCode" : 10057,
"errmsg" :"db assertion failure",
"ok" : 0
}
看到了吧,show dbs命令报异常了,再看异常的具体信息,unauthorized db:admin lock,权限验证不通
Logging in as an admin user
Although admin user accounts can access any database, you must log into the admin database. For example, if someAdminUser has an admin account, this login will succeed:
> use admin
> db.auth("someAdminUser", password)
> // and then if desired switch databases:
> use test
过啊!
那好,下面就进行权限验证,这里唠叨一下,在进行权限验证的时候,先退出客户端,或者另起一个客户端,代码如下:
d:\mongodb\bin>mongo admin -u jiangzhichao -p jzc19880316
MongoDB shell version: 1.8.2
connecting to: admin
> show dbs;
admin 0.078125GB
local (empty)
test (empty)
命令格式:mongo [数据库名] -u [用户名] -p [密码]
上面的show dbs可以执行并看到结果了。
到此,权限验证的过程就算完成了。
Mongodb安全的php处理,php官方有很完整的描述