mongodb安全

mongodb

掌握权限,理解下面4条

  1. mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。
  2. 切换到admin数据库,添加的账号才是管理员账号。
  3. 用户只能在用户所在数据库登录,包括管理员账号。
  4. 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。这一点比较怪

先以默认配置启动

先以默认配置启动mongodb

  1. mongod --dbpath tmp/db --logpath tmp/logs/mongodb.log --pidfilepath tmp/pids/mongodb.pid

增加用户

  1. use admin
  2. use cnodejsng
  3. db.createUser({user:"cnodejs",pwd:"cnodejs.ng",roles:[{role:"readWrite",db:"cnodejsng"}]})
  4. db.runCommand({usersInfo:"cnodejs",showPrivileges:true})
  5. db.auth('cnodejs','cnodejs.ng')

超级用户的role有两种,userAdmin或者userAdminAnyDatabase.不建议创建,给数据一个readWrite角色就够了

重启mongodb服务器,限制授权和ip地址

  1. mongod -auth --bind_ip 127.0.0.1 --port 27017 --dbpath tmp/db --logpath tmp/logs/mongodb.log --pidfilepath tmp/pids/mongodb.pid &

如果是在项目路径

  1. killall mongod && gulp start_mongodb

客户端连接

  1. mongo -ucnodejs -pcnodejs.ng 127.0.0.1:27017/cnodejsng

注:

  1. 和用户管理相关的操作基本都要在admin数据库下运行,要先use admin
  2. 如果在某个单一的数据库下,那只能对当前数据库的权限进行操作;
  3. db.addUser是老版本的操作,现在版本也还能继续使用,创建出来的user是带有root role的超级管理员。

tips

  • show roles查看角色
  • db.runCommand({usersInfo:”cnodejs”})

cnode 由于 mongo 就在本地,所以我只是很简单地 bind 127.0.0.1 就没干别的了

g 4楼•1 年前
@alsotang

use admin
太可怕了,还是要小心的

在mongoose里修改连接信息

mongoose = require(‘mongoose’)
connectionString = ‘mongodb://127.0.0.1:27017/cnodejs’

options =
db:
native_parser: true
server:
auto_reconnect: true
poolSize: 5

replset: rs_name: ‘myReplicaSetName’

user: ‘cnodejs’
pass: ‘cnodejs.ng’

mongoose.connect connectionString, options, (err, res) ->
if err
console.log(‘[mongoose log] Error connecting to: ‘

  1. + connectionString + '. ' + err)
  2. process.exit 1

else
console.log(‘[mongoose log] Successfully connected to: ‘

  1. + connectionString)

db = mongoose.connection
db.on(‘error’, console.error.bind(console, ‘mongoose connection error:’))
db.once ‘open’, () ->
console.log(‘mongoose open success’)