Introduction
The primary function of a database is to store information in a structured way to allow easy access to that information. Having many users with permission to access and work on your MySQL server can become a security concern.
A short set of queries in the MySQL client can provide you with valuable information to help prevent potential issues. Use the commands outlined in this tutorial to learn how to list all user accounts on a MySQL server.
Prerequisites
How to Access MySQL as Root
Access the MySQL server as root user by entering the following command in your terminal:
sudo mysql --user=root mysql -p
or:
sudo mysql -u root -p
The -p
option is mandatory only if you have a predefined password for your root user. If no password is defined, use the command without the -p
option.
The output above shows that we gained access to the MySQL client as the root user.
Now, you can run a MySQL query and retrieve information from the mysql.user database.
Note: you can also use SSH to connect to your server if you are using remote connection.
How to Show All MySQL Users
The following command lists usernames that have access to the server:
SELECT user FROM mysql.user;
This command instructs MySQL to create a table. The system retrieves the information from the User column in the mysql.user database.
The output in this example shows a table with four rows:
The list we received has limited value. To retrieve a more detailed overview of the MySQL users and their permissions, we can expand the search parameters and add additional columns.
How to List mysql.user Database Fields
Before expanding the query, let’s list the fields available in the mysql.user database. The following command lists all the available columns:
desc mysql.user;
The options in the Field column represent the information we can request from the mysql.user database.
It is possible to combine several options in a single command to get detailed user information.
How to Show MySQL User Information
The following query provides a table with the User, Host, and authentication_string columns:
SELECT User, Host, authentication_string FROM mysql.user;
The query adds two more columns to the User column and provides valuable information such as the user’s password and hostname.
Note: The Password field in the mysql.user table has been renamed in MySQL 5.7. The field that lists user passwords is now named authentication_string.
How to List Only Unique MySQL Users
Another useful option is to remove MySQL usernames that appear in multiple rows. To display only unique MySQL usernames, enter the following command:
SELECT DISTINCT User FROM mysql.user;
The output removes duplicate MySQL rows and shows specific usernames only once.
Show Current MySQL User
Use the user()
or current_user()
function to get the details of the current MySQL user:
SELECT user();
Or:
SELECT current_user();
In both cases, the output shows that the current MySQL user is root@localhost.
Show Logged In MySQL Users
At any moment, you can check the users who are currently logged in to the MySQL database server. This function provides an invaluable insight when monitoring your MySQL server for unauthorized usage.
Enter this query to show the list of currently logged in MySQL users:
SELECT user, host,db, command FROM information_schema.processlist;
The output lists the users who are logged in, the database, and the command being run.
Conclusion
By combining the commands presented in this article, you are now able to structure user information from the mysql.user database with ease.
Instead of just listing users, you can modify search results and find user-specific information. A detailed and customizable overview enables you to make an informed decision regarding the security of your MySQL server.