# 安裝 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 中是否有刪除該用戶的權限。