MySQL 8: How to grant privileges to a user for a database

Updated: January 25, 2024 By: Guest Contributor Post a comment

Overivew

In modern web development, databases play a crucial role in storing, retrieving, and managing data. MySQL, being one of the most popular relational database management systems, offers a comprehensive set of features for database administration, including user privilege management. This article provides a step-by-step guide on how to grant privileges to a user for a database in MySQL 8.

User Privileges in MySQL

User privileges are a fundamental aspect of database security, allowing database administrators to control what each user can and cannot do within the database environment. MySQL organizes privileges at various levels such as global, database, table, column, and routine. Understanding how to properly manage these privileges is essential for protecting your data and ensuring that users have the right level of access to perform their jobs.

Creating a New User

Before granting privileges, you typically need to create a new user. This can be done using the CREATE USER statement.

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

This will create a new user named newuser that can connect from localhost with the specified password.

Granting Basic Privileges

The next step after creating a user is to grant them necessary privileges for a specific database. The GRANT statement is used for this purpose.

GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'localhost';

The above command grants all privileges on every table of database_name to newuser. After executing this command, it is important to execute the FLUSH PRIVILEGES statement to apply the changes.

FLUSH PRIVILEGES;

Understanding Privilege Types

MySQL defines a variety of privileges that can be granted to users. Some of the most common include SELECT, INSERT, UPDATE, DELETE, and CREATE. Each one allows the user to perform a specific action on a database or a table.

Granting Specific Privileges

Instead of granting all privileges, you may want to grant specific privileges based on the user’s requirements.

GRANT SELECT, INSERT ON database_name.table_name TO 'newuser'@'localhost';

This command allows newuser to only read and insert data into table_name in the database_name database.

Revoking Privileges

To remove privileges from a user, you can use the REVOKE statement.

REVOKE INSERT ON database_name.table_name FROM 'newuser'@'localhost';

After running the above command, newuser will no longer be able to insert data into table_name.

Using Prefixes with Privileges

MySQL allows you to grant privileges to a user across all databases on the server or specific columns within a table using wildcard characters and column-specific privilege lists.

GRANT SELECT, INSERT ON *.* TO 'newuser'@'localhost';
GRANT UPDATE (columnName) ON database_name.table_name TO 'newuser'@'localhost';

The first command grants SELECT and INSERT privileges on all databases and tables to newuser, while the second command grants UPDATE privilege only on the specific columnName of table_name.

Advanced Privilege Granting

In more complex scenarios, you may need to grant privileges that allow the user to manage other user accounts, handle transactions, or execute stored procedures.

GRANT CREATE USER, RELOAD ON *.* TO 'adminuser'@'localhost' WITH GRANT OPTION;

This grants an adminuser the ability to create other users and execute the RELOAD command. The WITH GRANT OPTION clause allows the user to grant the same privileges to other users as well.

Conclusion

In conclusion, managing user privileges in MySQL 8 is a powerful feature that enhances security and ensures that users have access to the appropriate data and functionalities. By following the steps outlined in this guide, you can effectively control user permissions within your MySQL databases.