1查看当前linux信息

查看当前linux是centos还是unbantu,以及对应的版本号,

  1. lsb_release -a #命令存在表示为ubuntu系统
  2. cat /etc/redhat-release #文件存在为centos

需要注意的是Ubuntu 16.04 版本的话,mongo4.2及以下版本是完整支持,4.2开始砍掉了很多扩展功能(主要功能暂时不受影响),这里推荐使用4.0.X版本安装

2安装

  1. sudo apt-get install libcurl3 openssl

从mongo官网选择对应版本合适的下载地址

https://www.mongodb.com/try/download/community1618976460820.png

使用命令开始下载:

  1. wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.0.24.tgz
  2. #或者4.2最新版本
  3. wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.13.tgz
  4. #当前最新版本
  5. wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.4.4.tgz

解压

  1. tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.0.24.tgz

删除原文件,并将解压文件夹移动到安装目录

  1. rm -f mongodb-linux-x86_64-ubuntu1604-4.0.24.tgz
  2. mv mongodb-linux-x86_64-ubuntu1604-4.0.24 /usr/local/mongodb4

进入安装目录,添加临时环境变量(每次重新启动都要再次配置),命令如下:

  1. export PATH=<mongodb-install-directory>/bin:$PATH

我们这里的路径为:

  1. export PATH=/usr/local/mongodb4/bin:$PATH

安装完毕后,需要创建数据库实例目录和日志所在目录,并且设置权限

  1. sudo mkdir -p /var/lib/mongo
  2. sudo mkdir -p /var/log/mongodb
  3. sudo chown `whoami` /var/lib/mongo # 设置权限
  4. sudo chown `whoami` /var/log/mongodb # 设置权限

接着配置一个mongo的配置文件

  1. vim /etc/mongod.conf

如果存在,修改配置,如果不存在,添加如下内容

  1. dbpath=/var/lib/mongo #数据存储目录
  2. logpath=/var/log/mongodb/mongodb.log #日志文件路径
  3. logappend = true #追加
  4. port=27017 #端口号
  5. fork=true #后台进程
  6. auth=true #开启认证
  7. bind_ip=0.0.0.0 #开启远程访问

配置完毕后,我们可以启动mongo,第一次启动不要指定配置文件,否则默认是开启认证,我们需要先配置账号信息(没有默认超管账号)

  1. mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

查看实时日志,看到如下内容,说明mongo启动成功

  1. tail -10f /var/log/mongodb/mongod.log

内容大致如下:

  1. 2020-07-09T12:20:17.391+0800 I NETWORK [listener] Listening on /tmp/mongodb-27017.sock
  2. 2020-07-09T12:20:17.392+0800 I NETWORK [listener] Listening on 127.0.0.1
  3. 2020-07-09T12:20:17.392+0800 I NETWORK [listener] waiting for connections on port 27017

接着我们启动默认的shell工具访问,进入安装目录下的bin目录

  1. cd /usr/local/mongodb4/bin

启动mongo进程

  1. ./mongo

进入后,切换到admin数据库,添加认证用户信息

  1. use admin

先创建一个超管

  1. db.createUser({ user: "root", pwd: "Chinacaring2020", roles: [{ role: "root", db: "admin" }] })

接着配置一个我们服务的用户,这里以问卷系统为例,问卷信息存储在questionnaire数据库中,但是我们需要注意的是,我们当前在哪个数据库,该用户认证授权就需要在哪个数据库中,我们不切换数据库,继续创建问卷数据库管理员,同时这个管理员也拥有所有数据库的读写权限

  1. db.createUser({ user: "zd-question", pwd: "Chinacaring2020", roles: [{ role: "readWriteAnyDatabase", db: "admin" },{ role: "dbOwner", db: "questionnaire" }]})

配置完毕后,退出mongo,关闭mongo服务,重新启动,并且按照我们之前的配置文件的方式启动

  1. exit; #退出
  2. ps -ef|grep 'mongo' #查看mongo服务的进程id
  3. kill -9 14041 #kill mongo
  4. #重新启动mongod,如果启动不了,再次配置一下环境变量后执行当前命令
  5. mongod -f /etc/mongod.conf

3认证测试

接着我们再去进入mongo shell进程,切换到admin数据库,使用我们刚刚配置的问卷用户进行认证

  1. use admin;
  2. db.auth('zd-question','Chinacaring2020'); #显示1说明认证通过

这个时候我们切换到问卷数据库questionnaire,测试插入一条数据(后删除)

  1. use questionnaire;
  2. db.questionnaire.save({"test":"123"}); #可以看到成功插入一条数据
  3. db.questionnaire.findOne();
  4. db.questionnaire.remove({}); #将整个db清空还原

附:mongo内置角色

  1. 内建角色:
  2. 数据库用户角色:readreadWrite
  3. 数据库管理角色:dbAdmindbOwneruserAdmin
  4. 集群管理角色: clusterAdminclusterManagerclusterMonitorhostManager
  5. 备份恢复角色: backuprestore
  6. 所有数据库角色:readAnyDatabasereadWriteAnyDatabaseuserAdminAnyDatabasedbAdminAnyDatabase
  7. 超级用户角色: root 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner userAdminuserAdminAnyDatabase
  8. 内部角色: __system
  9. 角色说明:
  10. Read 允许用户读取指定数据库
  11. readWrite 允许用户读写指定数据库
  12. dbAdmin 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  13. userAdmin 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  14. dbOwner 允许在当前DB中执行任意操作
  15. readAnyDatabase 赋予用户所有数据库的读权限,只在admin数据库中可用
  16. readWriteAnyDatabase 赋予用户所有数据库的读写权限,只在admin数据库中可用
  17. userAdminAnyDatabase:赋予用户所有数据库管理User的权限,只在admin数据库中可用
  18. dbAdminAnyDatabase 赋予管理所有数据库的权限,只在admin数据库中可用
  19. root 超级账号,超级权限,只在admin数据库中可用。
  20. 集群管理角色:
  21. clusterAdmin 赋予管理集群的最高权限,只在admin数据库中可用
  22. clusterManager 赋予管理和监控集群的权限
  23. clusterMonitor 赋予监控集群的权限,对监控工具具有readonly的权限
  24. hostManager 赋予管理Server

mongo中文社区

https://docs.mongoing.com/install-mongodb

附:用户权限相关其他操作命令

在admin数据库中,查看当前所有的用户信息:

  1. db.system.users.find().pretty()

如果希望给某个用户添加权限:

  1. db.grantRolesToUser("usertest", [{role:"readWrite", db:"testDB"},{role:"read", db:"testDB"}])

如果希望修改用户权限:

  1. db.updateUser("usertest",{roles:[ {role:"read",db:"testDB"} ]})

删除权限:

  1. db.revokeRolesFromUser("usertest",[{role:"read", db:"testDB"}])

修改密码:

  1. db.changeUserPassword("usertest","changepass");
  2. //或
  3. db.updateUser("usertest",{pwd:"changepass1"});