標籤:glob uuid 上下文 添加 mon 包含 不同 開啟 清單
開啟shell用戶端的方法:mongo.關閉資料庫引擎的話可以使用db.shutdownServer().
一、shell命令
MongoDB的shell提供了一些命令,可以從shell提示符執行它們。
help<option>:用於為MongoDB的shell命令顯示文法協助。option參數允許指定你想得到協助的特定領域。
use<database>:更改當前database控制代碼。資料庫操作將在當前資料庫控制代碼上處理。
show<option>:根據option參數顯示清單.
dbs:顯示資料庫清單。
collections:顯示當前資料庫的集合清單。
profile:顯示時間超過1毫秒的最新的system.profile條目。
log[name]:顯示登入記憶的最後一段。如果沒指定name,那麼使用global。
exit:退出資料庫。
二、shell方法
MongoDB中的shell提供了許多用於執行管理功能的方法。
load(script):在shell內部載入和運行Javascript檔案。要對資料庫指令碼操作,使用它是一種最好的方式。
UUID(string):把一個32位元組的十六進位字串轉換成BSON的UUID。
db.auth(username,password):在當前資料庫進行身份認證。
三、使用shell編寫指令碼
命令、方法和MongoDB shell的資料結構都是基於互動式Javascript的。管理MongoDB的一個很好的方法是建立可以運行多次的指令碼,或者可以隨時在特定的時間啟動並執行指令碼,如在升級時啟動並執行指令碼。指令檔可以包含任意數量的MongoDB命令,使用javascript代碼,如條件陳述式和迴圈。有兩種運行MongoDB shell指令碼的方式。
1.使用--eval
該--eval參數接受一個Javascript字串或Javascript檔案並啟動MongoDB的shell,並立即執行Javascript。
2.使用load(script_path)方法運行MongoDB指令碼。
四、系統管理使用者帳號
1.建立使用者帳號
不管是建立使用者管理員帳號還是資料庫管理員帳號都是用addUser()方法添加使用者賬戶,MongoDB 3.0之後用createUser()代替,再用adduser()會提示adduser()不是function,下面的能看到提示,該方法接受一個document對象,允許指定該使用者的使用者名稱、角色和密碼。下面是document對象可以指定的欄位:
user string 指定一個唯一的使用者名稱
roles array 指定使用者角色的數組。MongoDB提供了大量可以分配給使用者的角色。角色不同對應的許可權也不一樣,這篇主要還是在角色上
pwd hashorstring (可選)指定使用者的密碼。在建立使用者時,這可能是一個散列值或字串,然而它以散列值被儲存在資料庫中。
userSource <database> (可選)代替pwd欄位,指向具有相同的使用者定義的另一個資料庫。pwd或那個資料庫的userSource然後被用作該使用者的憑據。userSource欄位和pwd欄位是相互排斥的,一個文檔不能同時包含兩者。
otherDBRoles {<database>:[array],<database>:[array]} :(可選) 允許指定這個使用者在其他資料庫中的擁有的角色。它的格式是一個文檔,該文檔用資料庫名稱作為鍵,包括那個資料庫適用於該使用者的角色的數組。
2.角色
使用者和角色是多對多的關係,一個使用者可以對應多個角色,一個角色可以擁有多個使用者。使用者角色的不同對應的許可權也是不一樣的。下面是一些分配給使用者的常見的角色。
read 允許使用者從資料庫的任何集合中讀取資料
readAnyDatabase 同read,但針對所有資料庫
readwrite 提供read的所有功能,並允許使用者寫資料庫中的任何集合,包括插入、刪除和更新檔案,以及建立、重新命名和刪除集合
readWriteAnyDatabase 同readWrite,只是針對所有資料庫
dbAdmin 允許使用者讀取和寫入資料庫,以及清理、修改、壓縮、得到統計概要,並進行驗證
dbAdminAnyDatabase 同dbadmin,但針對所有資料庫
clusterAdmin 允許使用者對MongoDB執行一般的管理,包括串連、叢集、複製、列出資料庫、建立資料庫和刪除資料庫
userAdmin 允許使用者建立和修改資料庫的使用者帳號
userAdminAnyDatabase 同userAdmin,但針對所有的資料庫
3.刪除使用者帳號
可以使用removeUser(<username>)方法刪除MongoDB的使用者。需要先切換到該使用者所在的資料庫。在MongoDB 3.0後使用dropUser(<username>),下面配置時就能看到提示。
五、配置存取控制
MongoDB提供在資料庫層級上的驗證和授權,意味著使用者存在於單個資料庫的上下文中。為了實現基本的身分識別驗證,MongoDB把使用者憑證儲存在每個資料中名為system.users的集合中。
當還沒在admin資料庫中定義使用者時,MongoDB允許在本地主機上的串連有對資料庫的完全管理訪問。因此,設定新的MongoDB執行個體的第一步是建立使用者管理員和資料庫管理員賬戶。使用者管理員具有在admin和其他資料庫中建立使用者賬戶的功能。還需要建立一個可以當作超級使用者使用的資料庫管理員賬戶,用來管理資料庫、叢集、複製和MongoDB的其他方面。
1.建立使用者管理員
使用者管理員帳號應只有建立使用者的許可權,而沒有管理資料庫或其他管理功能。使資料庫管理和使用者賬戶管理完全分離。使用者管理賬戶應該以userAdminAnyDatabase作為唯一的角色來建立。
上面可以看到使用使用者管理員賬戶來查詢collection是報錯,這是因為使用者管理員賬戶只是用來系統管理使用者的,不能管理資料庫。
2.開啟身分識別驗證
使用者管理員賬戶已經建立需要使用--auth參數重啟MongoDB資料庫
3.建立資料庫管理員
上面中建立了一個admin資料庫的資料庫管理員,使用資料庫管理員顯示collections是可以顯示的,而使用使用者管理員顯示時報錯。
Read:允許使用者讀取指定資料庫
readWrite:允許使用者讀寫指定資料庫
dbAdmin:允許使用者在指定資料庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile
userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和系統管理使用者
clusterAdmin:只在admin資料庫中可用,賦予使用者所有分區和複製集相關函數的系統管理權限。
readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫權限
userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
root:只在admin資料庫中可用。超級帳號,超級許可權
(1).資料庫使用者角色
針對每一個資料庫進行控制。
read :提供了讀取所有非系統集合,以及系統集合中的system.indexes,system.js, system.namespaces
readWrite: 包含了所有read許可權,以及修改所有非系統集合的和系統集合中的system.js的許可權.
(2).資料庫管理角色
每一個資料庫包含了下面的資料庫管理角色。
dbOwner:該資料庫的所有者,具有該資料庫的全部許可權。
dbAdmin:一些資料庫物件的管理操作,但是沒有資料庫的讀寫權限。(參考:http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdmin)
userAdmin:為目前使用者建立、修改使用者和角色。擁有userAdmin許可權的使用者可以將該資料庫的任意許可權賦予任意的使用者。
(3).叢集系統管理權限
admin資料庫包含了下面的角色,使用者管理整個系統,而非單個資料庫。這些許可權包含了複製集和共用叢集的管理函數。
clusterAdmin:提供了最大的叢集管理功能。相當於clusterManager,clusterMonitor, and hostManager和dropDatabase的許可權組合。
clusterManager:提供了叢集和複製集管理和監控操作。擁有該許可權的使用者可以操作config和local資料庫(即分區和複製功能)
clusterMonitor:僅僅監控叢集和複製集。
hostManager:提供了監控和管理伺服器的許可權,包括shutdown節點,logrotate, repairDatabase等。
備份恢複許可權:admin資料庫中包含了備份恢複資料的角色。包括backup、restore等等。
(4).所有資料庫角色
admin資料庫提供了一個mongod執行個體中所有資料庫的許可權角色:
readAnyDatabase:具有read每一個資料庫許可權。但是不包括應用到叢集中的資料庫。
readWriteAnyDatabase:具有readWrite每一個資料庫許可權。但是不包括應用到叢集中的資料庫。
userAdminAnyDatabase:具有userAdmin每一個資料庫許可權,但是不包括應用到叢集中的資料庫。
dbAdminAnyDatabase:提供了dbAdmin每一個資料庫許可權,但是不包括應用到叢集中的資料庫。
(5). 超級管理員權限
root: dbadmin到admin資料庫、useradmin到admin資料庫以及UserAdminAnyDatabase。但它不具有備份恢複、直接操作system.*集合的許可權,但是擁有root許可權的超級使用者可以自己給自己賦予這些許可權。
(6). 備份恢複角色:backup、restore;
(7). 內部角色:__system
PS:關於每個角色所擁有的操作許可權可以點擊上面的內建角色連結查看詳情
MongoDB許可權管理