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.* namespace
  • local.replset.*副本集命名空间

非系统集合是指不在上一个列表中的命名空间中的集合。

MongoDB 的每个内置角色都在数据库级别为该角色数据库中的所有非系统集合定义访问权限,并在集合级别为所有系统集合定义访问权限。

6.1、数据库用户角色

  • read:提供在所有非系统集合和 system.js 集合上读取数据的能力,该角色不提供直接访问 system.namespaces 集合的权限;
  • readWrite:提供 read角色的所有权限,以及在所有非系统集合和 system.js 集合上修改数据的能力。

6.2、数据库管理角色

  • dbAdmin:提供执行管理任务的能力,例如架构相关任务、索引和收集统计信息。该角色不授予用户和角色管理特权;
  • userAdmin:提供在当前数据库上创建和修改角色和用户的能力。由于 userAdmin角色允许用户向任何用户(包括自己)授予任何特权,因此该角色还间接提供对数据库或(如果作用域为 admin 数据库)集群的超级用户访问权限;
  • dbOwner:数据库所有者可以对数据库执行任何管理操作。此角色结合了 readWritedbAdmin 和 userAdmin角色授予的权限。

6.3、集群管理角色

  • clusterAdmin:提供最大的集群管理访问权限。此角色结合了 clusterManagerclusterMonitor 和 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的权限,并确保只有需要访问这些操作的用户才有此访问权限

更详细角色权限说明参考官网:自管理部署中的内置角色

posted @ 2025-07-07 21:35  诸葛风流  阅读(68)  评论(0)    收藏  举报