开启MongoDB数据库密码验证

昨天我的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为例)

带鉴权的连接,文档 http://mongoosejs.com/docs/connections.html

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;

至此,再也不怕数据库被黑了。

标签:Mongodb 发布于:2019-11-13 02:59:58