MongoDB 3.0.8 許可權管理

wolfreturn發表於2016-01-24
MongoDB 3.0雖然管理上有所改變,但是還是沒有太明顯。
千萬不要相信百度上各種,3.0起沒有root使用者,授個userAdminAnyDatabase角色許可權的使用者就是root使用者。
不然用客戶端連線會報下面一些錯誤
mongo shell 中db.auth 授權後刪除普通資料庫報錯
> db.dropDatabase()
{
        "ok" : 0,
        "errmsg" : "not authorized on guo to execute command { dropDatabase: 1.0 }",
        "code" : 13
}
這是因為userAdminAnyDatabase不包括刪除資料庫許可權
客戶端連線檢視資料包錯
{
    "code" : 13,
    "errmsg" : "not authorized on admin to execute command { listCollections: true, filter: {}, cursor: {} }",
    "message" : "not authorized on admin to execute command { listCollections: true, filter: {}, cursor: {} }",
    "name" : "MongoError",
    "ok" : 0
}


Error encountered
Element 'inprog' not found.
Type: System.Collections.Generic.KeyNotFoundException
Stack:    在 MangoUI.ComServerView.RefreshCurrentOps(MMongo mo, TimeSpan& data, TimeSpan& gui, Boolean throwEx)
   在 MangoUI.ComServerView.RenderMe()

不僅有root角色,還有個超級無敵的__system角色不過官方不推薦使用,一般起用root角色即可。
詳見:



3.0版本還是有root的,如下面第5種方式建出的才是root超級許可權的使用者。


mongodb從2.4版本中對使用者許可權管理做了全新的調整,把許可權細化了,增強了安全性,越來越像mysql的許可權管理了。

1. 建立一個超級使用者

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

超級使用者的role有兩種,userAdmin或者userAdminAnyDatabase(比前一種多加了對所有資料庫的訪問)。

db是指定資料庫的名字,admin是管理資料庫。

2. 用新建立的使用者登入

mongo --host xxx -u adminUserName -p userPassword --authenticationDatabase admin
3. 檢視當前使用者的許可權

db.runCommand(
  {
    usersInfo:"userName",
    showPrivileges:true
  }
)
4. 建立一般使用者,也是用createUser

use db01
db.createUser(
  {
    user:"oneUser",
    pwd:"12345",
    roles:[
      {role:"read",db:"db01"},
      {role:"read",db:"db02"},
      {role:"read",db:"db03"}
    ]
  }
)

5. 建立一個不受訪問限制的超級使用者

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

6. 修改密碼

use admin
db.changeUserPassword("username", "xxx")
7. 檢視使用者資訊

db.runCommand({usersInfo:"userName"})
8. 修改密碼和使用者資訊

db.runCommand(
  {
    updateUser:"username",
    pwd:"xxx",
    customData:{title:"xxx"}
  }
)

注:

1. 和使用者管理相關的操作基本都要在admin資料庫下執行,要先use admin;

2. 如果在某個單一的資料庫下,那隻能對當前資料庫的許可權進行操作;

3. db.addUser是老版本的操作,現在3.0版本已經不通使用,建立出來的user是帶有root role的超級管理員。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24742969/viewspace-1981570/,如需轉載,請註明出處,否則將追究法律責任。

相關文章