Mongodb 设置权限

从接触mongodb开始一直都处于开发环境下,使用最为精简的mongod命令启动mongodb数据库,为了部署在外网服务器上的博客平台的安全性,今天特意为mongo开启auth模式

操作流程

注:以下命令都基于我的服务器环境
1.在mongod服务开启状态下,为数据库添加用户。

  1. # mongo
  2. MongoDB shell version: 2.4.6
  3. connecting to: tank
  4. > use admin //切换到admin数据库
  5. switched to db admin
  6. > show collections;
  7. system.indexes
  8. system.users //用户表
  9. > db.system.users.find(); //用户表没有数据
  10. > db.createUser({user:"test",pwd:"test",roles:["readWrite","dbAdmin"]}); //添加一个管理员账号, V3版本mongoDB已经不再使用addUser

2.修改mongo启动配置文件,修改默认端口和开启安全认证

  1. # find / -name mongod.conf
  2. # /etc/mongod.conf
  3. # vi /etc/mongod.conf

修改 port=27017 -> 43752(请按照端口规范选择合理端口)
修改 #auth=true -> auth=true
3.重启mongod服务,重启前请确保所有链接mongo库的程序都已关闭。实在不行就只能通过杀死mongod进程。
重启(及关闭和启动)服务代码:

  1. # service mongod restart
  2. # service mongod stop
  3. # service mongod start

查找进程:

  1. # ps -ef|grep mongod
  2. mongod 12836 1 0 Jan14 ? 00:00:03 /usr/bin/mongod -f /etc/mongod.conf
  3. root 13173 11742 0 00:10 pts/0 00:00:00 grep mongo
  4. # kill 12836

4.修改mongoose链接参数

  1. var mongoose = require('mongoose');
  2. mongoose.connect('mongodb:127.0.0.1:27017/test', {
  3. user: 'name',
  4. pass: 'pass'
  5. }, function (err) {
  6. if (err) {
  7. console.error('connect to %s error: ', config.db, err.message);
  8. process.exit(1);
  9. }
  10. });

5.参看配置文件
vi /etc/mongod.conf

  1. # 日志文件位置
  2. logpath=/var/log/mongo/mongod.log
  3. # 以追加方式写入日志
  4. logappend=true
  5. # 是否以守护进程方式运行
  6. fork = true
  7. # 默认27017
  8. #port = 27017
  9. # 数据库文件位置
  10. dbpath=/var/lib/mongo
  11. # 启用定期记录CPU利用率和 I/O 等待
  12. #cpu = true
  13. # 是否以安全认证方式运行,默认是不认证的非安全方式
  14. #noauth = true
  15. #auth = true
  16. # 详细记录输出
  17. #verbose = true
  18. # Inspect all client data for validity on receipt (useful for
  19. # developing drivers)用于开发驱动程序时验证客户端请求
  20. #objcheck = true
  21. # Enable db quota management
  22. # 启用数据库配额管理
  23. #quota = true
  24. # 设置oplog记录等级
  25. # Set oplogging level where n is
  26. # 0=off (default)
  27. # 1=W
  28. # 2=R
  29. # 3=both
  30. # 7=W+some reads
  31. #diaglog=0
  32. # Diagnostic/debugging option 动态调试项
  33. #nocursors = true
  34. # Ignore query hints 忽略查询提示
  35. #nohints = true
  36. # 禁用http界面,默认为localhost:28017
  37. #nohttpinterface = true
  38. # 关闭服务器端脚本,这将极大的限制功能
  39. # Turns off server-side scripting. This will result in greatly limited
  40. # functionality
  41. #noscripting = true
  42. # 关闭扫描表,任何查询将会是扫描失败
  43. # Turns off table scans. Any query that would do a table scan fails.
  44. #notablescan = true
  45. # 关闭数据文件预分配
  46. # Disable data file preallocation.
  47. #noprealloc = true
  48. # 为新数据库指定.ns文件的大小,单位:MB
  49. # Specify .ns file size for new databases.
  50. # nssize = <size>
  51. # Replication Options 复制选项
  52. # in replicated mongo databases, specify the replica set name here
  53. #replSet=setname
  54. # maximum size in megabytes for replication operation log
  55. #oplogSize=1024
  56. # path to a key file storing authentication info for connections
  57. # between replica set members
  58. #指定存储身份验证信息的密钥文件的路径
  59. #keyFile=/path/to/keyfile

Mongo 用户相关操作命令

  1. # sudo mongo //进入mongo命令行工具
  2. > use admin //切换到admin库
  3. > db.system.users.find(); //查看当前库的用户集合
  4. > db.system.users.remove({'user':'sys'}); //删除用户
  5. > db.createUser({user:"test",pwd:"test",roles:["readWrite","dbAdmin"]}); //添加一个用户
  6. > db.auth("test","test") //以test用户登录对应库