CentOS7.9 安装MongoDB
正文
系统:CentOS7.9,关闭了系统防火墙firewalld服务和SELinux
MongoDB版本:7.0.18
一、安装 MongoDB Server
1、下载安装包并解压
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-7.0.18.tgz
tar -xf mongodb-linux-x86_64-rhel70-7.0.18.tgz -C /usr/local/
mv /usr/local/mongodb-linux-x86_64-rhel70-7.0.18/ /usr/local/mongodb
mongodb 4.x
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.13.tgz
tar -zxvf
mongodb-linux-x86_64-4.0.13.tgz
-C /usr/local/
mv /usr/local/mongodb-linux-x86_64-4.0.13/ /usr/local/mongodb
2、创建 MongoDB 的配置、数据和日志目录
mkdir /usr/local/mongodb/{etc,data,logs}
3、添加配置文件
vim /usr/local/mongodb/etc/mongod.conf
systemLog:
destination: file
path: "/usr/local/mongodb/logs/mongod.log"
logAppend: true
storage:
dbPath: "/usr/local/mongodb/data"
processManagement:
fork: true
pidFilePath: "/usr/local/mongodb/mongod.pid"
net:
bindIp: 0.0.0.0
port: 27017
更多配置选项介绍见官网:自管理的配置文件选项
5、创建服务启动文件,并启动服务
vim /etc/systemd/system/mongodb.service
[Unit]
Description=MongoDB Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongod.conf
ExecStop=/usr/local/mongodb/bin/mongod --shutdown -f /usr/local/mongodb/etc/mongod.conf
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
WantedBy=multi-user.target
#启动服务
systemctl daemon-reload
systemctl start mongodb
#设置开机启动
systemctl enable mongod
6、配置环境变量
vim /etc/profile.d/mongodb.sh
export PATH=/usr/local/mongodb/bin:$PATH
#使环境变量生效
source /etc/profile.d/mongodb.sh
二、安装 MongoDB Shell 客户端
1、下载安装包并解压
wget https://downloads.mongodb.com/compass/mongosh-2.4.2-linux-x64.tgz
tar -xf mongosh-2.4.2-linux-x64.tgz -C /usr/local/mongodb/
mv /usr/local/mongodb/mongosh-2.4.2-linux-x64 /usr/local/mongodb/mongosh
2、修改环境变量文件
vim /etc/profile.d/mongodb.sh
export PATH=/usr/local/mongodb/bin:/usr/local/mongodb/mongosh/bin:$PATH
#使环境变量生效
source /etc/profile.d/mongodb.sh
3、连接测试
mongosh
三、创建 MongoDB 管理员用户
MongoDB 默认是没有管理员账号的,所以要先添加管理员账号,再开启权限认证;MongoDB 添加账号需要使用 use admin 切换到 admin 数据库,在 admin 数据库添加的账号才是管理员账号;
1、使用 MongoDB Shell 客户端工具连接到 MongoDB Server
mongosh
2、查看数据库
test> show dbs;
admin 40.00 KiB
config 12.00 KiB
local 72.00 KiB
3、切换到 admin 数据库
test> use admin;
switched to db admin
4、创建管理员用户
#查看用户
admin> show users;
[]
#可以看到是没有用户的,接下来创建一个管理员用户
admin> db.createUser({user: "admin", pwd: "123456", roles: [{ role: "userAdminAnyDatabase", db: "admin"}]});
{ ok: 1 }
#再次查看用户,可以看到新的用户了
admin> show users;
[
{
_id: 'admin.admin',
userId: UUID('0748450a-812f-4114-aa1a-bb4fe10c9f96'),
user: 'admin',
db: 'admin',
roles: [ { role: 'userAdminAnyDatabase', db: 'admin' } ],
mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
}
]
#修改密码,注意先use admin到相应的库
admin> db.changeUserPassword("admin", "a123456");
{ ok: 1 }
四、开启 MongoDB Server 的登录认证
1、修改 mongod.conf 文件
vim /usr/local/mongodb/etc/mongod.conf
#在最后面添加以下内容:
security:
authorization: enabled
2、重启 MongoDB 服务
systemctl restart mongodb
3、连接测试
mongosh -u admin -p 123456
五、创建库及普通用户
1、使用管理员用户登录数据库
mongosh -u admin -p 123456
2、创建库与用户
#创建一个数据库mydb
use mydb;
#创建mydb数据库的用户(读写权限)
db.createUser({ user: "myuser", pwd: "m123456", roles: [{ role: "readWrite", db: "mydb"}]});
#查看用户
mydb> show users;
[
{
_id: 'mydb.myuser',
userId: UUID('ca9ca4de-472f-48fb-942b-051ddf91ff83'),
user: 'myuser',
db: 'mydb',
roles: [ { role: 'readWrite', db: 'mydb' } ],
mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
}
]
#校验库的用户
mydb> db.auth("myuser", "m123456")
{ ok: 1 }
#获取当前连接的用户
mydb> db.runCommand({connectionStatus: 1})
{
authInfo: {
authenticatedUsers: [ { user: 'myuser', db: 'mydb' } ],
authenticatedUserRoles: [ { role: 'readWrite', db: 'mydb' } ]
},
ok: 1
}
3、创建一个表并插入一条数据
#创建一个表并插入测试数据,不然连接后使用show dbs不显示库名
mydb> db.test_collection.insertOne({ name: "init" });
{
acknowledged: true,
insertedId: ObjectId('67e60c3e159f20f3876b140b')
}
#查看表
mydb> show tables;
test_collection
#查看库
mydb> show dbs;
mydb 8.00 KiB
六、MongoDB 内置角色说明
MongoDB 通过基于角色的授权授予对数据和命令的访问权限,并借助内置角色,提供数据库系统中常见的不同访问级别。
角色授予在定义的资源上执行一系列操作的特权。给定角色适用于定义它的数据库,并且可以授予集合粒度级别的访问权限。
系统集合包括以下位置的集合:
<database>.system.*
namespacelocal.replset.*
副本集命名空间
非系统集合是指不在上一个列表中的命名空间中的集合。
MongoDB 的每个内置角色都在数据库级别为该角色数据库中的所有非系统集合
定义访问权限,并在集合级别为所有系统集合定义访问权限。
6.1、数据库用户角色
- read:提供在所有非系统集合和
system.js
集合上读取数据的能力,该角色不提供直接访问system.namespaces
集合的权限; - readWrite:提供
read
角色的所有权限,以及在所有非系统集合和system.js
集合上修改数据的能力。
6.2、数据库管理角色
- dbAdmin:提供执行管理任务的能力,例如架构相关任务、索引和收集统计信息。该角色不授予用户和角色管理特权;
- userAdmin:提供在当前数据库上创建和修改角色和用户的能力。由于
userAdmin
角色允许用户向任何用户(包括自己)授予任何特权,因此该角色还间接提供对数据库或(如果作用域为admin
数据库)集群的超级用户
访问权限; - dbOwner:数据库所有者可以对数据库执行任何管理操作。此角色结合了
readWrite
、dbAdmin
和userAdmin
角色授予的权限。
6.3、集群管理角色
- clusterAdmin:提供最大的集群管理访问权限。此角色结合了
clusterManager
、clusterMonitor
和hostManager
角色授予的特权。该角色还提供dropDatabase
操作; - clusterManager:提供对集群的管理和监视动作。具有此角色的用户可以访问
config
和local
数据库,这两个数据库分别用于分片和复制; - clusterMonitor:提供对监控工具(例如 MongoDB Cloud Manager 和 Ops Manager监控代理)的只读访问权限;
- enableSharding:提供为集合启用分片和修改现有分片键的能力;
- hostManager:提供监控和管理服务器的能力。
6.4、备份与恢复角色
- backup:提供备份数据所需的最低特权。该角色提供足够的特权来使用 MongoDB Cloud Manager 备份代理、Ops Manager 备份代理,或使用
mongodump
备份整个mongod
实例。提供针对config
数据库中settings
集合的insert
和update
操作; - restore:针对非系统集合,提供
convertToCapped
权限。如果数据不包含system.profile
集合数据且在运行mongorestore
时未使用--oplogReplay
选项,那么需要提供必要特权以便从备份中恢复数据。
6.5、全数据库角色
-
readAnyDatabase:针对除
local
和config
之外的所有数据库,提供与read
相同的只读权限。该角色还提供对整个集群执行listDatabases
操作的权限; -
readWriteAnyDatabase:在除
local
和config
以外的所有数据库中提供与readWrite
相同的权限。该角色还提供:-
针对整个集群的
listDatabases
操作权限 -
compactStructuredEncryptionData
操作权限
-
-
userAdminAnyDatabase:针对除
local
和config
之外的所有数据库,提供与userAdmin
相同的用户管理操作访问权限。 -
dbAdminAnyDatabase:在除
local
和config
以外的所有数据库中提供与dbAdmin
相同的权限。该角色还提供对整个集群执行listDatabases
操作的权限。
6.6、超级用户角色
-
root:提供对以下角色总共的操作和所有资源的访问权限:
readWriteAnyDatabase
dbAdminAnyDatabase
userAdminAnyDatabase
clusterAdmin
restore
backup
还提供对
system.
集合执行validate
操作的特权。
多个角色提供间接或直接的系统级超级用户访问权限。
以下角色能够为任何用户分配任何数据库的任何特权,这意味着具有这些角色的用户可以为自己分配任何数据库的任何特权:
dbOwner
角色(作用域为admin
数据库时)userAdmin
角色(作用域为admin
数据库时)userAdminAnyDatabase
角色
6.7、内部角色
__system:MongoDB 将此角色分配给表示集群节点的用户对象,例如副本集节点和 mongos
实例。此角色授权其持有者对数据库中的任何对象执行任何动作的权限。
除特殊情况外,请勿将此角色分配给代表应用程序或人类管理员的用户对象。
如果需要访问所有资源上的所有动作,例如运行 applyOps
命令,请勿分配此角色。可以创建一个用户定义的角色,借此授予对 anyResource
执行 anyAction
的权限,并确保只有需要访问这些操作的用户才有此访问权限
更详细角色权限说明参考官网:自管理部署中的内置角色