环境
- 系统:Ubuntu 16.04
- MongoDB 版本:3.6
安装
添加软件源
1.添加 MongoDB 签名到 APT
1
| $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
|
2.创建/etc/apt/sources.list.d/mongodb-org-3.6.list文件并写入命令
Ubuntu 14.04
1
| $ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
|
Ubuntu 16.04
1
| $ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
|
由于官方镜像下载速度过慢可采用国内镜像进行安装:
Ubuntu 14.04
1
| echo "deb http://mirrors.aliyun.com/mongodb/apt/ubuntu trusty/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
|
Ubuntu 16.04
1
| echo "deb http://mirrors.aliyun.com/mongodb/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
|
更新软件源列表
安装 MongoDB
1
| $ sudo apt-get install -y mongodb-org
|
运行 MongoDB
1.启动 MongoDB
1
| sudo service mongod start
|
2.通过日志确认 MongoDB 启动成功
1
| $ tail -10f /var/log/mongodb/mongod.log
|
看到下列内容则为启动成功
1
| [initandlisten] waiting for connections on port 27017
|
3.关闭 MongoDB
1
| $ sudo service mongod stop
|
4.重启 MongoDB
1
| $ sudo service mongod restart
|
5.查看 MongoDB 状态
1
| $ sudo service mongod status
|
MongoDB 数据、日志及配置文件默认存放路径
- 数据默认存放路径:
/var/lib/mongodb
- 日志默认存放路径:
/var/log/mongodb
- 配置文件默认存放路径:
/etc/mongod.conf
用户权限设置
添加管理员账号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $ mongo MongoDB shell version v3.6.2 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.6.2 > use admin > db.createUser( { user: "admin", pwd: "mongodb123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
|
在配置文件中开启权限验证
1
| $ sudo vim /etc/mongod.conf
|
在配置文件中加入:
1 2
| security: authorization: enabled
|
重启 MongoDB 服务
1
| $ sudo service mongod restart
|
验证权限是否生效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| $ mongo MongoDB shell version v3.6.2 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.6.2 > show dbs 2018-02-01T14:39:46.976+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, $db: \"admin\" }", "code" : 13, "codeName" : "Unauthorized" } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1 shellHelper.show@src/mongo/shell/utils.js:813:19 shellHelper@src/mongo/shell/utils.js:703:15 @(shellhelp2):1:1 > use admin switched to db admin > db.auth('admin', 'mongodb123456') 1 > show dbs admin 0.000GB config 0.000GB local 0.000GB
|
添加普通用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| > use spiders switched to db spiders > db.createUser( ... { ... user: "spiders", ... pwd: "spiders@2018", ... roles: [{ role: "readWrite", db: "spiders" }] ... } ... ) Successfully added user: { "user" : "spiders", "roles" : [ { "role" : "readWrite", "db" : "spiders" } ] }
|
成功添加一个普通用户:
- 用户名:spiders
- 密码:spiders@2018
- 权限:读写 spiders 数据库
内建角色
1.角色介绍
- 数据库用户角色:read、readWrite
- 数据库管理角色:dbAdmin、dbOwner、userAdmin
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
- 备份恢复角色:backup、restore
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
- 内部角色:__system
2.角色说明
- Read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile
- userAdmin:允许用户向 system.users 集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
- readAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限
- dbAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限
- root:只在 admin 数据库中可用。超级账号,超级权限
参考