MongoDB數(shù)據(jù)庫權(quán)限管理詳解
前幾天網(wǎng)友問MongoDB數(shù)據(jù)庫權(quán)限方面的問題。當(dāng)時(shí)大致的了解了一下,這周仔細(xì)了解了一下。對(duì)于一個(gè)數(shù)據(jù)庫不可能隨意的訪問,肯定要有寫訪問限制。
在了解這個(gè)之前首先熟悉下shell客戶端。打開shell客戶端的方法:mongo.關(guān)閉數(shù)據(jù)庫引擎的話可以使用db.shutdownServer().
一、shell命令
MongoDB的shell提供了一些命令,可以從shell提示符執(zhí)行它們。
- help<option>:用于為MongoDB的shell命令顯示語法幫助。option參數(shù)允許指定你想得到幫助的特定領(lǐng)域。
- use<database>:更改當(dāng)前database句柄。數(shù)據(jù)庫操作將在當(dāng)前數(shù)據(jù)庫句柄上處理。
- show<option>:根據(jù)option參數(shù)顯示清單.
- dbs:顯示數(shù)據(jù)庫清單。
- collections:顯示當(dāng)前數(shù)據(jù)庫的集合清單。
- profile:顯示時(shí)間超過1毫秒的最新的system.profile條目。
- log[name]:顯示登錄記憶的最后一段。如果沒指定name,那么使用global。
- exit:退出數(shù)據(jù)庫。
二、shell方法
MongoDB中的shell提供了許多用于執(zhí)行管理功能的方法。
- load(script):在shell內(nèi)部加載和運(yùn)行Javascript文件。要對(duì)數(shù)據(jù)庫腳本操作,使用它是一種最好的方式。
- UUID(string):把一個(gè)32字節(jié)的十六進(jìn)制字符串轉(zhuǎn)換成BSON的UUID。
- db.auth(username,password):在當(dāng)前數(shù)據(jù)庫進(jìn)行身份認(rèn)證。
三、使用shell編寫腳本
命令、方法和MongoDB shell的數(shù)據(jù)結(jié)構(gòu)都是基于交互式Javascript的。管理MongoDB的一個(gè)很好的方法是創(chuàng)建可以運(yùn)行多次的腳本,或者可以隨時(shí)在特定的時(shí)間運(yùn)行的腳本,如在升級(jí)時(shí)運(yùn)行的腳本。腳本文件可以包含任意數(shù)量的MongoDB命令,使用javascript代碼,如條件語句和循環(huán)。有兩種運(yùn)行MongoDB shell腳本的方式。
1.使用--eval
該--eval參數(shù)接受一個(gè)Javascript字符串或Javascript文件并啟動(dòng)MongoDB的shell,并立即執(zhí)行Javascript。
2.使用load(script_path)方法運(yùn)行MongoDB腳本。
四、管理用戶賬號(hào)
1.創(chuàng)建用戶賬號(hào)
不管是創(chuàng)建用戶管理員賬號(hào)還是數(shù)據(jù)庫管理員賬號(hào)都是用addUser()方法添加用戶賬戶,MongoDB 3.0之后用createUser()代替,再用adduser()會(huì)提示adduser()不是function,下面的截圖能看到提示,該方法接受一個(gè)document對(duì)象,允許指定該用戶的用戶名、角色和密碼。下面是document對(duì)象可以指定的字段:
- user string 指定一個(gè)唯一的用戶名
- roles array 指定用戶角色的數(shù)組。MongoDB提供了大量可以分配給用戶的角色。角色不同對(duì)應(yīng)的權(quán)限也不一樣,這篇主要還是在角色上
- pwd hashorstring (可選)指定用戶的密碼。在創(chuàng)建用戶時(shí),這可能是一個(gè)散列值或字符串,然而它以散列值被存儲(chǔ)在數(shù)據(jù)庫中。
- userSource <database> (可選)代替pwd字段,指向具有相同的用戶定義的另一個(gè)數(shù)據(jù)庫。pwd或那個(gè)數(shù)據(jù)庫的userSource然后被用作該用戶的憑據(jù)。userSource字段和pwd字段是相互排斥的,一個(gè)文檔不能同時(shí)包含兩者。
- otherDBRoles {<database>:[array],<database>:[array]} :(可選) 允許指定這個(gè)用戶在其他數(shù)據(jù)庫中的擁有的角色。它的格式是一個(gè)文檔,該文檔用數(shù)據(jù)庫名稱作為鍵,包括那個(gè)數(shù)據(jù)庫適用于該用戶的角色的數(shù)組。
2.角色
用戶和角色是多對(duì)多的關(guān)系,一個(gè)用戶可以對(duì)應(yīng)多個(gè)角色,一個(gè)角色可以擁有多個(gè)用戶。用戶角色的不同對(duì)應(yīng)的權(quán)限也是不一樣的。下面是一些分配給用戶的常見的角色。
- read 允許用戶從數(shù)據(jù)庫的任何集合中讀取數(shù)據(jù)
- readAnyDatabase 同read,但針對(duì)所有數(shù)據(jù)庫
- readwrite提供read的所有功能,并允許用戶寫數(shù)據(jù)庫中的任何集合,包括插入、刪除和更新文件,以及創(chuàng)建、重命名和刪除集合
- readWriteAnyDatabase 同readWrite,只是針對(duì)所有數(shù)據(jù)庫
- dbAdmin 允許用戶讀取和寫入數(shù)據(jù)庫,以及清理、修改、壓縮、得到統(tǒng)計(jì)概要,并進(jìn)行驗(yàn)證
- dbAdminAnyDatabase 同dbadmin,但針對(duì)所有數(shù)據(jù)庫
- clusterAdmin 允許用戶對(duì)MongoDB執(zhí)行一般的管理,包括連接、集群、復(fù)制、列出數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)庫和刪除數(shù)據(jù)庫
- userAdmin 允許用戶創(chuàng)建和修改數(shù)據(jù)庫的用戶賬號(hào)
- userAdminAnyDatabase 同userAdmin,但針對(duì)所有的數(shù)據(jù)庫
3.刪除用戶賬號(hào)
可以使用removeUser(<username>)方法刪除MongoDB的用戶。需要先切換到該用戶所在的數(shù)據(jù)庫。在MongoDB 3.0后使用dropUser(<username>),下面配置時(shí)截圖就能看到提示。
五、配置訪問控制
MongoDB提供在數(shù)據(jù)庫級(jí)別上的驗(yàn)證和授權(quán),意味著用戶存在于單個(gè)數(shù)據(jù)庫的上下文中。為了實(shí)現(xiàn)基本的身份驗(yàn)證,MongoDB把用戶憑據(jù)存儲(chǔ)在每個(gè)數(shù)據(jù)中名為system.users的集合中。
當(dāng)還沒在admin數(shù)據(jù)庫中定義用戶時(shí),MongoDB允許在本地主機(jī)上的連接有對(duì)數(shù)據(jù)庫的完全管理訪問。因此,設(shè)置新的MongoDB實(shí)例的第一步是創(chuàng)建用戶管理員和數(shù)據(jù)庫管理員賬戶。用戶管理員具有在admin和其他數(shù)據(jù)庫中創(chuàng)建用戶賬戶的功能。還需要?jiǎng)?chuàng)建一個(gè)可以當(dāng)作超級(jí)用戶使用的數(shù)據(jù)庫管理員賬戶,用來管理數(shù)據(jù)庫、集群、復(fù)制和MongoDB的其他方面。
1.創(chuàng)建用戶管理員
用戶管理員賬號(hào)應(yīng)只有創(chuàng)建用戶的權(quán)限,而沒有管理數(shù)據(jù)庫或其他管理功能。使數(shù)據(jù)庫管理和用戶賬戶管理完全分離。用戶管理賬戶應(yīng)該以u(píng)serAdminAnyDatabase作為唯一的角色來創(chuàng)建。
上面截圖可以看到使用用戶管理員賬戶來查詢collection是報(bào)錯(cuò),這是因?yàn)橛脩艄芾韱T賬戶只是用來管理用戶的,不能管理數(shù)據(jù)庫。
2.打開身份驗(yàn)證
用戶管理員賬戶已經(jīng)創(chuàng)建需要使用--auth參數(shù)重啟MongoDB數(shù)據(jù)庫
3.創(chuàng)建數(shù)據(jù)庫管理員
上面截圖中創(chuàng)建了一個(gè)admin數(shù)據(jù)庫的數(shù)據(jù)庫管理員,使用數(shù)據(jù)庫管理員顯示collections是可以顯示的,而使用用戶管理員顯示時(shí)報(bào)錯(cuò)。
到此這篇關(guān)于MongoDB數(shù)據(jù)庫權(quán)限管理的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MongoDB安全及身份認(rèn)證(實(shí)例講解)
下面小編就為大家?guī)硪黄狹ongoDB安全及身份認(rèn)證(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07Windows下把MongoDB安裝為系統(tǒng)服務(wù)的方法
這篇文章主要介紹了Windows下把MongoDB安裝為系統(tǒng)服務(wù)的方法,本文詳細(xì)介紹了將mongoDB安裝為WinXP下系統(tǒng)服務(wù)的過程,需要的朋友可以參考下2014-10-10MongoDB開啟權(quán)限認(rèn)證的方法步驟詳解
MongoDB已經(jīng)使用很長(zhǎng)一段時(shí)間了,基于MongoDB的數(shù)據(jù)存儲(chǔ)也一直沒有使用到權(quán)限訪問(MongoDB默認(rèn)設(shè)置為無權(quán)限訪問限制),最近深入學(xué)習(xí)了下,所以下面這篇文章主要給大家介紹了關(guān)于MongoDB開啟權(quán)限認(rèn)證的相關(guān)資料,需要的朋友可以參考下。2018-02-02MongoDB與MySQL的操作對(duì)比表及區(qū)別介紹
這篇文章主要介紹了MongoDB與MySQL的操作對(duì)比表及區(qū)別介紹,本文著重講解了Mongodb與Mysql的操作命令的對(duì)比,需要的朋友可以參考下2015-05-05MongoDB中實(shí)現(xiàn)多表聯(lián)查的實(shí)例教程
數(shù)據(jù)庫應(yīng)用在我們的生活中是很常見的,在編輯一些應(yīng)用以及軟件的時(shí)候都需要用到數(shù)據(jù)庫來存儲(chǔ)數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MongoDB中實(shí)現(xiàn)多表聯(lián)查的相關(guān)資料,需要的朋友可以參考下2022-07-07Centos 7下Mongodb開機(jī)無法自啟動(dòng)的解決方法
這篇文章主要介紹了Centos 7下Mongodb開機(jī)無法自啟動(dòng)的解決方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-03-03Mongodb增加、移除Arbiter節(jié)點(diǎn)實(shí)例
這篇文章主要介紹了Mongodb增加、移除Arbiter節(jié)點(diǎn)實(shí)例,Arbiter是搭建Mongodb集群的一個(gè)必備節(jié)點(diǎn),需要的朋友可以參考下2015-01-01