What if a simple role could protect your entire database from mistakes and hackers?
Why Role-based access control in MongoDB? - Purpose & Use Cases
Imagine you run a busy library where many people come to borrow books. You try to keep track of who can borrow which books by writing notes on paper for each person. Every time someone new comes or their permissions change, you have to rewrite all the notes.
This paper method is slow and confusing. You might forget to update a note, give someone too much access, or lose the papers. It's hard to keep everything safe and organized when many people need different permissions.
Role-based access control (RBAC) lets you group permissions into roles like 'reader', 'librarian', or 'admin'. Instead of managing each person's permissions one by one, you assign roles. MongoDB uses RBAC to easily control who can read, write, or manage data securely and clearly.
db.users.updateOne({name: 'Alice'}, {$set: {canRead: true, canWrite: false, canDelete: false}})db.grantRolesToUser('Alice', [{role: 'read', db: 'library'}])
RBAC makes managing user permissions simple, secure, and scalable, so your data stays safe as your team grows.
A company uses RBAC in MongoDB to let sales staff view customer data, support staff update tickets, and admins manage the whole database without mixing their permissions.
Manual permission tracking is slow and error-prone.
RBAC groups permissions into roles for easy management.
MongoDB's RBAC keeps data secure and access clear.
Practice
Solution
Step 1: Understand RBAC concept
RBAC is about controlling what users can do by giving them roles with permissions.Step 2: Identify RBAC purpose in MongoDB
MongoDB uses RBAC to assign roles that define user privileges, managing access securely.Final Answer:
To manage user permissions by assigning roles with specific privileges -> Option CQuick Check:
RBAC controls access by roles = A [OK]
- Confusing RBAC with data storage
- Thinking RBAC handles backups
- Assuming RBAC optimizes queries
readOnlyUser with read access on the sales database?Solution
Step 1: Check correct field for role name
The field to name the role isname, notrole.Step 2: Verify privileges for read access
Read access uses thefindaction on the database with empty collection string for all collections.Final Answer:
db.createRole({name: "readOnlyUser", privileges: [{resource: {db: "sales", collection: ""}, actions: ["find"]}], roles: []}) -> Option BQuick Check:
Role name uses 'name' field = A [OK]
- Using 'role' instead of 'name' for role creation
- Assigning wrong actions like 'insert' for read role
- Missing empty string for collection to cover all
db.runCommand({usersInfo: "alice"}) after assigning the role?db.createRole({
name: "reportViewer",
privileges: [{resource: {db: "reports", collection: ""}, actions: ["find"]}],
roles: []
})
db.createUser({
user: "alice",
pwd: "password123",
roles: ["reportViewer"]
})Solution
Step 1: Confirm role creation and assignment
The role 'reportViewer' is created with find privileges on 'reports' and assigned to user 'alice'.Step 2: Understand usersInfo command output
Running usersInfo for 'alice' shows user details including assigned roles and privileges.Final Answer:
Returns user info showing 'alice' has role 'reportViewer' with find privileges on 'reports' -> Option AQuick Check:
Role assigned correctly, usersInfo shows it = C [OK]
- Assuming usersInfo errors if role was just created
- Expecting no roles shown after assignment
- Confusing assigned roles with admin role
db.createRole({
role: "dataEditor",
privileges: [{resource: {db: "inventory", collection: "products"}, actions: ["update"]}],
roles: []
})But it failed. What is the error?
Solution
Step 1: Check role creation syntax
The correct field to name a role is 'name', not 'role'. Using 'role' causes failure.Step 2: Validate other fields
Actions like 'update' are valid, collection as string is correct, and empty roles array is allowed.Final Answer:
The field 'role' should be 'name' when creating a role -> Option AQuick Check:
Use 'name' field for role creation = B [OK]
- Using 'role' instead of 'name' for role name
- Thinking 'update' is invalid action
- Believing empty roles array is disallowed
manager that can read and update documents in the employees database and also inherit all privileges from the built-in read role on the same database. Which command correctly achieves this?Solution
Step 1: Check privileges for read and update on employees
Privileges should apply to all collections in 'employees' database, so collection is empty string "".Step 2: Verify inherited role database
The built-in 'read' role must be inherited from the same database 'employees', not 'admin'.Step 3: Confirm actions and roles
Actions 'find' and 'update' are correct; 'insert' is not required here.Final Answer:
db.createRole({name: "manager", privileges: [{resource: {db: "employees", collection: ""}, actions: ["find", "update"]}], roles: [{role: "read", db: "employees"}]}) -> Option DQuick Check:
Empty collection for all, inherit 'read' from same DB = D [OK]
- Setting collection name instead of empty string for all
- Inheriting 'read' role from wrong database
- Using wrong actions like 'insert' instead of 'find'
Ready to prove it?
Pass the test and this pattern moves unknown
