mongo數據庫用戶創建及權限授予

基礎概念:

Built-In Roles(內置角色): 
1.數據庫用戶角色:read、readWrite; 
2.數據庫管理角色:dbAdmin、dbOwner、userAdmin; 
3.集羣管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 
4.備份恢復角色:backup、restore; 
5.所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 
6.超級用戶角色:root // 這裏還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase) 
7.內部角色:__system

Read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
backup,retore:在進行備份、恢復時可以單獨指定的角色,在db.createUser()方法中roles裏面的db必須寫成是admin庫,要不然會 報錯
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫裏創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和複製集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限,
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。

root:只在admin數據庫中可用。超級賬號,超級權限
dbOwner:The database owner can perform any administrative action on the database. This role combines the privileges granted by the readWrite, dbAdmin and userAdmin roles.
 

歸納起來就是用戶角色分爲管理和普通角色,用戶管理和表管理,有些只能是admin數據庫才能設置的權限。

另外每一個角色都是針對一個數據庫來說的,而每一個用戶的創建有事再一個數據庫底下創建,就是要先use dbname,然後創建用戶,而創建的時候可以是別的數據庫role 比如:

{
    "_id" : "admin.admin",
    "userId" : UUID("146db95a-31a2-4778-b7c5-24f5b446bf1e"),
    "user" : "admin",
    "db" : "admin",
    "roles" : [
        {
            "role" : "clusterAdmin",
            "db" : "admin"
        },
        {
            "role" : "dbOwner",
            "db" : "admin"
        },
        {
            "role" : "dbAdminAnyDatabase",
            "db" : "admin"
        },
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        }
    ]
}
{
    "_id" : "admin.user2",
    "userId" : UUID("7c686ffe-09ee-456c-bd15-69026e56b08a"),
    "user" : "user2",
    "db" : "admin",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "pre"
        },
        {
            "role" : "dbOwner",
            "db" : "use2"
        }
    ]
}

例如上面的admin用戶有查看權限(所有數據庫show collections),卻沒有其他db的讀寫權限,下面user2這個用戶是創建在admin下面的,該用戶對pre數據庫和use2數據庫分別由讀寫和所有權限。所以這塊要注意人創建在哪個db下,可以操作哪個db。

下面附上一些db的權限密碼相關操作:

show dbs          查看數據庫
use dbname      進入數據庫
show users        查看當前數據庫用戶權限
創建用戶:
db.createUser({user:"usertest",pwd:"passtest",roles:[  {role:"clusterAdmin", db:"admin" }, {role:"readAnyDatabase",db:"admin" }, {role:"readWrite",db:"testDB" } ]})

修改密碼:
方法1:db.changeUserPassword("usertest","changepass");
方法2:db.updateUser("usertest",{pwd:"changepass1"});

修改權限
db.updateUser("usertest",{roles:[ {role:"read",db:"testDB"} ]})
注:updateuser它是完全替換之前的值,如果要新增或添加roles而不是代替它 
則使用方法: db.grantRolesToUser() 和 db.revokeRolesFromUser()
db.grantRolesToUser("usertest",[{role:"readWrite",db:"testDB"},{role:"read",db:"testDB"}])     #修改權限
db.revokeRolesFromUser("usertest",[{role:"read", db:"testDB"}])   # 刪除權限:

刪除用戶:db.dropUser('usertest')

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章