Bird
Raised Fist0
MongoDBquery~20 mins

Creating users and roles in MongoDB - Practice Exercises

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
MongoDB User and Role Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
What is the output of this user creation command?
Consider the following MongoDB command to create a user with readWrite role on the 'sales' database:

db.createUser({
  user: "salesUser",
  pwd: "pass123",
  roles: [{ role: "readWrite", db: "sales" }]
})

What will be the result of running this command if the user does not exist yet?
MongoDB
db.createUser({ user: "salesUser", pwd: "pass123", roles: [{ role: "readWrite", db: "sales" }] })
AUser 'salesUser' is created with readWrite access on 'sales' database and a success message is returned.
BSyntaxError: Missing parentheses in function call.
CAuthenticationFailed: Cannot create user without admin privileges.
DUser 'salesUser' is created but has no roles assigned.
Attempts:
2 left
💡 Hint
Creating a user with roles requires specifying the role and database correctly.
📝 Syntax
intermediate
2:00remaining
Which command correctly creates a role with read-only access on the 'inventory' database?
You want to create a custom role named 'inventoryRead' that allows reading any collection in the 'inventory' database. Which of the following commands is syntactically correct?
Adb.createRole({ role: "inventoryRead", privileges: [{ resource: { db: "inventory", collection: "all" }, actions: ["find"] }], roles: [] })
Bdb.createRole({ role: "inventoryRead", privileges: [{ resource: { db: "inventory" }, actions: ["find"] }], roles: [] })
Cdb.createRole({ role: "inventoryRead", privileges: [{ resource: { db: "inventory", collection: "" }, actions: ["find"] }], roles: [] })
Ddb.createRole({ name: "inventoryRead", privileges: [{ resource: { db: "inventory", collection: "*" }, actions: ["read"] }], roles: [] })
Attempts:
2 left
💡 Hint
The 'collection' field should be an empty string to specify all collections.
❓ optimization
advanced
2:00remaining
How to optimize role assignment for multiple databases?
You want to create a user who has readWrite access on both 'sales' and 'marketing' databases. Which command is the most efficient and correct way to assign these roles during user creation?
Adb.createUser({ user: "multiDBUser", pwd: "pass456", roles: [{ role: "readWrite", db: "sales" }, { role: "readWrite", db: "marketing" }] })
Bdb.createUser({ user: "multiDBUser", pwd: "pass456", roles: [{ role: "readWrite", db: "sales,marketing" }] })
Cdb.createUser({ user: "multiDBUser", pwd: "pass456", roles: [{ role: "readWrite" }] })
Ddb.createUser({ user: "multiDBUser", pwd: "pass456", roles: ["readWrite"] })
Attempts:
2 left
💡 Hint
Each role must specify a single database.
🔧 Debug
advanced
2:00remaining
Why does this role creation command fail?
You run this command to create a role:

db.createRole({
  role: "dataAnalyst",
  privileges: [{ resource: { db: "analytics", collection: "reports" }, actions: ["find", "update"] }],
  roles: [{ role: "read", db: "analytics" }]
})

But it fails with an error. What is the most likely cause?
AThe 'actions' array contains 'update' which is not a valid action.
BThe 'roles' array references a role 'read' which is invalid; it should be 'readAnyDatabase' or 'readWrite'.
CThe role 'read' does not exist; it should be 'readAnyDatabase'.
DThe 'roles' array should be empty when privileges are specified.
Attempts:
2 left
💡 Hint
Check the validity of roles referenced inside the roles array.
🧠 Conceptual
expert
2:00remaining
What is the effect of assigning the 'root' role to a user?
In MongoDB, if you create a user and assign the built-in 'root' role, what does this role allow the user to do?
AThe user has read-only access to all databases.
BThe user can only read and write data on the admin database.
CThe user can only create and delete collections but cannot manage users.
DThe user can perform any action on any database, including user and role management.
Attempts:
2 left
💡 Hint
Think about the highest level of access in MongoDB.

Practice

(1/5)
1. What is the primary purpose of creating users in MongoDB?
easy
A. To control who can access the database
B. To store data in collections
C. To optimize query performance
D. To backup the database automatically

Solution

  1. Step 1: Understand user creation in MongoDB

    Users in MongoDB are created to manage access to the database system.
  2. Step 2: Identify the purpose of users

    Users control who can connect and perform actions on the database.
  3. Final Answer:

    To control who can access the database -> Option A
  4. Quick Check:

    Users = Access control [OK]
Hint: Users manage access, not data or backups [OK]
Common Mistakes:
  • Confusing users with data storage
  • Thinking users optimize queries
  • Assuming users handle backups
2. Which of the following is the correct syntax to create a user with read-only access on the sales database in MongoDB?
easy
A. db.createUser({user: 'reader', pwd: 'pass', roles: [{role: 'read', db: 'sales'}]})
B. db.createUser({user: 'reader', pwd: 'pass', roles: ['read']})
C. db.addUser('reader', 'pass', 'read')
D. db.users.insert({user: 'reader', pwd: 'pass', role: 'read'})

