MongoDB4 Authorization

MongoDB is a popular open-source NoSQL database that provides high performance, scalability, and flexibility. With the release of MongoDB 4, significant improvements have been made to the security features, including enhanced authorization mechanisms.

In MongoDB, authorization controls access to databases and their respective collections. Users need to be authenticated before they can perform any operations on the database. Authorization in MongoDB involves defining roles and assigning privileges to users based on their roles.

Roles in MongoDB

Roles are predefined sets of privileges that determine the actions a user can perform within a database. MongoDB 4 introduces a new role-based access control system that simplifies the management of user privileges.

There are three types of roles in MongoDB:

  • Built-in Roles: These are predefined roles provided by MongoDB, such as read, readWrite, dbAdmin, and userAdmin.
  • Custom Roles: These roles are created by the administrator and can be customized to define specific privileges.
  • Inherited Roles: Users can inherit roles by being a member of a role that has other roles as its members.

Creating Custom Roles

To create a custom role in MongoDB, you can use the db.createRole() method. Here is an example of creating a custom role named salesAdmin with read and write privileges on the sales collection:

use admin
db.createRole({
  role: "salesAdmin",
  privileges: [
    { resource: { db: "store", collection: "sales" }, actions: ["find", "insert"] }
  ],
  roles: []
})

In this example, the salesAdmin role is assigned the privileges to find and insert documents in the sales collection of the store database.

Assigning Roles to Users

Once roles are defined, they can be assigned to users. This can be done using the db.grantRolesToUser() method. Here is an example of assigning the salesAdmin role to a user named john:

use admin
db.grantRolesToUser("john", [{ role: "salesAdmin", db: "store" }])

Authorization in Action

To demonstrate how authorization works in MongoDB, let's create a sequence diagram that shows the flow of actions when a user tries to insert a document into the sales collection.

sequenceDiagram
    participant User
    participant Application
    participant MongoDB

    User->>Application: Request to insert document
    Application->>MongoDB: Insert document
    MongoDB->>MongoDB: Authenticate user
    MongoDB->>MongoDB: Authorize user
    MongoDB->>MongoDB: Check user's role
    MongoDB->>MongoDB: Check privileges for role
    MongoDB->>MongoDB: Insert document into collection
    MongoDB->>MongoDB: Return success response
    MongoDB->>Application: Success response

In this sequence diagram, the user sends a request to the application to insert a document. The application forwards the request to MongoDB, where the user is authenticated and authorized. MongoDB checks the user's role and privileges before allowing the operation to proceed.

Conclusion

Authorization in MongoDB 4 provides a flexible and secure way to control access to databases and collections. By defining roles and assigning privileges, administrators can ensure that users have the necessary permissions to perform their tasks while maintaining the integrity of the database.

By understanding how roles are created and assigned, as well as the authorization process, users can effectively manage access control in MongoDB. With the enhanced security features in MongoDB 4, organizations can confidently deploy and manage their database environments while protecting sensitive data from unauthorized access.