MySQL - Show Users



As you might have already known, MySQL is a multi-user database that allows multiple users to work on it simultaneously. But have you ever wondered who these users might be?

MySQL provides an account to each user that is authenticated with a username and a password. And details of these accounts are stored in the "user" table in the database. This table contains details like username, the host this user is connected from, and other privileges the said user has etc.

The MySQL SHOW Users

MySQL does not provide any direct command to show (list out) all the users. However, the details of these user accounts is stored in the "user" table within the database. Hence, we can use the SELECT statement to list out the contents of this table.

There is no limit for how many users can connect to a MySQL database but the default user is always "root". And it does not have any password, unless it is set manually.

Syntax

Following is the syntax to show users in a MySQL database −

SELECT * FROM mysql.user;

Example

To see the structure of this "user" table, use the following query with the DESC command −

DESC mysql.user;

Now, in this example, we are listing out all the users in the MySQL database local to a system −

SELECT Host, User, User_attributes, account_locked 
FROM mysql.user;

Output

The output obtained is as shown below −

Host User User_attr account_locked
localhost mysql.infoschema NULL Y
localhost mysql.session NULL Y
localhost mysql.sys NULL Y
localhost root NULL N

The actual user table contains a lot more columns/fields than what is displayed in this chapter. Here, however, only some information is displayed for simplicity.

Note that list of these users are local to a system. Hence, not all systems would give the same output (apart from the default users).

Show Current User

Not only the list of all users, MySQL also has a provision to see the current user. This is done with the help of user() or current_user() functions.

Syntax

Following is the syntax to show the current user −

SELECT user();
or
SELECT current_user();

Example

Using the following query, let us display the username of the currently logged in user in MySQL database using the user() function −

SELECT user();

Output

Following is the output obtained −

user()
root@localhost

Example

In here, we are using the current_user() function to show the current user −

SELECT current_user();

Output

The output obtained is as follows −

current_user()
root@localhost

Show Currently Logged in Users

The difference between current users and currently logged in users is that, current user is the user that is executing the queries; whereas, currently logged in user list includes all the active users that are connected to the MySQL server at the moment.

This information can be extracted from the "information_schema.processlist" table using the SELECT statement.

Example

In the following query, we are retrieving the information of all the currently logged in users −

DESC information_schema.processlist;

Output

Following is the output of the above code −

Field Type Null Key Default Extra
ID bigint unsigned NO
USER varchar(32) NO
HOST varchar(261) NO
DB varchar(64) YES
COMMAND varchar(16) NO
TIME int NO
STATE varchar(64) YES
INFO varchar(65535) YES

Example

In here, we are retrieving information of current users, host, database, and command from the information_schema −

SELECT user, host, db, command 
FROM information_schema.processlist;

Output

After executing the above code, we get the following output −

user host db command
root localhost:49958 customers Query
event_scheduler localhost NULL Daemon

Show Users Using a Client Program

We can also display information about the MySQL users using a client program.

Syntax

Following are the syntaxes to display information regarding MySQL users in various programming languages −

To display info regarding user(s) in a MySQL database using a PHP program, we need to execute the SELECT USER statement using the query() function of the PHP mysqli library as −

$sql = "SELECT USER FROM MYSQL.user";
$mysqli->query($sql);

To display the user information We need to execute the SELECT * FROM statement using the query() function of mysql2 library using JavaScript (NodeJS) program as follows −

sql= "SELECT * FROM mysql.user";
con.query(sql, function (err, result) {
   if (err) throw err;
      console.log(result);
});

Similarly in Java we can use the JDBC executeQuery() function to execute the SQL query that displays the user info as follows −

String sql = "SELECT USER FROM MYSQL.USER";
statement.executeQuery(sql);

The MySQL Connector/Python provides a function named execute() to execute an SQL query in the MySQL database.To show user info in MySQL database, we need to execute the SELECT USER statement using this function as −

sql = "SELECT user, host FROM mysql.user";
cursorObj.execute(sql);

