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/
配置檔案
cd /etc/yum.repos.d/
21.28 連接配接mongodb
systemctl start mongod //啟動服務
在本機可以直接運作指令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.