MongoDB3.2 用戶權(quán)限管理

一、創(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")

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,491評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評(píng)論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,708評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,186評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,409評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,939評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,774評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,976評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,209評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,650評(píng)論 3 391
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,958評(píng)論 2 373