How to Grant Privileges in Mysql

How to Grant Privileges in MySQL Introduction MySQL is one of the most popular open-source relational database management systems used worldwide. Managing user privileges effectively in MySQL is crucial for maintaining database security, ensuring proper access controls, and preventing unauthorized actions. Granting privileges means assigning specific permissions to users or roles that determine wh

Nov 17, 2025 - 11:13
Nov 17, 2025 - 11:13
 3

How to Grant Privileges in MySQL

Introduction

MySQL is one of the most popular open-source relational database management systems used worldwide. Managing user privileges effectively in MySQL is crucial for maintaining database security, ensuring proper access controls, and preventing unauthorized actions. Granting privileges means assigning specific permissions to users or roles that determine what operations they can perform on databases or tables.

This tutorial will guide you through the process of granting privileges in MySQL, explain the importance of privilege management, and provide practical examples and best practices to help you secure your database environment.

Step-by-Step Guide

1. Understanding MySQL Privileges

Before diving into commands, it is important to understand the types of privileges MySQL supports. Privileges can be global, database-specific, table-specific, or even column-specific. Examples of privileges include:

  • SELECT: Read data from tables
  • INSERT: Add new rows to tables
  • UPDATE: Modify existing data
  • DELETE: Remove data
  • CREATE: Create databases or tables
  • DROP: Delete databases or tables
  • GRANT OPTION: Allow users to grant privileges to others

2. Accessing the MySQL Command Line

To grant privileges, you first need to access the MySQL shell. Use the following command in your terminal or command prompt:

mysql -u root -p

Enter the root password or the password of a user with sufficient privileges when prompted.

3. Granting Privileges with the GRANT Statement

The GRANT statement is used to assign privileges to users. The basic syntax is:

GRANT privilege_type ON database_name.table_name TO 'username'@'host';

For example, to grant SELECT and INSERT privileges on the employees database to a user named john connecting from any host, run:

GRANT SELECT, INSERT ON employees.* TO 'john'@'%';

Here, the asterisk (*) means all tables within the employees database.

4. Creating a New User and Granting Privileges

If the user does not exist, you can create the user and grant privileges simultaneously:

GRANT ALL PRIVILEGES ON sales.* TO 'mary'@'localhost' IDENTIFIED BY 'password123';

This command creates a user mary who can connect from localhost and grants all privileges on the sales database.

5. Applying Changes with FLUSH PRIVILEGES

MySQL automatically reloads privilege tables after changes via GRANT, so typically, you do not need to run FLUSH PRIVILEGES;. However, if you manually update privilege tables with INSERT or UPDATE, you must reload privileges:

FLUSH PRIVILEGES;

6. Revoking Privileges

If you need to remove privileges, use the REVOKE statement:

REVOKE SELECT, INSERT ON employees.* FROM 'john'@'%';

This command removes the SELECT and INSERT privileges from user john.

7. Verifying User Privileges

To check the privileges granted to a user, use:

SHOW GRANTS FOR 'username'@'host';

For example:

SHOW GRANTS FOR 'mary'@'localhost';

Best Practices

1. Principle of Least Privilege

Always grant users the minimum privileges necessary for their tasks. Avoid granting ALL PRIVILEGES unless absolutely required. This minimizes security risks.

2. Use Specific Hostnames

Limit access by specifying exact hostnames or IP addresses instead of using wildcards like '%'. This reduces the attack surface.

3. Separate Privileges by Role

Create different users or roles for different responsibilities. For example, have separate users for application access, database administration, and reporting.

4. Regularly Audit Privileges

Review user privileges periodically and revoke any unnecessary permissions to maintain security.

5. Avoid Using Root User for Applications

Never use the MySQL root user for application connections. Create dedicated users with limited privileges instead.

Tools and Resources

1. MySQL Workbench

A graphical tool for managing MySQL databases, including user privilege management through a user-friendly interface.

2. phpMyAdmin

A web-based MySQL administration tool that allows you to manage users and privileges easily.

3. Official MySQL Documentation

The MySQL GRANT Statement Documentation provides comprehensive information and examples.

4. Command Line Interface (CLI)

The MySQL CLI remains the most direct and powerful way to manage user privileges.

Real Examples

Example 1: Grant SELECT Privilege on a Single Table

Grant the SELECT privilege on the customers table in the shop database to user alice from localhost:

GRANT SELECT ON shop.customers TO 'alice'@'localhost';

Example 2: Grant Multiple Privileges Globally

Grant SELECT, INSERT, and UPDATE privileges globally to user bob connecting from any host:

GRANT SELECT, INSERT, UPDATE ON *.* TO 'bob'@'%';

Example 3: Create User and Grant Privileges with Password

Create a new user carol with password and grant all privileges on database inventory:

GRANT ALL PRIVILEGES ON inventory.* TO 'carol'@'localhost' IDENTIFIED BY 'securePass!2024';

Example 4: Revoke Privileges

Remove DELETE privilege from user alice on the shop database:

REVOKE DELETE ON shop.* FROM 'alice'@'localhost';

FAQs

Q1: What is the difference between GRANT and REVOKE in MySQL?

GRANT is used to assign privileges to a user, while REVOKE removes privileges from a user.

Q2: Can I grant privileges to a user who does not exist yet?

Yes. Using the GRANT statement with IDENTIFIED BY creates the user if it doesnt exist.

Q3: How do I grant privileges to all databases?

Use ON *.* in the GRANT statement to specify all databases and tables.

Q4: Is it necessary to run FLUSH PRIVILEGES after granting privileges?

If you use the GRANT or REVOKE commands, MySQL automatically reloads privilege tables. You only need to run FLUSH PRIVILEGES; if you modify privilege tables manually.

Q5: How do I check what privileges a user currently has?

Use SHOW GRANTS FOR 'username'@'host'; to display the privileges assigned.

Conclusion

Granting privileges in MySQL is a fundamental aspect of database administration that ensures users have appropriate access levels to perform their tasks without compromising security. By understanding the types of privileges, using the GRANT and REVOKE statements correctly, and following best practices such as the principle of least privilege and regular audits, you can maintain a secure and well-managed MySQL environment.

Whether you manage a small project or large-scale application, mastering privilege management is essential for protecting your data and maintaining operational integrity.