一、創(chuàng)建用戶
1、語(yǔ)法格式
>db.createUser(
{ user: "<name>",
? pwd: "<cleartext password>",
? customData: { <any information> },
? roles: [
? ? { role: "<role>", db: "<database>" } | "<role>",
? ? ...
? ]}
)
參數(shù)解釋:
user:用戶名
pwd:密碼
customData: 用于描述賬戶信息
roles:指定用戶的角色,可以用一個(gè)空數(shù)組給新用戶設(shè)定空角色;在roles字段,可以指定內(nèi)置角色和用戶定義的角色。
role里的角色可以選:
? Built-In?Roles(內(nèi)置角色):
?.1. 數(shù)據(jù)庫(kù)用戶角色:read、readWrite;
? .2. 數(shù)據(jù)庫(kù)管理角色:dbAdmin、dbOwner、userAdmin;
? .3.?集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
? .4.?備份恢復(fù)角色:backup、restore;
? .5.?所有數(shù)據(jù)庫(kù)角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
? .6.?超級(jí)用戶角色:root?
? ? //?這里還有幾個(gè)角色間接或直接提供了系統(tǒng)超級(jí)用戶的訪問(wèn)(dbOwner?、userAdmin、userAdminAnyDatabase)
? .7.?內(nèi)部角色:__system
具體角色:?
Read:允許用戶讀取指定數(shù)據(jù)庫(kù)
readWrite:允許用戶讀寫指定數(shù)據(jù)庫(kù)
backup,retore:在進(jìn)行備份、恢復(fù)時(shí)可以單獨(dú)指定的角色,在db.createUser()方法中roles里面的db必須寫成是admin庫(kù),要不然會(huì) 報(bào)錯(cuò)
dbAdmin:允許用戶在指定數(shù)據(jù)庫(kù)中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計(jì)或訪問(wèn)system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數(shù)據(jù)庫(kù)里創(chuàng)建、刪除和管理用戶
clusterAdmin:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有分片和復(fù)制集相關(guān)函數(shù)的管理權(quán)限。
readAnyDatabase:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的讀權(quán)限
readWriteAnyDatabase:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的讀寫權(quán)限
userAdminAnyDatabase:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的userAdmin權(quán)限,
dbAdminAnyDatabase:只在admin數(shù)據(jù)庫(kù)中可用,賦予用戶所有數(shù)據(jù)庫(kù)的dbAdmin權(quán)限。
root:只在admin數(shù)據(jù)庫(kù)中可用。超級(jí)賬號(hào),超級(jí)權(quán)限
2、舉例說(shuō)明:
>use admin
> db.createUser({user:'superadmin',pwd:'123456', roles:[{role:'root', db:'admin'}]})? ? ---創(chuàng)建超級(jí)管理員用戶
> db.createUser({user:'useradmin',pwd:'123456', roles:[{role:'userAdminAnyDatabase',?db:'admin'}]})? ? ---創(chuàng)建用戶管理員賬戶(能查詢其他庫(kù)集合,但不能查詢集合內(nèi)容)
> db.createUser({user:'admin',pwd:'123456', roles:[{role:'readWriteAnyDatabase', db:'admin'}]})? ? ---創(chuàng)建訪問(wèn)任意庫(kù)讀寫的賬戶
> db.createUser({user:'user1',pwd:'user1',roles:[{role:'readWrite',db:'test'}]})? ? ---創(chuàng)建只對(duì)test庫(kù)有讀寫權(quán)限的用戶
> db.createUser({user:"bkuser2",pwd:"Bkuser2",roles:[{role:"backup",db:"admin"}]})? ? ---創(chuàng)建用于備份時(shí)的用戶,如若是恢復(fù)權(quán)限,則將backup換為restore即可
> db.createUser({user:'useradmin',pwd:'123456',customData:{"desc":"This user is for administrators"},roles:[{role:'userAdminAnyDatabase',db:'admin'}]
3、驗(yàn)證新建用戶
用戶在哪個(gè)庫(kù)新建授權(quán),則需要在哪個(gè)庫(kù)進(jìn)行auth驗(yàn)證,注意一點(diǎn),帳號(hào)是跟著庫(kù)走的,所以在指定庫(kù)里授權(quán),必須也在指定庫(kù)里驗(yàn)證(auth)。????
>db? ? ---查看當(dāng)前所在庫(kù)
test
>db.createUser({user:'test1',pwd:'test1',roles:[{role:'readWrite',db:'test'},{role:'read',db:'Johnny'})})
>use Johnny
Johnny
>db.auth('test1','test1')
Error:Authentication failed.
0? ? ? ? ---表示auth驗(yàn)證失敗
>use test
>db.auth('test1','test1')
1? ? ? ? ? ---表示驗(yàn)證成功
所以說(shuō)明一點(diǎn),用戶在哪個(gè)庫(kù)創(chuàng)建,就要在哪個(gè)庫(kù)auth認(rèn)證,并在mongo登錄時(shí)也要先連接認(rèn)證庫(kù)
4、查詢用戶
查詢實(shí)例中所有的用戶信息
>use admin
>db.system.users.find().pretty() ? ? ? ? ?---將所有用戶信息查詢出來(lái)
顯示某一庫(kù)下的所有用戶
>use test
>show users ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?---顯示在此庫(kù)授權(quán)的用戶信息
查詢指定用戶的相關(guān)信息:
rs1:PRIMARY>db
Johnny
rs1:PRIMARY> db.getUser("jianlong")? ? ---需要在用戶所在庫(kù)才能執(zhí)行此命令并獲得信息,查詢到的信息和“show user”一樣,只是可以指定用戶罷了
{
? ? ? ? "_id" : "Johnny.jianlong",
? ? ? ? "user" : "jianlong",
? ? ? ? "db" : "Johnny",
? ? ? ? "roles" : [
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "role" : "readWrite",
? ? ? ? ? ? ? ? ? ? ? ? "db" : "test"
? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "role" : "readWrite",
? ? ? ? ? ? ? ? ? ? ? ? "db" : "Johnny"
? ? ? ? ? ? ? ? }
? ? ? ? ]
}
rs1:PRIMARY> use tt? ? ? ? ? ? ?
switched to db tt
rs1:PRIMARY> db.getUser("jianlong")? ? ? ? ? ---在賬戶非授權(quán)庫(kù)進(jìn)行用戶信息查詢則會(huì)提示NULL
null
二、修改用戶
1、語(yǔ)法格式
db.updateUser(username,update,writeConcern)
username部分是必須要有的,添加需要更新的username
update部分里內(nèi)容是可選,但必須有其中一項(xiàng),例customData、roles、pwd
writeConcern部分是可選項(xiàng)
語(yǔ)法結(jié)構(gòu):
db.updateUser(
? "<username>",
? {
? ? customData : { <any information> },
? ? roles : [
? ? ? ? ? ? ? { role: "<role>", db: "<database>" } | "<role>",
? ? ? ? ? ? ? ...
? ? ? ? ? ? ],
? ? pwd: "<cleartext password>"
? ? },
? ? writeConcern: { <write concern> })
2、舉例說(shuō)明
2.1、修改用戶權(quán)限
可以通過(guò)此命令修改用戶的權(quán)限,但使用此命令修改權(quán)限時(shí),則會(huì)覆蓋原先的所有權(quán)限。例:
rs1:PRIMARY> db.updateUser("root",
???????????????????????? {roles:[{role:"readWriteAnyDatabase",
?????????????????????????????????? db:"admin"}]
????????????????????????? })
在原來(lái)權(quán)限上新增權(quán)限:
rs1:PRIMARY> use Johnny
switched to db Johnny
rs1:PRIMARY> db.grantRolesToUser("jianlong",[{role:'readWrite',db:'test'}])? ? ---不會(huì)覆蓋原權(quán)限信息,只新增權(quán)限
rs1:PRIMARY> show users;
{
? ? ? ? "_id" : "Johnny.jianlong",
? ? ? ? "user" : "jianlong",
? ? ? ? "db" : "Johnny",
? ? ? ? "roles" : [
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "role" : "readWrite",
? ? ? ? ? ? ? ? ? ? ? ? "db"? :? "test"
? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? "role" : "readWrite",
? ? ? ? ? ? ? ? ? ? ? ? "db" : "Johnny"
? ? ? ? ? ? ? ? }
? ? ? ? ]
}
rs1:PRIMARY>use tt
rs1:PRIMARY> db.grantRolesToUser("jianlong",[{role:'read',db:'tt'}])
2016-11-09T15:59:20.154+0800 E QUERY? ? [thread1] Error: Could not find user jianlong@tt? ? ?
---不能在用戶非授權(quán)庫(kù)進(jìn)行用戶的權(quán)限添加,否則會(huì)報(bào)錯(cuò),即表現(xiàn)出賬戶跟著庫(kù)走的特點(diǎn)
2.2、修改用戶密碼
使用db.changeUserPassword(“username","newPasswd")
rs1:PRIMARY> use tt
switched to db tt
rs1:PRIMARY> db.changeUserPassword("tuser","123456") ? ? ? ? ?---注意要在賬戶所在授權(quán)庫(kù)執(zhí)行此命令
2.3、刪除用戶
>db.dropUser("test1")