基礎概念:
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')