mongo的身份驗證和受權

mongo的身份驗證和受權

 

問題來源

image

剛裝好的mongo,準備登錄進去測一把的,結果就給我報這個錯,鄙人是新手,還不太清楚這個,現學一下~html

Mongo的身份驗證

在上一篇安裝mongo的博客中(https://www.cnblogs.com/tuhooo/p/9673685.html),提供了一個簡單的配置文件,其中有個選項是數據庫

auth=true安全

這裏的意思是開啓身份驗證,有用戶,密碼,角色,權限之類的東西,若是把auth設爲false的話,那麼mongo就至關於裸奔了,誰均可以連進來。若是服務器安全性挺高的,裸奔倒也不是問題。可是如今的版本仍是推薦把這個auth給打開。服務器

認證、受權和用戶

身份認證:驗證用戶的身份,你是誰測試

受權:斷定用戶在經過了身份驗證的數據庫上能夠進行那些操做,好比讀,寫,只讀,只寫等spa

auth=true會禁止對數據庫的匿名訪問。htm

Mongo中用戶的信息在system.users集合中,改集合存在於管理數據庫中(我這裏的是admin),它存儲了用戶id,密碼和建立該集合所面向的數據庫以及對用戶受權的權限。blog

image

在打印的用戶信息的第一行中,"user" : "tuhooo", "db" : "admin",表示了tuhooo這個用戶及其關聯的數據庫"admin",它們兩個惟一標識了Mongo中的一個用戶。若是兩個用戶具備相同名稱,可是關聯到了不一樣的數據庫,那麼它們被認爲是兩個不一樣的用戶。索引

在用戶信息的倒數第二行:"roles" : [ { "role" : "read", "db" : "admin" }, { "role" : "userAdminAnyDatabase", "db" : "admin" } ]代表了tuhooo在這個用戶能夠有不一樣數據庫的不一樣權限(這裏只有一個庫,由於我還沒來得及建測試庫)。若是兩個用戶具備相同的名稱可是關聯到了不一樣的數據庫,那麼它們被認爲是兩個不一樣的用戶。get

小結:

用戶名和關聯的數據庫惟一標識了Mongo中的一個用戶。

一個用戶能夠在不一樣數據庫中具備不一樣受權級別的多個角色。

image

Mongo中的角色

Mongo中可用的角色有如下:

read

提供了對指定數據庫全部集合的只讀訪問。

readWrite

提供了指定數據庫中對任意集合的讀寫訪問。

dbAdmin

用戶能夠在指定數據庫中執行管理操做,使用ensureIndex、dropIndexes、reIndex、indexStats管理索引、重命名集合、建立集合等。

userAdmin

用戶能夠對指定數據庫的system.users集合進行readWrite操做。它還啓用了對已有用戶的權限進行修改或者建立用戶的功能,實際上指定了數據庫的超級用戶角色。

clusterAdmin

使得用戶能夠對修改或顯示與整個系統有關的信息的管理操做授予訪問權限。clusterAdmin只適用於管理數據庫。

readAnyDatabase

使得用戶能夠讀取Mongo環境中的任意數據庫。

readWriteAnyDatabase

相似於readWrite,只不過它適用於全部數據庫。

userAdminAnyDatabase

相似於userAdmin,只不過它適用於全部數據庫。

dbAdminAnyDatabase

相似於dbAdmin,只不過它適用於全部數據庫。

其餘角色

從2.6版本開始,一個用戶管理員還能夠經過提供集合級別以及命令級別的訪問權限來建立遵循最小權限策略的用戶定義的角色。用戶定義的角色僅做用於建立它的數據庫中,而且被數據庫和角色名稱的組合惟一標識。全部用戶定義的角色都被存儲在system.roles集合中。

幾個常見操做

登錄mongo

image

上圖是我登錄的過程,剛用mongo鏈接進去了,而後直接:

db.auth("tuhooo", "123456")

竟然給我報錯,只有切換到admin庫,而後在這個庫下面才能作登錄。

切記切換到admin進行登錄操做。

建立用戶並受權

複製代碼
// 客戶端鏈接 $ mongo // 切換到admin庫 > use admin // 建立用戶 > db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) // 登錄, 只有登錄後才能進行其餘操做 > db.auth("myUserAdmin", "abc123") // 授予角色, 能夠根據前面的介紹以及我的須要來授予 > db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ]) // 查看狀態 > db.stats()
複製代碼

以上就是這樣了~

相關文章
相關標籤/搜索