快速搭建屬于自己的數據庫——mongodb

為了真實模擬一個項目上線,擁有前端后端數據庫都具備的功能,我選擇了mongodb作為項目的數據庫支持,這里分享一些mongodb的經驗心得和血的教訓。

mongoddb安裝

  • 在本地安裝

直接通過官網下載機子對應的壓縮包 mongodb

  • 在云服務器(centos系統)安裝
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-3.4.9.tgz

tar zxvf mongodb-linux-x86_64-3.2.6.tgz
mv mongodb-linux-x86_64-3.2.6.tgz mongodb
cd mongodb

///

mongodb官方下載

請根據你的的系統下載相應的版本~

環境配置&啟動服務器

在文件目錄下建立存放數據的文件夾 一般目錄就是 /usr/local/mongodb/data/db/ 通過運行命令去啟動mongodb

./bin/mongod --dbpath=/usr/local/mongodb/data/db/ --rest

這里有幾個參數重點說明一下,mongod為你mongodb 的命令行支持可以啟動,如果有需要可以通過編輯 /etc/profile 編輯進 全局環境,dbpath 也就是數據路徑,對應你建立的data目錄即可。--rest則是一個圖形支持
mongodb的默認路徑為 //localhost:27017 運行成功后訪問這個地址酒會有成功的提示 加上rest參數 可以訪問//localhost:28017

./bin/mongo 可以打開shell
常用命令:

 #查詢所有數據庫    show dbs;
 #刪除當前使用數據庫   db.dropDatabase();
 #克隆主機數據   db.cloneDatabase(“127.0.0.1”);
 #修復當前數據庫 db.repairDatabase();
 #查看當前使用的數據庫  db.getName();
 #顯示當前db狀態  db.stats();
 #查看當前db的鏈接機器地址  db.version();   
 
 

云服務器上部署mongodb環境

現在云端非常流行,很多人選擇了用云服務器來部署自己的項目,這里就介紹一下云端的mongodb配置。

./bin/mongod --fork --dbpath=/usr/local/mongodb/data/db/ --logpath=/usr/local/mongodb/data/log/error.log -logappend --rest

數據庫部署到云服務器就需要后臺運行,一開始用的centos的forever插件,發現并不能后臺運行數據庫。查閱了一下資料發現官方就有命令 --fork 啟動后臺服務 --logpath --logappend參數 為后臺服務加個log日志 rest效果同上面。

讓數據庫更直觀

密密麻麻的數據是不是很丑?很難受?這個時候我們就需要一個美化數據庫的插件了

網上有很多 如 mongovue , adminmongo 可以搜索活著Github上查閱一下。這里我使用了 adminmongo Github:[adminmongo]

以下是數據庫加密,我也是上線被攻擊后才痛定思痛更新了加密過程。

前言

那天,本屌絲終于回憶起被人掃了數據庫的恐懼。。。整個數據庫無緣無故的消失,看了一下鏈接記錄,我不得不接受這個現實,就算不是商業的東西,只要上線就有被攻擊的可能性。痛定思痛,我決心給mongodb上用戶認證,和端口權限。

這篇文章就是這個血的教訓之后的成果。

環境為云服務器centos系統。 --fork 永久運行mongodb。

添加超級管理員

首先,運行你的數據庫,成功后執行shell操作。

> use admin
> db.createUser(
   {
     user: "your name",
     pwd: "your pwd",
     roles: [ { role: "root", db: "admin" } ]
   }
)
Successfully added user: {
    "user" : "admin",
    "roles" : [
        {
            "role" : "root",
            "db" : "admin"
        }
    ]
}

root表示超級權限,這樣就創建了具有超級權限的賬號了。可以通過以下命令來查看用戶。

![Uploading image_088895.png . . .]

db.getUsers()

MongoDB數據庫角色

role指角色,管理控制數據庫的權限,第一個用戶最好是root用戶,可以執行任何操作,

?? 初始化最好創建root權限的用戶,當開啟auth模式,任何操作都需要權限才能執行。也千萬不能直接auth啟動后臺運行模式,否則你就沒有權限用戶去關閉數據庫。

  • Read:允許用戶讀取指定數據庫
  • readWrite:允許用戶讀寫指定數據庫
  • dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
  • userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
  • clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
  • readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
  • readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
  • userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
  • dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
  • root:只在admin數據庫中可用。超級賬號,超級權限

啟動auth模式

在創建完超級管理員后,才能真正啟動加密的數據庫,否則即使你自己也無權去操作數據庫。

 //后臺模式需要在shell中關閉之前的普通模式數據庫,輸入以下命令
 > use admin
 > db.shutdownServer()

//終端 啟動加密數據庫 --auth
$ ./bin/mongod --fork --dbpath=/root/mongodb/db/ --logpath=/root/mongodb/log/error.log -logappend --auth

//通過命令運行數據庫 ,在你的運行命令加上后綴 --auth,這樣就啟動了加密數據庫 ,再次執行數據庫操作

> show dbs

2017-09-23T14:09:58.922+0800 E QUERY    [thread1] Error: listDatabases failed:{
    "ok" : 0,
    "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
    "code" : 13,
    "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:769:19
shellHelper@src/mongo/shell/utils.js:659:15
@(shellhelp2):1:1

//  發現報錯,需要認證信息

> db.auth('your name','your pwd')

成功返回1  失敗返回0 輸入之前創建的超級賬號,OK,簡單的加密就完成了。
 

![Uploading image_013130.png . . .]

加密成功,需要認證才能操作數據庫

鏈接加密數據庫

數據庫加密后我們的服務端代碼也要相應變動。


xxx.db('mongodb://your name: your pwd@localhost:27017/db?authSource=admin');

xxx表示你用的插件 比如 mongoose 、mongoskin之類的。

到此為止,你的數據庫就加密完成了,當你的項目變大,你也許還需要創建許多用戶,或者升級用戶權限,這些官方都有相關的API去操作。

本文主要簡單介紹了一下主要的加密過程,還有很多相關的東西,有需要可以自己查看官方文檔。

傳送門: docs.mongodb

總結

這次的慘痛教訓讓我在云服務器部署網站再也不那么隨便了,不能因為只是個小東西 小demo就放松啊。。。,不能開放的端口絕對不能開,
比如mongo的 27017 28017端口,我們都不能在服務器端口中開放。
不要止于前端,必要的后端和服務器知識,有時候說不定會讓你思考出不一樣的火花。
該加密的東西還是要加密的。前端之路遠且長,與諸君共勉。

完整的代碼可以在我的Github閱讀,對博客有興趣可以自行fork源碼~

如果覺得本文對你有所幫助,就star一下吧~大傳送之術! 我的博客Github

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容