MongoDB用戶權限管理配置


MongoDB系列第一課:MongDB簡介

MongoDB系列第二課:MongDB環境搭建

MongoDB系列第三課:MongDB用戶管理

MongoDB系列第四課:MongoDB數據庫、集合、文檔的操作

 

Mongodb作為時下最為熱門的數據庫,那么其安全驗證也是必不可少的,否則一個沒有驗證的數據庫暴露出去,任何人可隨意操作,這將是非常危險的。我們可以通過使用為MongoDB創建用戶的方式來降低風險。

 

MongoDB用戶權限列表

read

允許用戶讀取指定數據庫

readWrite

允許用戶讀寫指定數據庫

dbAdmin

允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile

userAdmin

允許用戶向system.users集合寫入,可以在指定數據庫里創建、刪除和管理用戶

clusterAdmin

只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限

readAnyDatabase

只在admin數據庫中可用,賦予用戶所有數據庫的讀權限

readWriteAnyDatabase

只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限

userAdminAnyDatabase

只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限

dbAdminAnyDatabase

只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限

root

只在admin數據庫中可用。超級賬號,超級權限

 

MongoDB用戶使用

一、 創建DB管理用戶

mongodb有一個用戶管理機制,簡單描述為,有一個管理用戶組,這個組的用戶是專門為管理普通用戶而設的,暫且稱之為管理員。

管理員通常沒有數據庫的讀寫權限,只有操作用戶的權限, 因此我們只需要賦予管理員userAdminAnyDatabase角色即可。

另外管理員賬戶必須在admin數據庫下創建,3.0版本后沒有admin數據庫,但我們可以手動use一個。注:use命令在切換數據庫時,如果切換到一個不存在的數據庫,MongodDB會自動創建該數據庫。

 

1.1 切換到admin庫

管理員需要在admin數據庫下創建,所以我們需要切換到admin數據庫。

 

1.2 查看admin中的用戶

可以通過db.system.users.find()函數來查看admin庫中的所有用戶信息。

目前在admin庫中沒有用戶,所以查無結果。

 

1.3 db.createUser函數

在MongoDB中可以使用db.createUser({用戶信息})函數創建用戶。

db.createUser({ 
    user: "<name>",
    pwd: "<cleartext password>",
    customData: { <any information> },
    roles: [
        { role: "<role>", db: "<database>" } | "<role>",
        ...
    ]
});

1)user:新建用戶名。

2)pwd:新建用戶密碼。

3)customData:存放一些用戶相關的自定義數據,該屬性也可忽略。

4)roles:數組類型,配置用戶的權限。

  

1.4 創建管理員用戶

我們現在需要在admin庫中創建一個名為bjsxt的管理員用戶,密碼為bjsxtpwd。

db.createUser({user:'bjsxt',pwd:'bjsxtpwd',roles:[{role:'userAdminAnyDatabase',db:'admin'}])

創建成功后會看到如下提示:

 

1.5 重啟MongoDB

在管理員賬戶創建完成后,我們需要重新啟動MongoDB,並開啟驗證。

重新啟動函數:db.shutdownServer()。

 

 

1.6 使用權限方式啟動MongoDB

在默認的情況下MongoDB是不開啟用戶認證的。如果我們添加用戶,那么需要開啟用戶認證機制。通過修改mongodb.conf配置文件,在文件中添加auth=true即可。

修改完成后啟動MongoDB。

 

1.7 用戶認證

創建管理員后,需要認證方可使用該用戶,否則會提示需要認證。

認證函數:db.auth(‘用戶名’,’密碼’)

如果結果返回1,則表示認證成功,返回0則表示認證失敗。

登錄成功后可查詢用戶

 

二、 創建普通用戶

普通用戶由管理員創建。通常需要指定某個數據庫來操作。

 

2.1 需求

我們創建一個sxt數據庫,給這個數據庫添加一個用戶,用戶名為itsxt,密碼為itsxtpwd。並授予該用戶對sxt數據庫進行讀寫操作的權限。

 

2.2 使用管理員用戶登錄

普通用戶需要由管理員創建並授權。所以,我們首先做的就是用管理員賬戶登錄數據庫。

 

2.3 創建sxt數據庫

use命令切換數據庫時如果該庫不存在,那么則會創建該數據庫。

 

2.4 創建普通用戶

 

2.5 使用普通用戶

打開一個新的客戶端。

 

2.6 切換到sxt數據庫

由於我們是在sxt數據庫中創建的itsxt用戶,所以需要先切換到sxt庫。

 

 

2.7 登錄普通用戶

如果我們不登錄會發現無法對該數據庫進行插入操作。因為缺少用戶認證。

 

通過認證函數對用戶進行登錄認證。

 

認證成功后操作通過該用戶操作sxt庫。該用戶對sxt庫具備讀寫操作。

 

 三、 更新用戶角色

如果我們需要對已存在的用戶的角色做修改,那么我們可以使用db.updateUser()函數來更新用戶角色。注意,該函數需要當前用戶具有userAdminAnyDatabase或者更高的權限。

 

3.1 更新角色語法格式

db.updateUser( "用戶名","roles":[{"role":"角色名稱"},{"更新項2":"更新內容"}])

 

3.2 需求

目前bjsxt管理員用戶只具備userAdminAnyDatabase用戶管理角色,我們為該用戶添加一個dbAdminAnyDatabase數據庫管理角色。

 

3.3 更新角色

db.updateUser("bjsxt",{roles : [{"role" : "userAdminAnyDatabase","db" : "admin"},{"role" : "dbAdminAnyDatabase","db" : "admin"}]})

如果沒有提示任何信息則表示更新成功。退出當前客戶端重新連接即可生效。

 

3.4 查看用戶信息

通過show users命令查看到bjsxt用戶的角色已經發生改變。

 

四、 更新用戶密碼

更新用戶密碼有兩種方式:

1)使用db.updateUser()函數更新密碼。

2)使用db.changeUserPassword()函數更新密碼

 

4.1 更新密碼方式一

使用db.upateUser()函數將bjsxt用戶的密碼修改為sxt

語法格式:db.updateUser("用戶名",{"pwd":"新密碼"})

 

 

4.2 更新密碼方式二

使用db.changeUserPassword()函數將bjsxt用戶的密碼修改為sxtpwd。

語法格式:db.changeUserPassword("用戶名","新密碼")

 

如果未提示任何信息則表示更新成功。退出當前客戶端重新連接認證即可。

 

重新使用bjsxt用戶登錄

 

五、 刪除用戶

通過db.dropUser()函數可刪除指定用戶。刪除成功后會返回true。在刪除用戶時需要切換到創建時用戶所指定的數據庫中才可以刪除。注意:需要使用具有userAdminAnyDatabse角色管理員用戶才可以刪除其他用戶。

 

5.1 需求

我們使用db.dropUser()函數將itsxt用戶刪除。

 

5.2 切換數據庫

itsxt用戶在sxt數據庫中,所以需要先切換到sxt數據庫。

 

5.3 通過函數刪除用戶

 

我們可以看到,該函數返回了true,表示刪除成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM