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/binmongosh 命令所在目錄路徑是 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

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