每個MongoDB的資料庫都可以有許多使用者,如果開啟了安全性檢查,則只有資料庫認證使用者才能執行相關的操作。admin的使用者可以對任何資料庫進行讀寫操作,其他資料庫的使用者只能執行相關許可權的操作。
開啟安全檢查前,先建立幾個使用者:
由於mongodb的新版本引入了role的概念,所以直接建立db.addUser(‘xxx’, ‘xxx’)會出現。Warning但依然建立了使用者。
WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
Successfully added user: { "user" : "test1", "roles" : [ "read" ] }
那麼我們只講大致講一下現在如何建立使用者。
查看roles
show roles
系統中有很多角色,我們關注幾個。
現在我也沒有完全搞懂他這裡面的所有角色定位。以後細看一下。
我們先看一下,現在系統中是沒有任何使用者的
我們建立立兩個使用者看看
use admin
# 建立root使用者(超級使用者,可用這個先在admin中驗證後再在其他庫中操作)
db.createUser({user: 'root', pwd: 'xxxxxxxxx', roles: [ { role: 'root', db: 'admin'} ]})
use test
# 建立test使用者
db.createUser({user: 'test', pwd: 'xxxxxxxxx', roles: [ { role: 'dbOwner', db: 'test'} ]})
use admin
db.system.users.find()
重啟mongodb並且加上–auth選項(注意以後開機自啟動也加上–auth選項)
pkill mongod
/usr/local/mongodb/bin/mongod --auth --dbpath=/data2/mongodbData/ --logpath=/data2/mongodbLogs --fork
# 修改/etc/rc.local中的mongod的啟動項並且也加上--auth
然後再連結mongo用戶端
可以看到不auth的時候show tables是看不到的。但use admin之後,還是看不到admin的表
如果用admin的使用者登入呢,圖如下:
可以看到admin庫中的使用者是全域使用者。
再附帶兩個刪除使用者的。註:它們只是對當前庫使用者有效
刪除admin庫下root使用者
use admin
db.dropUser("root", {w: "majority", wtimeout: 5000})
刪除admin庫下所有使用者
use admin
db.dropAllUsers( {w: "majority", wtimeout: 5000} )
總結一點:mongodb目前授權我感覺還是比較混亂。可能我還不是太明白原理。以後重新寫下。再說明一點,以前的addUser和deleteUser在2.6中雖然可用,但不推薦了,所以本文中說明均是以createUser和dropUser來做的講解。