Solution

  1. Step 1: Recall MongoDB user creation syntax

    The correct syntax uses db.createUser() with roles as an array of objects specifying role and database.
  2. Step 2: Check each option

    db.createUser({user: 'reader', pwd: 'pass', roles: [{role: 'read', db: 'sales'}]}) correctly specifies the role 'read' on the 'sales' database. db.createUser({user: 'reader', pwd: 'pass', roles: ['read']}) misses the database name, C uses deprecated syntax, D tries to insert directly into users collection which is invalid.
  3. Final Answer:

    db.createUser({user: 'reader', pwd: 'pass', roles: [{role: 'read', db: 'sales'}]}) -> Option A
  4. Quick Check:

    Roles need role and db fields [OK]
Hint: Roles need role and db fields in array [OK]
Common Mistakes:
  • Omitting the database in roles
  • Using deprecated addUser method
  • Trying to insert user directly into collection
3. Given the following command in MongoDB shell:
db.createUser({user: 'adminUser', pwd: 'secure123', roles: [{role: 'userAdminAnyDatabase', db: 'admin'}]})

What permission does the user adminUser have?
medium
A. Can read data from any database
B. Can manage users on any database
C. Can only read the admin database
D. Can write data to any database

Solution

  1. Step 1: Understand the role userAdminAnyDatabase

    This role allows managing users and roles across all databases.
  2. Step 2: Analyze the permissions given

    The user can create, modify, and delete users on any database but does not have read or write data permissions by default.
  3. Final Answer:

    Can manage users on any database -> Option B
  4. Quick Check:

    userAdminAnyDatabase = user management [OK]
Hint: userAdminAnyDatabase manages users, not data [OK]
Common Mistakes:
  • Assuming it grants read or write data access
  • Confusing admin database with all databases
  • Thinking it only applies to admin database
4. You try to create a user with this command:
db.createUser({user: 'testUser', pwd: 'test123', roles: ['readWrite']})

But it fails. What is the most likely reason?
medium
A. Password is too short
B. User already exists
C. Roles must be objects specifying role and database
D. Missing database name in createUser command

Solution

  1. Step 1: Check roles format in createUser

    Roles must be an array of objects with role and db fields, not just strings.
  2. Step 2: Identify the error cause

    The command uses roles as strings, which is invalid syntax causing failure.
  3. Final Answer:

    Roles must be objects specifying role and database -> Option C
  4. Quick Check:

    Roles = [{role: '', db: ''}] [OK]
Hint: Roles need role and db objects, not strings [OK]
Common Mistakes:
  • Using role names as plain strings
  • Ignoring role database specification
  • Assuming password length causes failure
5. You want to create a custom role named reportViewer that allows users to only read data from the reports collection in the analytics database. Which command correctly creates this role?
hard
A. db.createRole({role: 'reportViewer', privileges: [{resource: {db: 'analytics', collection: 'reports'}, actions: ['read']}], roles: []})
B. db.createRole({role: 'reportViewer', privileges: [{resource: {db: 'analytics'}, actions: ['read']}], roles: []})
C. db.createRole({role: 'reportViewer', privileges: [{resource: {collection: 'reports'}, actions: ['find']}], roles: []})
D. db.createRole({role: 'reportViewer', privileges: [{resource: {db: 'analytics', collection: 'reports'}, actions: ['find']}], roles: []})

Solution

  1. Step 1: Understand custom role creation syntax

    Custom roles require specifying privileges with resource (db and collection) and actions allowed.
  2. Step 2: Analyze each option's privileges

    db.createRole({role: 'reportViewer', privileges: [{resource: {db: 'analytics', collection: 'reports'}, actions: ['find']}], roles: []}) correctly specifies the database 'analytics', collection 'reports', and action 'find' which allows reading documents. db.createRole({role: 'reportViewer', privileges: [{resource: {db: 'analytics'}, actions: ['read']}], roles: []}) uses 'read' action on the whole database, not just the collection. db.createRole({role: 'reportViewer', privileges: [{resource: {collection: 'reports'}, actions: ['find']}], roles: []}) misses the database name. db.createRole({role: 'reportViewer', privileges: [{resource: {db: 'analytics', collection: 'reports'}, actions: ['read']}], roles: []}) uses 'read' action which is not a valid action for privileges; 'find' is correct for reading documents.
  3. Final Answer:

    db.createRole({role: 'reportViewer', privileges: [{resource: {db: 'analytics', collection: 'reports'}, actions: ['find']}], roles: []}) -> Option D
  4. Quick Check:

    Custom role needs db, collection, and 'find' action [OK]
Hint: Use 'find' action for read on specific collection [OK]
Common Mistakes:
  • Using 'read' action instead of 'find'
  • Omitting database name in resource
  • Specifying collection without database
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard