《MongoDB權(quán)限管理》要點:
本文介紹了MongoDB權(quán)限管理,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:非關(guān)系型數(shù)據(jù)庫
前幾天網(wǎng)友問MongoDB數(shù)據(jù)庫權(quán)限方面的問題.當(dāng)時大致的了解了一下,這周仔細(xì)了解了一下.對于一個數(shù)據(jù)庫不可能隨意的拜訪,肯定要有寫拜訪限制.
在了解這個之前首先熟悉下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:顯示時間跨越1毫秒的最新的system.profile條目.
log[name]:顯示登錄記憶的最后一段.如果沒指定name,那么使用global.
exit:退出數(shù)據(jù)庫.
二、shell辦法
MongoDB中的shell提供了許多用于執(zhí)行管理功能的辦法.
load(script):在shell內(nèi)部加載和運行Javascript文件.要對數(shù)據(jù)庫腳本操作,使用它是一種最好的方式.
UUID(string):把一個32字節(jié)的十六進制字符串轉(zhuǎn)換成BSON的UUID.
db.auth(username,password):在當(dāng)前數(shù)據(jù)庫進行身份認(rèn)證.
三、使用shell編寫腳本
命令、辦法和MongoDB shell的數(shù)據(jù)結(jié)構(gòu)都是基于交互式Javascript的.管理MongoDB的一個很好的辦法是創(chuàng)建可以運行多次的腳本,或者可以隨時在特定的時間運行的腳本,如在升級時運行的腳本.腳本文件可以包含任意數(shù)量的MongoDB命令,使用javascript代碼,如條件語句和循環(huán).有兩種運行MongoDB shell腳本的方式.
1.使用--eval
該--eval參數(shù)接受一個Javascript字符串或Javascript文件并啟動MongoDB的shell,并立即執(zhí)行Javascript.
2.使用load(script_path)辦法運行MongoDB腳本.
四、管理用戶賬號
1.創(chuàng)立用戶賬號
不管是創(chuàng)建用戶管理員賬號還是數(shù)據(jù)庫管理員賬號都是用addUser()方法添加用戶賬戶,MongoDB 3.0之后用createUser()代替,再用adduser()會提示adduser()不是function,下面的截圖能看到提示,該方法接受一個document對象,允許指定該用戶的用戶名、角色和暗碼.下面是document對象可以指定的字段:
user string 指定一個唯一的用戶名
roles array 指定用戶角色的數(shù)組.MongoDB提供了大量可以分配給用戶的角色.角色分歧對應(yīng)的權(quán)限也不一樣,這篇主要還是在角色上
pwd hashorstring (可選)指定用戶的暗碼.在創(chuàng)建用戶時,這可能是一個散列值或字符串,然而它以散列值被存儲在數(shù)據(jù)庫中.
userSource <database> (可選)代替pwd字段,指向具有相同的用戶定義的另一個數(shù)據(jù)庫.pwd或那個數(shù)據(jù)庫的userSource然后被用作該用戶的憑據(jù).userSource字段和pwd字段是相互排斥的,一個文檔不能同時包括兩者.
otherDBRoles {<database>:[array],<database>:[array]} :(可選) 允許指定這個用戶在其他數(shù)據(jù)庫中的擁有的角色.它的格式是一個文檔,該文檔用數(shù)據(jù)庫名稱作為鍵,包含那個數(shù)據(jù)庫適用于該用戶的角色的數(shù)組.
2.角色
用戶和角色是多對多的關(guān)系,一個用戶可以對應(yīng)多個角色,一個角色可以擁有多個用戶.用戶角色的分歧對應(yīng)的權(quán)限也是不一樣的.下面是一些分配給用戶的常見的角色.
read 允許用戶從數(shù)據(jù)庫的任何集合中讀取數(shù)據(jù)
readAnyDatabase 同read,但針對所有數(shù)據(jù)庫
readwrite 提供read的所有功能,并允許用戶寫數(shù)據(jù)庫中的任何集合,包含插入、刪除和更新文件,以及創(chuàng)建、重命名和刪除集合
readWriteAnyDatabase 同readWrite,只是針對所有數(shù)據(jù)庫
dbAdmin 允許用戶讀取和寫入數(shù)據(jù)庫,以及清理、修改、壓縮、得到統(tǒng)計概要,并進行驗證
dbAdminAnyDatabase 同dbadmin,但針對所有數(shù)據(jù)庫
clusterAdmin 允許用戶對MongoDB執(zhí)行一般的管理,包含連接、集群、復(fù)制、列出數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)庫和刪除數(shù)據(jù)庫
userAdmin 允許用戶創(chuàng)立和修改數(shù)據(jù)庫的用戶賬號
userAdminAnyDatabase 同userAdmin,但針對所有的數(shù)據(jù)庫
3.刪除用戶賬號
可以使用removeUser(<username>)辦法刪除MongoDB的用戶.需要先切換到該用戶所在的數(shù)據(jù)庫.在MongoDB 3.0后使用dropUser(<username>),下面配置時截圖就能看到提示.
五、配置拜訪控制
MongoDB提供在數(shù)據(jù)庫級別上的驗證和授權(quán),意味著用戶存在于單個數(shù)據(jù)庫的上下文中.為了實現(xiàn)基本的身份驗證,MongoDB把用戶憑據(jù)存儲在每個數(shù)據(jù)中名為system.users的集合中.
當(dāng)還沒在admin數(shù)據(jù)庫中定義用戶時,MongoDB允許在本地主機上的連接有對數(shù)據(jù)庫的完全管理拜訪.因此,設(shè)置新的MongoDB實例的第一步是創(chuàng)建用戶管理員和數(shù)據(jù)庫管理員賬戶.用戶管理員具有在admin和其他數(shù)據(jù)庫中創(chuàng)建用戶賬戶的功能.還需要創(chuàng)建一個可以當(dāng)作超級用戶使用的數(shù)據(jù)庫管理員賬戶,用來管理數(shù)據(jù)庫、集群、復(fù)制和MongoDB的其他方面.
1.創(chuàng)立用戶管理員
用戶管理員賬號應(yīng)只有創(chuàng)立用戶的權(quán)限,而沒有管理數(shù)據(jù)庫或其他管理功能.使數(shù)據(jù)庫管理和用戶賬戶管理完全分離.用戶管理賬戶應(yīng)該以userAdminAnyDatabase作為唯一的角色來創(chuàng)立.
上面截圖可以看到使用用戶管理員賬戶來查詢collection是報錯,這是因為用戶管理員賬戶只是用來管理用戶的,不克不及管理數(shù)據(jù)庫.
2.打開身份驗證
用戶管理員賬戶已經(jīng)創(chuàng)建必要使用--auth參數(shù)重啟MongoDB數(shù)據(jù)庫
3.創(chuàng)立數(shù)據(jù)庫管理員
上面截圖中創(chuàng)立了一個admin數(shù)據(jù)庫的數(shù)據(jù)庫管理員,使用數(shù)據(jù)庫管理員顯示collections是可以顯示的,而使用用戶管理員顯示時報錯.
《MongoDB權(quán)限管理》是否對您有啟發(fā),歡迎查看更多與《MongoDB權(quán)限管理》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/10209.html