Mongodb 用戶權(quán)限管理及配置詳解
一、Mongodb命令
理解 admin 數(shù)據(jù)庫
安裝 MongoDB 時(shí),會(huì)自動(dòng)創(chuàng)建 admin 數(shù)據(jù)庫,這是一個(gè)特殊數(shù)據(jù)庫,提供了普通數(shù)據(jù)庫沒有的功能。
有些用戶角色賦予用戶操作多個(gè)數(shù)據(jù)庫的權(quán)限,而這些角色只能在 admin 數(shù)據(jù)庫中創(chuàng)建,要?jiǎng)?chuàng)建有權(quán)操作所有數(shù)據(jù)庫的超級(jí)用戶,必須將該用戶加入到 admin 數(shù)據(jù)庫中。檢查憑證時(shí),MongoDB 將在指定數(shù)據(jù)庫和 admin 數(shù)據(jù)庫中檢查用戶賬戶。
內(nèi)建的角色
數(shù)據(jù)庫用戶角色:read、readWrite;
數(shù)據(jù)庫管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
備份恢復(fù)角色:backup、restore;
所有數(shù)據(jù)庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超級(jí)用戶角色:root #這里還有幾個(gè)角色間接或直接提供了系統(tǒng)超級(jí)用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
內(nèi)部角色:__system
角色說明:
read:允許用戶讀取指定數(shù)據(jù)庫;
readAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀權(quán)限;
readWrite:允許用戶讀寫指定數(shù)據(jù)庫;
readWriteAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀寫權(quán)限;
dbAdmin:允許用戶在指定數(shù)據(jù)庫中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計(jì)或訪問system.profile;
dbAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的dbAdmin權(quán)限;
clusterAdmin:只在admin數(shù)據(jù)庫中可用,賦予用戶所有分片和復(fù)制集相關(guān)函數(shù)的管理權(quán)限;
userAdmin:允許用戶向system.users集合寫入,可以找指定數(shù)據(jù)庫里創(chuàng)建、刪除和管理用戶;
userAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的userAdmin權(quán)限;
root:只在admin數(shù)據(jù)庫中可用。超級(jí)賬號(hào),超級(jí)權(quán)限;
主要命令
show dbs #顯示數(shù)據(jù)庫列表 show collections #顯示當(dāng)前數(shù)據(jù)庫中的集合(類似關(guān)系數(shù)據(jù)庫中的表) show users #顯示用戶 use <db name> #切換當(dāng)前數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在則創(chuàng)建數(shù)據(jù)庫。 db.help() #顯示數(shù)據(jù)庫操作命令,里面有很多的命令 db.foo.help() #顯示集合操作命令,同樣有很多的命令,foo指的是當(dāng)前數(shù)據(jù)庫下,一個(gè)叫foo的集合,并非真正意義上的命令 db.foo.find() #對(duì)于當(dāng)前數(shù)據(jù)庫中的foo集合進(jìn)行數(shù)據(jù)查找(由于沒有條件,會(huì)列出所有數(shù)據(jù)) db.foo.find( { a : 1 } ) #對(duì)于當(dāng)前數(shù)據(jù)庫中的foo集合進(jìn)行查找,條件是數(shù)據(jù)中有一個(gè)屬性叫a,且a的值為1
MongoDB沒有創(chuàng)建數(shù)據(jù)庫的命令,但有類似的命令。 如:如果你想創(chuàng)建一個(gè)“myTest”的數(shù)據(jù)庫,先運(yùn)行use myTest命令,之后就做一些操作(如:db.createCollection(‘user’)),這樣就可以創(chuàng)建一個(gè)名叫“myTest”的數(shù)據(jù)庫。
其他命令
db.dropDatabase() #刪除當(dāng)前使用數(shù)據(jù)庫 db.cloneDatabase("127.0.0.1") #將指定機(jī)器上的數(shù)據(jù)庫的數(shù)據(jù)克隆到當(dāng)前數(shù)據(jù)庫 db.copyDatabase("mydb", "temp", "127.0.0.1") #將本機(jī)的mydb的數(shù)據(jù)復(fù)制到temp數(shù)據(jù)庫中 db.repairDatabase() #修復(fù)當(dāng)前數(shù)據(jù)庫 db.getName() #查看當(dāng)前使用的數(shù)據(jù)庫,也可以直接用db db.stats() #顯示當(dāng)前db狀態(tài) db.version() #當(dāng)前db版本 db.getMongo() #查看當(dāng)前db的鏈接機(jī)器地址 db.serverStatus() #查看數(shù)據(jù)庫服務(wù)器的狀態(tài)
二、配置訪問控制
1、介紹
MongoDB安裝完成后,數(shù)據(jù)庫 admin 中沒有任何用戶賬戶。在數(shù)據(jù)庫 admin 中沒有任何賬戶時(shí),MongoDB 向從本地主機(jī)發(fā)起的連接提供全面的數(shù)據(jù)庫管理權(quán)限。因此配置 MongoDB 新實(shí)例時(shí),首先需要?jiǎng)?chuàng)建用戶管理員賬戶
和數(shù)據(jù)庫管理員賬戶
。用戶管理員賬戶可在 admin 和其他數(shù)據(jù)庫中創(chuàng)建用戶賬戶。您還需要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫管理員賬戶,將其作為管理數(shù)據(jù)庫、集群、復(fù)制和 MongoDB 其他方面的超級(jí)用戶。
用戶管理員賬戶和數(shù)據(jù)庫管理員賬戶都是在數(shù)據(jù)庫 admn 中創(chuàng)建的。在 MongoDB 服務(wù)器中啟用身份驗(yàn)證后,要以用戶管理員或數(shù)據(jù)庫管理員的身份連接到服務(wù)器,必須向 admin 數(shù)據(jù)庫驗(yàn)證身份,您還需在每個(gè)數(shù)據(jù)庫中創(chuàng)建用戶賬戶,讓這些用戶能夠訪問該數(shù)據(jù)庫。
2、創(chuàng)建用戶管理員賬戶
配置訪問控制的第一步是創(chuàng)建用戶管理員賬戶。用戶管理員應(yīng)只有創(chuàng)建用戶賬戶的權(quán)限,而不能管理數(shù)據(jù)庫或執(zhí)行其他管理任務(wù)。這確保數(shù)據(jù)庫管理和用戶賬戶管理之間有清晰的界限。
- 在 admin 數(shù)據(jù)庫中,添加一個(gè)用戶并賦予
userAdminAnyDatabase
角色,userAdminAnyDatabase
只在admin
數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的userAdmin權(quán)限。
例如,下面是在 admin 數(shù)據(jù)庫中創(chuàng)建一個(gè)名為myUserAdmin
用戶。
[root@mbasic ~]# mongo MongoDB shell version: 3.2.6 connecting to: test > use admin switched to db admin > db.createUser( ... { ... user: "myUserAdmin", ... pwd: "abc123", ... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] ... } ... ) Successfully added user: { "user" : "myUserAdmin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } >
用戶管理員應(yīng)只有創(chuàng)建用戶賬戶的權(quán)限,而不能管理數(shù)據(jù)庫或執(zhí)行其他管理任務(wù)。
要?jiǎng)?chuàng)建某個(gè)庫的管理用戶,必須在 admin 進(jìn)行認(rèn)證,給哪個(gè)庫創(chuàng)建用戶就先切換到哪個(gè)庫下面。
4、開啟權(quán)限驗(yàn)證
編輯配置文件
/etc/mongod.conf
,修改內(nèi)容如下:security: authorization: enabled
重啟mongodb服務(wù)
systemctl restart mongod
- 現(xiàn)在,客戶端連接到服務(wù)器時(shí)必須提供用戶名和密碼。另外,從 MongoDB shell 訪問 MongoDB 服務(wù)器時(shí),如果要添加用戶賬戶,必須執(zhí)行下面的命令向數(shù)據(jù)庫 admin 驗(yàn)證身份:
> use admin switched to db admin > db.auth("myUserAdmin","abc123") 1 >
也可以在啟動(dòng) MongoDB shell 時(shí)使用選項(xiàng)
-u
和-p
向數(shù)據(jù)庫 admin 驗(yàn)證身份:mongo -u "myUserAdmin" -p "abc123" --authenticationDatabase admin
5、創(chuàng)建數(shù)據(jù)庫管理員賬戶
要?jiǎng)?chuàng)建數(shù)據(jù)庫管理員,可在 MongoDB shell 中切換到數(shù)據(jù)庫 admin,再使用方法createUser
添加角色為readWriteAnyDatabase
、dbAdminAnyDatabase
和clusterAdmin
的用戶。這讓這名用戶能夠訪問系統(tǒng)中的所有數(shù)據(jù)庫、創(chuàng)建新的數(shù)據(jù)庫以及管理 MongoDB 集群和副本集。
- 創(chuàng)建一個(gè)名為 dbadmin 的數(shù)據(jù)庫管理員:
> use admin switched to db admin > db.createUser( ... { ... user: "dbadmin", ... pwd: "abc123", ... roles: [ "readWriteAnyDatabase", "dbAdminAnyDatabase","clusterAdmin" ] ... } ... ) Successfully added user: { "user" : "dbadmin", "roles" : [ "readWriteAnyDatabase", "dbAdminAnyDatabase", "clusterAdmin" ] }
數(shù)據(jù)庫管理員能夠訪問系統(tǒng)中的所有數(shù)據(jù)庫、創(chuàng)建新的數(shù)據(jù)庫以及管理 MongoDB 集群和副本集。
如果要求管理其他數(shù)據(jù)庫,首先要去 admin 庫里面去認(rèn)證。
三、創(chuàng)建普通用戶
一旦經(jīng)過認(rèn)證的用戶管理員,可以使用
db.createUser()
去創(chuàng)建額外的用戶。
你可以分配mongodb內(nèi)置的角色或用戶自定義的角色給用戶。這個(gè) myUserAdmin 用戶僅僅只有特權(quán)去管理用戶和角色,如果你試圖執(zhí)行其他任何操作,例如在 test 數(shù)據(jù)庫中的foo集合中去讀數(shù)據(jù),mongodb將返回錯(cuò)誤。
你創(chuàng)建用戶的數(shù)據(jù)庫(這里就是test數(shù)據(jù)庫)是該用戶認(rèn)證數(shù)據(jù)庫。盡管用戶認(rèn)證是這個(gè)數(shù)據(jù)庫,用戶依然可以有其他數(shù)據(jù)庫的角色。即用戶認(rèn)證數(shù)據(jù)庫不限制用戶權(quán)限。
創(chuàng)建一個(gè)角色為readWrite
的用戶 test1 來管理數(shù)據(jù)庫test
。
[root@mbasic ~]# mongo MongoDB shell version: 3.2.6 connecting to: test > use admin switched to db admin > db.auth('myUserAdmin','abc123') 1 > use test switched to db test > db.createUser( ... { ... user:"test1", ... pwd: "test1", ... roles: [{ role: "readWrite", db: "test"}] ... } ... ) Successfully added user: { "user" : "test1", "roles" : [ { "role" : "readWrite", "db" : "test" } ] } >
驗(yàn)證
[root@mbasic ~]# mongo MongoDB shell version: 3.2.6 connecting to: test > use test switched to db test > db.auth('test1','test1') 1 >
創(chuàng)建一個(gè)dmp用戶,對(duì)dmp數(shù)據(jù)庫只讀權(quán)限。
> use admin switched to db admin > db.auth('myUserAdmin','abc123') 1 > use dmp switched to db dmp >db.createUser( { user:"dmp1", pwd: "dmp1pass", roles: [{ role: "read", db: "dmp"}] } )
四、Mongodb 使用
1、導(dǎo)入 csv 數(shù)據(jù)
我們創(chuàng)建了一個(gè)數(shù)據(jù)庫 dmp,并且創(chuàng)建一個(gè)有讀寫權(quán)限的用戶 dmp,密碼dmp,我們導(dǎo)入一個(gè)從其他數(shù)據(jù)庫導(dǎo)出來的 csv 格式的數(shù)據(jù)。
[root@mbasic ~]# mongoimport -udmp -p dmp --db dmp --collection dmp_merge_basic --type csv --headerline --ignoreBlanks --file dmp.csv 2018-09-20T15:23:38.024+0800 connected to: localhost 2018-09-20T15:23:39.441+0800 imported 15347 documents
2、GUI圖形管理工具
把git倉庫克隆到本地
git clone https://github.com/mrvautin/adminMongo
- 進(jìn)入倉庫
cd adminMongo
- 安裝
npm install
- 啟動(dòng)
npm start
訪問地址
http://YOUR_SERVER_IP:1234
- 連接
mongodb://dmp:dmp@10.0.1.26:27017/dmp
- 查看數(shù)據(jù)
到此這篇關(guān)于Mongodb 用戶權(quán)限管理及配置詳解的文章就介紹到這了,更多相關(guān)Mongodb 用戶權(quán)限管理及配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript按日期查詢MongoDB中的數(shù)據(jù)的要點(diǎn)示例
這篇文章主要介紹了JavaScript按日期查詢MongoDB中數(shù)據(jù)的要點(diǎn)示例,MongoDB所支持的BSON有JSON沒有的一些數(shù)據(jù)類型,如Date和BinData類型,需要的朋友可以參考下2016-03-03SpringBoot+MongoDB實(shí)現(xiàn)物流訂單系統(tǒng)的代碼
這篇文章主要介紹了SpringBoot+MongoDB實(shí)現(xiàn)物流訂單系統(tǒng)的代碼,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09MongoDB入門教程之細(xì)說MongoDB數(shù)據(jù)庫的增刪查改操作
這篇文章主要介紹了MongoDB入門教程之細(xì)說MongoDB數(shù)據(jù)庫的增刪查改操作,本文環(huán)境是windows,所以以圖片形式講解,需要的朋友可以參考下2014-08-08MongoDB入門教程(包含安裝、常用命令、相關(guān)概念、使用技巧、常見操作等)
這篇文章主要介紹了MongoDB入門教程,包含安裝、常用命令、相關(guān)概念、使用技巧、常見操作等,是一篇比較好的入門文章,需要的朋友可以參考下2014-06-06詳解Mongodb?多文檔聚合操作處理方法(Map-reduce?函數(shù))
這篇文章主要介紹了Mongodb多文檔聚合操作處理方法(Map-reduce函數(shù)),本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Win10 64位安裝MongoDB數(shù)據(jù)庫的詳細(xì)教程
這篇文章主要介紹了Win10 64位安裝MongoDB數(shù)據(jù)庫的詳細(xì)教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12MongoDB.NET 2.2.4驅(qū)動(dòng)版本對(duì)Mongodb3.3數(shù)據(jù)庫中GridFS增刪改查
這篇文章主要為大家詳細(xì)介紹了使用MongoDB.NET 2.2.4驅(qū)動(dòng)版本對(duì)Mongodb3.3數(shù)據(jù)庫中GridFS增刪改查,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11