ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

db.updateUser()

db.updateUser( username, update, writeConcern )

๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ํ•„๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ด์ „ ํ•„๋“œ์˜ ๊ฐ’์ด ์™„์ „ํžˆ ๋ฐ”๋€๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์‚ฌ์šฉ์ž์˜ roles ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

roles ๋ฐฐ์—ด์„ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ด์ „ ๋ฐฐ์—ด์˜ ๊ฐ’์ด ์™„์ „ํžˆ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๊ธฐ์กด ์—ญํ• ์„ ๋ชจ๋‘ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์—ญํ• ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋ ค๋ฉด db.grantRolesToUser() ๋˜๋Š” db.revokeRolesFromUser() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

db.updateUser() ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํŒ

๋ฉ”์„œ๋“œ/๋ช…๋ น ํ˜ธ์ถœ์—์„œ ์•”ํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  passwordPrompt() ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ/๊ด€๋ฆฌ ๋ฉ”์„œ๋“œ/๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „์˜ mongo ์…ธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

db.updateUser(
"<username>",
{
customData : { <any information> },
roles : [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
pwd: passwordPrompt(), // Or "<cleartext password>"
authenticationRestrictions: [
{
clientSource: ["<IP>" | "<CIDR range>", ...],
serverAddress: ["<IP>", | "<CIDR range>", ...]
},
...
],
mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
passwordDigestor: "<server|client>"
},
writeConcern: { <write concern> }
)

db.updateUser() ๋ฉ”์„œ๋“œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ธ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Parameter
์œ ํ˜•
์„ค๋ช…

username

๋ฌธ์ž์—ด

์—…๋ฐ์ดํŠธํ•  ์‚ฌ์šฉ์ž์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

update

๋ฌธ์„œ

์‚ฌ์šฉ์ž์˜ ๋Œ€์ฒด ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์šฉ์ž์˜ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

writeConcern

๋ฌธ์„œ

์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๊ณ ๋ ค ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ๊ณ ๋ ค ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

update ๋ฌธ์„œ๋Š” ์—…๋ฐ์ดํŠธํ•  ํ•„๋“œ์™€ ํ•ด๋‹น ์ƒˆ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. update ๋ฌธ์„œ์˜ ๋ชจ๋“  ํ•„๋“œ๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด์ง€๋งŒ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•„๋“œ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

update ๋ฌธ์„œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค:

ํ•„๋“œ
์œ ํ˜•
์„ค๋ช…

customData

๋ฌธ์„œ

์„ ํƒ ์‚ฌํ•ญ. ๋ชจ๋“  ์ž„์˜ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

roles

๋ฐฐ์—ด

์„ ํƒ ์‚ฌํ•ญ. ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌ๋œ ์—ญํ• ์ž…๋‹ˆ๋‹ค. roles ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋Š” ์ด์ „ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

pwd

๋ฌธ์ž์—ด

์„ ํƒ ์‚ฌํ•ญ. ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. ๊ฐ’์€ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜ ํ…์ŠคํŠธ ๋ฌธ์ž์—ด๋กœ ๋œ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ

  • passwordPrompt() ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ/๋ช…๋ น ํ˜ธ์ถœ์—์„œ ์•”ํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  passwordPrompt() ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ/๊ด€๋ฆฌ ๋ฉ”์„œ๋“œ/๋ช…๋ น๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธ๋ฅผ ๋ฌป๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ๋ฒ„์ „์˜ mongo ์…ธ์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

authenticationRestrictions

๋ฐฐ์—ด

์„ ํƒ ์‚ฌํ•ญ. ์„œ๋ฒ„๊ฐ€ ์ƒ์„ฑ๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹œํ–‰ํ•˜๋Š” ์ธ์ฆ ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” IP ์ฃผ์†Œ ๋ฐ CIDR ๋ฒ”์œ„์˜ ๋ชฉ๋ก์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

mechanisms

๋ฐฐ์—ด

์„ ํƒ ์‚ฌํ•ญ. ์‚ฌ์šฉ์ž ์ž๊ฒฉ ์ฆ๋ช…์— ๋Œ€ํ•œ ํŠน์ • SCRAM ๋ฉ”์ปค๋‹ˆ์ฆ˜(1๊ฐœ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ)์ž…๋‹ˆ๋‹ค. authenticationMechanisms๋ฅผ ์ง€์ •ํ•˜๋ฉด authenticationMechanisms์˜ ํ•˜์œ„ ์ง‘ํ•ฉ๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํ•„๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํ•˜์œ„ ์ง‘ํ•ฉ๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง€์ •๋œ ๋ฉ”์ปค๋‹ˆ์ฆ˜(1๊ฐœ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ)์— ๋Œ€ํ•œ ๊ธฐ์กด ์‚ฌ์šฉ์ž ์ž๊ฒฉ ์ฆ๋ช…๋งŒ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ํ•จ๊ป˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ž๊ฒฉ ์ฆ๋ช… ์„ธํŠธ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • "SCRAM-SHA-1"

    • SHA-1 ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • "SCRAM-SHA-256"

    • SHA-256 ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • featureCompatibilityVersion์ด 4.0์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • passwordDigestor๊ฐ€ server์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

passwordDigestor

๋ฌธ์ž์—ด

์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ค‘ ์–ด๋Š ์ชฝ์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด๋…ํ• ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • "server" (๊ธฐ๋ณธ๊ฐ’)
    ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋‹ค์ด์ œ์ŠคํŠธ๋˜์ง€ ์•Š์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹ค์ด์ œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
  • "client"(SCRAM-SHA-256๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์Œ)
    ํด๋ผ์ด์–ธํŠธ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹ค์ด์ œ์ŠคํŠธํ•˜๊ณ , ์ดํ›„ ๋‹ค์ด์ œ์ŠคํŠธ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

roles ํ•„๋“œ์—์„œ ๊ธฐ๋ณธ ์ œ๊ณต ์—ญํ• ๊ณผ ์‚ฌ์šฉ์ž ์ •์˜ ์—ญํ• ์„ ๋ชจ๋‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

db.updateUser()๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” ์—ญํ• ์„ ์ง€์ •ํ•˜๋ ค๋ฉด ์—ญํ• ์˜ ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์—ญํ• ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"readWrite"

๋˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์„œ๋กœ ์—ญํ• ์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

{ role: "<role>", db: "<database>" }

๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” ์—ญํ• ์„ ์ง€์ •ํ•˜๋ ค๋ฉด ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ญํ• ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

authenticationRestrictions ๋ฌธ์„œ์—๋Š” ๋‹ค์Œ ํ•„๋“œ๋งŒ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. authenticationRestrictions ๋ฌธ์„œ์— ์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ํ•„๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ์„œ๋ฒ„์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

ํ•„๋“œ ์ด๋ฆ„
๊ฐ’
์„ค๋ช…

clientSource

IP ์ฃผ์†Œ ๋ฐ/๋˜๋Š” CIDR ๋ฒ”์œ„ ๋ฐฐ์—ด

์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•  ๋•Œ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ๊ฐ€ ์ง€์ •๋œ ๋ชฉ๋ก์— ์žˆ๊ฑฐ๋‚˜ ๋ชฉ๋ก์— ์žˆ๋Š” CIDR ๋ฒ”์œ„์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ IP ์ฃผ์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

serverAddress

IP ์ฃผ์†Œ ๋ฐ/๋˜๋Š” CIDR ๋ฒ”์œ„ ๋ฐฐ์—ด

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” IP ์ฃผ์†Œ ๋˜๋Š” CIDR ๋ฒ”์œ„์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ์ฃผ์–ด์ง„ ๋ชฉ๋ก์˜ IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ์ด ์Šน์ธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์ด ์ˆ˜๋ฝ๋œ ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ค‘์š”

์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ ์ œํ•œ์ด ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์—ฌ๋Ÿฌ ์—ญํ• ์„ ์ƒ์†ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ clientSource ํ•„๋“œ๊ฐ€ ["198.51.100.0"]์ธ ์—ญํ• ๊ณผ clientSource ํ•„๋“œ๊ฐ€ ["203.0.113.0"]์ธ ๋‹ค๋ฅธ ์—ญํ• ์„ ์ƒ์†ํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

MongoDB ์˜ ์ธ์ฆ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ ์€ ์ž์ฒด ๊ด€๋ฆฌํ˜• ๋ฐฐํฌ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ธ์ฆ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

db.updateUser() ๋ฉ”์„œ๋“œ๋Š” updateUser ๋ช…๋ น์„ ๋ž˜ํ•‘ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ ํ™˜๊ฒฝ์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋Š” ๋ฐฐํฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์š”

์ด ๋ช…๋ น์€ MongoDB Atlas ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ช…๋ น์— ๋Œ€ํ•œ Atlas ์ง€์› ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ช…๋ น์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  • MongoDB Enterprise: MongoDB์˜ ๊ตฌ๋… ๊ธฐ๋ฐ˜ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

  • MongoDB Community: MongoDB์˜ ์†Œ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฌด๋ฃŒ ์ž์ฒด ๊ด€๋ฆฌ ๋ฒ„์ „

๋ณต์ œ๋ณธ ์„ธํŠธ์—์„œ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ, db.updateUser()๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ "majority" ์“ฐ๊ธฐ ๊ณ ๋ ค(write concern)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

๊ธฐ๋ณธ์ ์œผ๋กœ db.updateUser()๋Š” passwordPrompt()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์ง€์ •๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ MongoDB ์ธ์Šคํ„ด์Šค์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค. db.updateUser()์—์„œ ๋ณด๋‚ธ ์•”ํ˜ธ๋ฅผ ํฌํ•จํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์„ ๋ณดํ˜ธํ•˜๋ ค๋ฉด TLS ์ „์†ก ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. TLS ์ „์†ก ์•”ํ˜ธํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์€ TLS/SSL์„ ์œ„ํ•œ mongod ๋ฐ mongos ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

MongoDB๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ „์†ก ์‹œ ๊ทธ๋ฆฌ๊ณ  TLS ์ „์†ก ์•”ํ˜ธํ™”๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ์ทจ์•ฝํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ roles ๋ฐฐ์—ด์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ revokeRole ์กฐ์น˜๋ฅผ ํฌํ•จํ•˜๋Š” ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์— ์—ญํ• ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์—ญํ• ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— grantRole ์กฐ์น˜๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ pwd ๋˜๋Š” customData ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— changePassword ๋ฐ changeCustomData ์กฐ์น˜๊ฐ€ ๊ฐ๊ฐ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž์‹ ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ๊ฐ changeOwnPassword ๋ฐ changeOwnCustomData ์กฐ์น˜๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ products ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‚ฌ์šฉ์ž appClient01์ด(๊ฐ€) ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

{
_id : "products.appClient01",
userId : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"),
user : "appClient01",
db : "products",
customData : { empID : "12345", badge : "9156" },
roles : [
{
role : "readWrite",
db : "products"
},
{
role : "read",
db : "inventory"
}
],
mechanisms : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
],
authenticationRestrictions : [ {
clientSource: ["69.89.31.226"],
serverAddress: ["172.16.254.1"]
} ]
}

