昨天我的mongodb被黑了,早先我就疑惑过怎么这东西开启服务就能用了,后来找了各方资料,知道MongoDB默认是没有鉴权的,出于侥幸心理和懒惰和忙...直到昨天我的数据库被黑了,黑客删光了我的数据,只留下了一条要我交0.2比特币来赎回我的数据的信息(如下图),我饮恨的同时,哭着给我的MongoDB加上了鉴权。
在创建用户之前,还得改变MongoDB的启动方式,在末尾加上--auth,如:mongod --dbpath ../db --auth
用户属性
要为MongoDB增加鉴权,首先需要创建用户,通过用户名密码及相应权限来告诉MongoDB我是否能动你,所以每个用户有三个属性,如下:
{
"user":"username",
"pwd":"password",
"roles": ["readWrite"]
}
创建用户管理员
当然,在为你数据库创建用户之前,你需要创建用户管理员,用户管理员只能在admin表创建,roles为userAdminAnyDatabase,步骤如下:
> use admin
switched to db admin
> db.createUser({user:"admin",pwd:"123456",roles:["userAdminAnyDatabase"]})
Successfully added user: { "user" : "admin", "roles" : [ "userAdminAnyDatabase" ] }
> db.auth("admin","123456") //立即使用此账号登录
1 //返回1即为成功
创建数据库用户
使用管理员登入,切换到你的数据库,如果还不存在,MongoDB为自动为你创建:
> use imageDB //切换至imageDB库,不存在则创建imageDB库
switched to db imageDB
> db.createUser({user:"user",pwd:"123456",roles:["readWrite"]}) //为imageDB创建用户,并赋予读写权限
Successfully added user: { "user" : "user", "roles" : [ "readWrite" ] }
> db.auth("user","123456") //使用刚创建的用户登录
1 //返回1即为成功
连接数据库(mongoose为例)
带鉴权的连接,文档
mongoose.connect('mongodb://username:password@host:port/database?options...');
var mongoose = require('mongoose'),
DB_URL = 'mongodb://localhost:27017/image-uploader',
DB_URL_AUTH = 'mongodb://YOURUSERNAME:YOURPASSWORD@localhost:27017/image-uploader';//鉴权链接
mongoose.connect(DB_URL_AUTH);
/**
* 连接成功
*/
mongoose.connection.on('connected', function () {
console.log('Mongoose connection open to ' + DB_URL);
});
/**
* 连接异常
*/
mongoose.connection.on('error',function (err) {
console.log('Mongoose connection error: ' + err);
});
/**
* 连接断开
*/
mongoose.connection.on('disconnected', function () {
console.log('Mongoose connection disconnected');
});
module.exports = mongoose;
至此,再也不怕数据库被黑了:)