MongoDB用戶管理
語法:
db.createUser(
{
user:<name_string>, #字符串
pwd:<password_strin>, #字符串
roles:[{role:<role_name>,db:<db_name>}] #數組
}
)
創建用戶:
> db.createUser(
... {
... user:"root",
... pwd:"admin",
... roles:[{role:"root",db:"admin"}]
... }
... )
用戶驗證:
> db.auth("root","admin") 1
查看用戶:
刪除用戶
db.dropUser(<user_name>) #刪除某個用戶,授受字符串參數
db.dropAllUsers() #刪除當前庫的所有用戶
查詢所有用戶 > db.getUsers() [ { "_id" : "admin.root", "user" : "root", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] }, { "_id" : "admin.sysadmin", "user" : "sysadmin", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] }, { "_id" : "admin.test", "user" : "test", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] } ]
刪除test用戶
> db.dropUser("test")
true
確認test用戶是否存在
> db.getUser("test")
null
刪除所有用戶
> db.dropAllUsers()
2
修改用戶密碼
要修改用戶密碼,要求用戶具有changePassword或changeOwnPassword的權限,有以下兩種方式用來修改用戶密碼:
db.changeUserPassword(<user_name>,<new_password>)
db.updateUser(<user_name>,{update_object})
db.changeUserPassword()示例:
admin@undefined$ db.auth("root","admin")
1
admin@undefined$ db.changeUserPassword("root","123456")
admin@undefined$ db.auth("root","admin")
Error: Authentication failed.
0
admin@undefined$ db.auth("root","123456")
1
admin@undefined$ show dbs
admin 0.000GB
local 0.000GB
test 0.000GB
test1 0.000GB
可以看到在修改root用戶的密碼後,原來的密碼驗證就失敗了,但是當前這個會話還是可以正常執行操作,新會話則需要用修改後的密碼進行驗證
db.updateUser()示例:
admin@undefined$ db.auth("root","123456")
1
admin@undefined$ db.updateUser("root",{pwd:"admin123"})
admin@undefined$ db.auth("root","admin123")
1
admin@undefined$ db.auth("root","123456")
Error: Authentication failed.
0
修改用戶權限(角色):
修改用戶角色也是使用db.updateUser()函數來實現的
我們先創建一個測試用戶readtest,它只對test庫具備讀權限:
db.createUser(
{
user:"readtest",
pwd:"123456",
roles:[{role:"read",db:"test"}]
}
)
admin@undefined$ db.auth("readtest","123456")
1
admin@undefined$ use test
switched to db test
test@undefined$ show tables
goods
users
test@undefined$ db.goods.find()
{ "_id" : ObjectId("5a7c5b7e83dba596ccad3ac0"), "sn" : "fhbowhnlerio12o47", "category" : "food" }
test@undefined$ db.goods.insert({"sn":"04t68gjsoe076","category" : "beauty"})
WriteResult({
"writeError" : {
"code" : 13,
"errmsg" : "not authorized on test to execute command { insert: \"goods\", documents: [ { _id: ObjectId(‘5a8ef5aa3cdd503ad3903fcc‘), sn: \"04t68gjsoe076\", category: \"beauty\" } ], ordered: true }"
}
})
可以看到這個用戶可以執行讀操作,寫操作是沒有權限的,現在我們通過db.updateUser()來擴充它的權限,記其具有讀寫權限。admin@undefined$ db.updateUser("readtest",{"roles":[{role:"readWrite",db:"test"}]})
admin@undefined$ db.auth("readtest","123456")
1
admin@undefined$ use test
switched to db test
test@undefined$ db.goods.insert({"sn":"04t68gjsoe076","category" : "beauty"})
WriteResult({ "nInserted" : 1 })
可以看到,當我們把readtest用戶的角色從read改成readWrite時,它就具有了對test庫的寫權限。通過db.updateUser()我們可以實現用戶權限的放大和縮小
MongoDB用戶管理