天天看點

21.26 mongodb介紹、 mongodb安裝、連接配接mongodb、mongodb使用者管理

21.26 mongodb介紹

l官網www.mongodb.com, 目前最新版3.4

lc++編寫,基于分布式的,屬于nosql的一種

l在nosql中是最像關系型資料庫的

lmongodb 将資料存儲為一個文檔,資料結構由鍵值(key=>value)對組成。mongodb 文檔類似于 json 對象。字段值可以包含其他文檔、數組及文檔數組。

l關于json http://www.w3school.com.cn/json/index.asp

l因為基于分布式,是以很容易擴充

epel自帶的mongodb版本為2.6,我們需要安裝3.4版本

官方安裝文檔https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

21.26 mongodb介紹、 mongodb安裝、連接配接mongodb、mongodb使用者管理
21.26 mongodb介紹、 mongodb安裝、連接配接mongodb、mongodb使用者管理

配置檔案

cd /etc/yum.repos.d/

21.28 連接配接mongodb

systemctl start mongod //啟動服務

21.26 mongodb介紹、 mongodb安裝、連接配接mongodb、mongodb使用者管理

在本機可以直接運作指令mongo進入到mongodb shell中

如果mongodb監聽端口并不是預設的27017,則在連接配接的時候需要加--port 選項,例如

mongo --port 27018

連接配接遠端mongodb,需要加--host,例如

mongo --host  127.0.0.1

如果設定了驗證,則在連接配接的時候需要帶使用者名和密碼

mongo -uusername -ppasswd --authenticationdatabase db //這個和mysql挺像

指定ip和端口

21.29 mongodb使用者管理

use admin//需要切換到admin庫

db.createuser( { user: "admin", customdata:

{description: "superuser"}, pwd: "admin122", roles: [ { role: "root",

db: "admin" } ] } )

user指定使用者,customdata為說明字段,可以省略,pwd為密碼,roles指定使用者的角色,db指定庫名

use admin //切換到admin庫

db.system.users.find()  //列出所有使用者,需要切換到admin庫

show users  //檢視目前庫下所有的使用者

db.dropuser('admin') //删除使用者

若要使用者生效,還需要編輯啟動腳本vim /usr/lib/systemd/system/mongod.service,在options=後面增--auth

重新開機服務systemctl restart mongod

mongo -u "admin" -p "admin122" --authenticationdatabase "admin"

use db1

db.createuser( { user: "test1", pwd: "123aaa", roles: [ { role: "readwrite", db: "db1" }, {role: "read", db: "db2" } ] } )

test1使用者對db1庫讀寫,對db2庫隻讀。

之是以先use db1,表示使用者在 db1 庫中建立,就一定要db1庫驗證身份,即使用者的資訊跟随随資料庫。比如上述 test1雖然有 db2 庫的讀取權限,但是一定要先在db1庫進行身份驗證,直接通路會提示驗證失敗。

use db2

db.auth("test1", "123aaa")

使用者角色:

read:允許使用者讀取指定資料庫

readwrite:允許使用者讀寫指定資料庫

dbadmin:允許使用者在指定資料庫中執行管理函數,如索引建立、删除,檢視統計或通路system.profile

useradmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、删除和管理使用者

clusteradmin:隻在admin資料庫中可用,賦予使用者所有分片和複制集相關函數的管理權限。

readanydatabase:隻在admin資料庫中可用,賦予使用者所有資料庫的讀權限

readwriteanydatabase:隻在admin資料庫中可用,賦予使用者所有資料庫的讀寫權限

useradminanydatabase:隻在admin資料庫中可用,賦予使用者所有資料庫的useradmin權限

dbadminanydatabase:隻在admin資料庫中可用,賦予使用者所有資料庫的dbadmin權限。

root:隻在admin資料庫中可用。超級賬号,超級權限

db.version()  //檢視版本

use userdb  //如果庫存在就切換,不存在就建立

show dbs //檢視庫,此時userdb并沒有出現,這是因為該庫是空的,還沒有任何集合,隻需要建立一個集合就能看到了

db.createcollection('clo1') //建立集合clo1,在目前庫下面建立

db.dropdatabase() //删除目前庫,要想删除某個庫,必須切換到那個庫下

db.stats()  //檢視目前庫的資訊

db.serverstatus()   //檢視mongodb伺服器的狀态

執行個體

1.

> use admin

2.

> db.createuser( { user: "admin", customdata: {description: "superuser"}, pwd: "admin122", roles: [ { role: "root", db: "admin" } ] } )

3.> db.system.users.find()

4.

> show users

5.

> db.createuser({user:"axin",pwd:"123aaa",roles:[{role:"read",db:"testdb"}]})#先建立一個使用者

>show users建立axin之後,再檢視一下。下面就是axin使用者

> use testdb #我們切換testdb庫,如果不存在就會被建立,并且進入

> show users #這個時候無論我們show users還是db.system.users.find()都查不到,因為要切換到admin庫下

> db.system.users.find()

> show users #切換到admin下才可以檢視使用者

> db.system.users.find() #切換到admin庫下就可以了

6.

[root@axinlinux-01 ~]# vim /usr/lib/systemd/system/mongod.service

[root@axinlinux-01 ~]# systemctl restart mongod #因為我們改了腳本是以要先reload一下

warning: mongod.service changed on disk. run 'systemctl daemon-reload' to reload units.

[root@axinlinux-01 ~]# systemctl daemon-reload

[root@axinlinux-01 ~]# systemctl restart mongod

[root@axinlinux-01 ~]# ps aux |grep mongod #我們看這個啟動的指令多了--auth。隻有加了--auth才能用建立的使用者名和密碼登入

[root@axinlinux-01 ~]# mongo -host 127.0.0.1 -port 27017 #我們再來來登入

> show users #會有error,就是因為沒有授權

[root@axinlinux-01 ~]# mongo -u "admin" -p "admin122" --authenticationdatabase "admin" #授權,登入

> show users #就可以檢視了

7.

> db.createuser( { user: "test1", pwd: "123aaa", roles: [ { role: "readwrite", db: "db1" }, {role: "read", db: "db2" } ] } ) #建立test1使用者。針對db1角色是讀寫。針對db2角色是隻讀

8.

> use db1 #但是我們還要給他授權。一定要在db1裡授權

> db.auth("test1","123aaa") #在mongodb指令行裡直接授權就可以了,用這個指令

 error: authentication failed.

繼續閱讀