banner
小鱼

小鱼's Blog

MongoDB 入门

# 安装 mongodb 和 mongosh#

## ubuntu 部署 mongodb#

### 官网下载 mongodb 的 tar 包#

官方地址 复制 tar 包的下载地址


image

### Ubuntu 中安装#

执行命令下载 tar 包

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.7.tgz

解压

tar -zxvf mongodb-linux-x86_64-ubuntu2204-6.0.7.tgz

将解压后的文件重命名并到 /usr/local/mongodb

mv mongodb-linux-x86_64-ubuntu2204-6.0.7/ mongodb/

### 配置#

在目录中创建 logs 和 data 文件夹

mkdir logs
mkdir data

在 logs 中执行

touch mongodb.log

接着进入 bin 目录下
新增一个 mongodb.conf 的配置文件

# 数据文件存放目录
dbpath = /usr/local/mongodb/data
# 日志文件存放目录
logpath = /usr/local/mongodb/logs/mongodb.log
logappend=true
# 端口
port = 27017
# 以守护程序的方式启用,即在后台运行
fork = false
# 认证模式
auth=true
# 远程连接
bind_ip=0.0.0.0

### bin 目录下启动#

执行启动命令

./mongod -f mongodb.conf

后台启动只需要添加 --fork

./mongod --fork -f mongodb.conf


image

## 安装 mongodb shell#

执行下载压缩包

wget https://downloads.mongodb.com/compass/mongosh-1.6.0-linux-x64.tgz

解压

tar -zxvf mongosh-1.6.0-linux-x64.tgz

重命名解压后的文件

mv mongosh-1.6.0-linux-x64 mongosh

mongosh/bin 目录下提供了 mongosh 命令 用于连接到 mongoDB 数据库服务


image

## 将 bin 目录添加到环境变量 path 中#

目前 mongod 命令所在目录路径是 mongodb/bin , mongosh 命令所在目录路径是 mongosh/bin ,需要将这两个路径添加到 Path 环境变量中。

执行命令,编辑环境变量

vi ~/.bashrc

在文件的最后面添加

PATH=$PATH:$HOME/bin:/usr/local/mongodb/bin:/usr/local/mongosh/bin

保存后执行命令让配置生效

source ~/.bashrc

## 启动#

mongoDB 可以使用

mongodb --fork -f mongodb.conf

mongosh 直接执行

mongosh

mongosh 默认连接到 mongodb:localhost:27017


image

## 问题解决#

### 权限问题#

但是此时,在普通用户下执行插入时就报错了(root 用户下执行也是会报错),这是因为之前的配置文件中,将 auth 校验设置为 true 了


image

所以需要先将 auth 改为 false,然后重新启动。

ps -ef | grep mongodb

kill -9 端口号

启动后到 admin 集合下创建超级管理员账户,创建后,再把配置文件中的 auth 改为 true , 重新启动 mongo 进程进可以了。

#### 创建超级用户#

>use admin

>db.createUser({user:"root",pwd:"XXXXXX",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"}]})

创建完成后,重启 mongodb ,重新 mongosh 连接


image

# 用户与角色#

## 角色#

Built-In Roles(内置角色)

数据库用户角色:read、readWrite;

数据库管理角色:dbAdmin、dbOwner、userAdmin;

集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

备份恢复角色:backup、restore;

所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

超级用户角色:root  
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

内部角色:__system

具体角色的功能

Read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

## 用户#

### 创建普通用户#

//切换到admin数据库
use admin

//进行auth认证,认证通过返回:1
db.auth("root","密码")

//切换或创建数据库,例:test
use test

db.createUser({user:"user",pwd:"123456",roles:[{role:"readWrite",db:"test"}]})


image

db.createUser({user:"testadmin",pwd:"123456",roles:[{role:"dbAdmin",db:"test_data"},{role:"readWrite",db:"test_data"},{role:"userAdmin",db:"test_data"}]})


image

### 查看和删除用户#

#切换到admin数据库
use admin

#查看所有用户
db.system.users.find()

#删除用户 删除时需要切换到该账户所在的数据库
db.system.users.remove({user:"testadmin"})


image

超级管理员也可能没有删除的权限,查看其 role 中是否有删除该用户的权限。


image

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。