# 安装 mongodb 和 mongosh#
## ubuntu 部署 mongodb#
### 官网下载 mongodb 的 tar 包#
到 官方地址 复制 tar 包的下载地址
### 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
## 安装 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 数据库服务
## 将 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
## 问题解决#
### 权限问题#
但是此时,在普通用户下执行插入时就报错了(root 用户下执行也是会报错),这是因为之前的配置文件中,将 auth 校验设置为 true 了
所以需要先将 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 连接
# 用户与角色#
## 角色#
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"}]})
db.createUser({user:"testadmin",pwd:"123456",roles:[{role:"dbAdmin",db:"test_data"},{role:"readWrite",db:"test_data"},{role:"userAdmin",db:"test_data"}]})
### 查看和删除用户#
#切换到admin数据库
use admin
#查看所有用户
db.system.users.find()
#删除用户 删除时需要切换到该账户所在的数据库
db.system.users.remove({user:"testadmin"})
超级管理员也可能没有删除的权限,查看其 role 中是否有删除该用户的权限。