天天看點

mongodb之使用者管理

Mongo 系統資料庫介紹以及權限設定。

 本文中隻正對mongo2.61有效,較低版本中的指令在新版本中慢慢被替換掉了或是不推薦使用。例如,在mongo242版本中使用db.addUser()來建立使用者,但是在mongo261中使用這個指令時,會提示不推薦使用這個指令。

1.系統資料庫介紹。

  Mongo中隻用兩個系統資料,分别是admin  ,和 local 。Admin主要用來存儲的使用者,角色,版本的相關資訊。Local 主要存儲本地伺服器的相關資訊(伺服器的啟動和關閉相關資訊,副本集,複制的相關資訊)。在副本集中,這個資料庫是不會被複制的。

2.安全設定。

  如果在配置檔案中沒有設定auth=true,那麼任何客服端都可以連結到mongo伺服器,如果admin的system.users 中沒有使用者那麼任何用戶端都可以對mongo伺服器做任何操作,沒有任何限制。是以在首次登陸mongo的時候第一件事就是設定一個登陸使用者,并且重新開機服務。

3.使用者相關問題。

   建立使用者:db.createUser() 

   删除使用者:db.dropUser(UserName)

   修改密碼:db.changeUserPassword(“UserName”,“NewPWD”)

執行個體一:删除使用者:

rs0:PRIMARY> db.system.users.find({user:"test"})

{ "_id" : "admin.test", "user" : "test", "db" : "admin", "credentials" : { "MONGODB-CR" : "d2c20ba3ec3c642d7187d11cb54a9016" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }

rs0:PRIMARY> db.dropUser("test")

true

rs0:PRIMARY> 

執行個體二:修改使用者密碼:

rs0:PRIMARY> db.auth("test1","anyu@2015")

1

rs0:PRIMARY> db.changeUserPassword("test1","anyu@2014")

rs0:PRIMARY> db.auth("test1","anyu@2014")

4:建立使用者

   使用者建立比較複雜,涉及到使用者的權限,角色問題。

1.建立使用者

(1).建立一個不受通路限制的超級使用者,該使用者可以對任何資料庫,mongo伺服器做任何操作。

方式1:

use admin 

db.createUser(   

{     

    user:"admin",     

    pwd:"test@2015",     

roles:["root"]   

} )

方式2:

    user: "admin",     

    pwd: "anyu@2014",     

    roles:     [       {         

    role: "userAdminAnyDatabase",         

    db: "admin"      

}  ]  } )

(2).建立一般使用者,也是用createUser

use db01 

    user:"proUser",     

    pwd:"anyu@2014",     

    roles:[       

    {role:"read",db:"db01"},       

    {role:"read",db:"db02"},       

    {role:"read",db:"db03"} ]   

使用者proUser 對 db01,db02,db03 擁有讀權限

(3).常用的角色介紹:

read:隻讀角色

readWrite:讀寫角色

dbAdmin:資料庫管理權限

userAdmin:資料庫的使用者管理權限

clusterAdmin:叢集管理權限(副本集、分片、主從等相關管理)

readAnyDatabase:任何資料庫的隻讀權限(和read相似)

readWriteAnyDatabase:何資料庫的讀寫權限(和readWrite相似)

userAdminAnyDatabase:任何資料庫使用者的管理權限(和userAdmin相似)

dbAdminAnyDatabase:任何資料庫的管理權限(dbAdmin相似)

角色擁有的權限參考:

http://drops.wooyun.org/%E8%BF%90%E7%BB%B4%E5%AE%89%E5%85%A8/2470

(4).使用者具體資訊檢視

檢視使用者權限:

db.runCommand(   

    usersInfo:"userName",     

showPrivileges:true   

檢視使用者資訊:

db.runCommand({usersInfo:"admin"})

rs0:PRIMARY> db.runCommand({usersInfo:"root"})

{

        "users" : [

                {

                        "_id" : "admin.root",

                        "user" : "root",

                        "db" : "admin",

                        "roles" : [

                                {

                                        "role" : "root",

                                        "db" : "admin"

                                }

                        ]

                }

        ],

        "ok" : 1

}

note:

1.增加使用者或是删除使用者都報錯的解決方法。

Error: couldn't add user: User and role management commands require auth data to have schema version

http://jingyan.baidu.com/article/6b97984d999ff31ca2b0bfce.html

參考連結:

http://www.chinacloud.cn/show.aspx?id=13972&cid=22

http://www.jb51.net/article/53830.htm