๋‹ค์Œ db.updateUser() ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉ์ž์˜ customData ๋ฐ roles ๋ฐ์ดํ„ฐ๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

use products
db.updateUser( "appClient01",
{
customData : { employeeId : "0x3039" },
roles : [
{ role : "read", db : "assets" }
]
} )

products ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‚ฌ์šฉ์ž appClient01๋Š” ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

{
_id : "products.appClient01",
userId : UUID("c5d88855-3f1e-46cb-9c8b-269bef957986"),
user : "appClient01",
db : "products",
customData : { employeeId : "0x3039" },
roles : [
{
role : "read",
db : "assets"
}
],
mechanisms : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
],
authenticationRestrictions : [ {
clientSource: ["69.89.31.226"],
serverAddress: ["172.16.254.1"]
} ]
}

์ฐธ๊ณ 

SCRAM-SHA-256์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด featureCompatibilityVersion์„(๋ฅผ) 4.0(์œผ)๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. featureCompatibilityVersion์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Get FeatureCompatibilityVersio(FeatureCompatibilityVersion ๊ฐ€์ ธ์˜ค๊ธฐ) ๋ฐ setFeatureCompatibilityVersion์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ์ž‘์—…์€ ํ˜„์žฌ SCRAM-SHA-256 ๋ฐ SCRAM-SHA-1 ์ž๊ฒฉ ์ฆ๋ช…์„ ๋ชจ๋‘ ๊ฐ–๊ณ  ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ SCRAM-SHA-256 ์ž๊ฒฉ ์ฆ๋ช…๋งŒ ๊ฐ–๋„๋ก ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ mechanisms๊ณผ ํ•จ๊ป˜ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ mechanisms๋ฅผ ์‚ฌ์šฉ์ž์˜ ํ˜„์žฌ SCRAM ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ๋งŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ mechanisms๊ณผ ํ•จ๊ป˜ ์ง€์ •๋œ ๊ฒฝ์šฐ ์ง€์›๋˜๋Š” SCRAM ๋ฉ”์ปค๋‹ˆ์ฆ˜(1๊ฐœ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ)์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • SCRAM-SHA-256์˜ ๊ฒฝ์šฐ passwordDigestor๋Š” ๊ธฐ๋ณธ๊ฐ’ "server"์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

use reporting
db.updateUser(
"reportUser256",
{
mechanisms: [ "SCRAM-SHA-256" ]
}
)