Example

Following are the programs −

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass);
if($mysqli->connect_errno ) {
   printf("Connect failed: %s
", $mysqli->connect_error); exit(); } //printf('Connected successfully.
'); $sql = "SELECT USER FROM MYSQL.user"; if($result = $mysqli->query($sql)){ printf("User found successfully...!"); printf("Users list are: "); while($row = mysqli_fetch_array($result)){ print_r($row); } } if($mysqli->error){ printf("Failed..!" , $mysqli->error); } $mysqli->close();

Output

The output obtained is as follows −

User found successfully...!Users list are: Array
(
    [0] => Vivek Verma
    [USER] => Vivek Verma
)
Array
(
    [0] => Revathi
    [USER] => Revathi
)
Array
(
    [0] => Sarika
    [USER] => Sarika
)
Array
(
    [0] => mysql.infoschema
    [USER] => mysql.infoschema
)
Array
(
    [0] => mysql.session
    [USER] => mysql.session
)
Array
(
    [0] => mysql.sys
    [USER] => mysql.sys
)
Array
(
    [0] => root
    [USER] => root
)
var mysql = require('mysql2');
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "Nr5a0204@123"
});

  //Connecting to MySQL
  con.connect(function (err) {
  if (err) throw err;
  console.log("Connected!");
  console.log("--------------------------");

  //Creating Users
  sql = "CREATE USER TestUser1@localhost IDENTIFIED BY 'password1';"
  con.query(sql);
  sql = "CREATE USER TestUser2@localhost IDENTIFIED BY 'password2';"
  con.query(sql);
  sql = "CREATE USER TestUser3@localhost IDENTIFIED BY 'password3';"
  con.query(sql);
  sql = "CREATE USER TestUser4@localhost IDENTIFIED BY 'password4';"
  con.query(sql);

  //Listing the users
  sql = "SELECT USER FROM mysql.user;"
  con.query(sql, function(err, result){
    if (err) throw err
    console.log("**List of Users:**")
    console.log(result)
  });
});

Output

The output produced is as follows −

Connected!
--------------------------
**List of Users:**
[
  { USER: 'TestUser1' },
  { USER: 'TestUser2' },
  { USER: 'TestUser3' },
  { USER: 'TestUser4' },
  { USER: 'mysql.infoschema' },
  { USER: 'mysql.session' },
  { USER: 'mysql.sys' },
  { USER: 'root' },
  { USER: 'sample' }
]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class ShowUsers {
	public static void main(String[] args) {
		String url = "jdbc:mysql://localhost:3306/TUTORIALS";
		String user = "root";
		String password = "password";
		ResultSet rs;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, user, password);
            Statement st = con.createStatement();
            //System.out.println("Database connected successfully...!");
            String sql = "CREATE USER 'Vivek'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'";
            st.execute(sql);
            System.out.println("User 'Vivek' created successfully...!");
            String sql1 = "SELECT USER FROM MYSQL.user";
            rs = st.executeQuery(sql1);
            System.out.println("Users: ");
            while(rs.next()) {
            	String users = rs.getNString(1);
            	System.out.println(users);
            }
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

Output

The output obtained is as shown below −

User 'Vivek' created successfully...!
Users: 
Sarika
Vivek Verma
Revathi
Sarika
Vivek
mysql.infoschema
mysql.session
mysql.sys
root
import mysql.connector
# creating the connection object
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
)
# Create a cursor object for the connection
cursorObj = connection.cursor()
cursorObj.execute("SELECT user, host FROM mysql.user")
users = cursorObj.fetchall()
print("Existing users are:")
for user, host in users:
    print(f"User: {user}, Host: {host}")
cursorObj.close()
connection.close()

Output

Following is the output of the above code −

Existing users are:
User: UserNew, Host: localhost
User: mysql.infoschema, Host: localhost
User: mysql.session, Host: localhost
User: mysql.sys, Host: localhost
User: newUser, Host: localhost
User: root, Host: localhost
Advertisements