天天看點

Mongodb賬戶管理

Mongodb賬戶管理

介紹

Mongodb是一個schema free的非sql類分布式資料庫,可以利用它做很多很靈活的存儲和操作,最近了解了下它的賬戶機制,通過設定auth啟動方式可以對所有登陸使用者做各種操作的限定。

認證方式登陸mongodb

sudo ./bin/mongod --auth -dbpath=/usr/local/mongodb/data/db --port 27017 -logpath=/usr/local/mongodb/log --logappend
      

dbpath和logpath需要自己提前單獨的建立好目錄。

-auth: 表示通過認證方式登陸mongodb

不過在用auth方式啟動mongodb伺服器之前,需要建立一個可以管理所有使用者的賬戶(一般在admin資料庫中),如:

use admin
db.createUser(
   {
     user: "root",
     pwd: "root",
     roles: [{ role: "userAdminAnyDatabase", db: "admin" } ]
   }
)
      

建立了一個“root”賬戶,它的role(即權限範圍)是“userAdminAnyDatabase”,即可以admin權限管理任意的資料庫的使用者。

如果不使用“use admin”,那會在目前資料庫建立user,不指定db的登陸會預設在test資料庫中,createUser中的role指定了權限類型,roles中的“db”指定了作用域的資料庫。

設定以auth方式登陸之後,client端通過mongo登陸mongodb,是必須加上“--authenticationDatabase”選項的,“authenticationDatabase”指定了校驗使用者賬戶名和密碼的資料庫,例如:

./bin/mongo mytest -u "test" -p "123" --authenticationDatabase admin
      
  • 緊接着mongo指令後面的“mytest”指定了登陸之後所在的資料庫,即成功登陸之後會直接跳轉到該資料庫,不寫預設是test資料庫。
  • --authenticationDatabase 指定的是驗證使用者名和密碼的資料庫,也就是說在哪個資料庫建立的登陸使用者,就寫哪個資料庫,如上例中,user=“test”和passwd=“123”是在admin db中建立的。
  • 如果目的既是登陸test資料庫,而使用者也是test資料庫中建立,那麼可以不用寫後面的參數 --authenticationDatabase,如下也可以登陸:
./bin/mongo mytest -u "test" -p "123" 
      

mongodb關閉

不要kill -9 pid 方式關閉mongodb的程序,這樣會有很多服務資源沒法回收,應該使用

kill -2 pid
      

或者

db.shutdownServer()