Bạn nên bắt đầu phiên bản mongod với kiểm soát truy cập, tức là tùy chọn dòng lệnh --auth, chẳng hạn như:
$ mongod --auth
Hãy bắt đầu trình bao mongo và tạo quản trị viên trong cơ sở dữ liệu quản trị:
$ mongo
> use admin
> db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
Bây giờ nếu bạn chạy lệnh "db.stats ()" hoặc "hiển thị người dùng", bạn sẽ gặp lỗi "không được quản trị viên ủy quyền thực thi lệnh ..."
> db.stats()
{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { dbstats: 1.0, scale: undefined }",
"code" : 13,
"codeName" : "Unauthorized"
}
Nguyên nhân là do bạn vẫn chưa cấp vai trò "read" hoặc "readWrite" cho người dùng myUserAdmin. Bạn có thể làm như sau:
> db.auth("myUserAdmin", "abc123")
> db.grantRolesToUser("myUserAdmin", [ { role: "read", db: "admin" } ])
Bây giờ Bạn có thể xác minh nó (Lệnh "hiển thị người dùng" hiện đã hoạt động):
> show users
{
"_id" : "admin.myUserAdmin",
"user" : "myUserAdmin",
"db" : "admin",
"roles" : [
{
"role" : "read",
"db" : "admin"
},
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
Bây giờ nếu bạn chạy "db.stats ()", bạn cũng sẽ ổn:
> db.stats()
{
"db" : "admin",
"collections" : 2,
"views" : 0,
"objects" : 3,
"avgObjSize" : 151,
"dataSize" : 453,
"storageSize" : 65536,
"numExtents" : 0,
"indexes" : 3,
"indexSize" : 81920,
"ok" : 1
}
Người dùng và cơ chế vai trò này cũng có thể được áp dụng cho bất kỳ cơ sở dữ liệu nào khác trong MongoDB, ngoài cơ sở dữ liệu quản trị viên.
(MongoDB phiên bản 3.4.3)