आपको mongod इंस्टेंस को एक्सेस कंट्रोल के साथ शुरू करना चाहिए था, यानी --auth कमांड लाइन विकल्प, जैसे:
$ mongod --auth
आइए मोंगो शेल शुरू करें, और एडमिन डेटाबेस में एक एडमिनिस्ट्रेटर बनाएं:
$ mongo
> use admin
> db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
अब यदि आप "db.stats ()", या "उपयोगकर्ताओं को दिखाएं" कमांड चलाते हैं, तो आपको "कमांड निष्पादित करने के लिए व्यवस्थापक पर अधिकृत नहीं..." त्रुटि मिलेगी।
> db.stats()
{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { dbstats: 1.0, scale: undefined }",
"code" : 13,
"codeName" : "Unauthorized"
}
इसका कारण यह है कि आपने अभी भी उपयोगकर्ता myUserAdmin को "रीड" या "रीडराइट" की भूमिका नहीं दी है। आप इसे नीचे की तरह कर सकते हैं:
> db.auth("myUserAdmin", "abc123")
> db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ])
अब आप इसे सत्यापित कर सकते हैं (कमांड "उपयोगकर्ता दिखाएं" अब काम करता है):
> show users
{
"_id" : "admin.myUserAdmin",
"user" : "myUserAdmin",
"db" : "admin",
"roles" : [
{
"role" : "read",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
अब यदि आप "db.stats()" चलाते हैं, तो आप भी ठीक रहेंगे:
> db.stats()
{
"db" : "admin",
"collections" : 2,
"views" : 0,
"objects" : 3,
"avgObjSize" : 151,
"dataSize" : 453,
"storageSize" : 65536,
"numExtents" : 0,
"indexes" : 3,
"indexSize" : 81920,
"ok" : 1
}
इस उपयोगकर्ता और भूमिका तंत्र को व्यवस्थापक डेटाबेस के अलावा, MongoDB में किसी भी अन्य डेटाबेस पर भी लागू किया जा सकता है।
(मोंगोडीबी संस्करण 3.4.3)