
- MySQL - Home
- MySQL - Introduction
- MySQL - Features
- MySQL - Versions
- MySQL - Variables
- MySQL - Installation
- MySQL - Administration
- MySQL - PHP Syntax
- MySQL - Node.js Syntax
- MySQL - Java Syntax
- MySQL - Python Syntax
- MySQL - Connection
- MySQL - Workbench
- MySQL Databases
- MySQL - Create Database
- MySQL - Drop Database
- MySQL - Select Database
- MySQL - Show Database
- MySQL - Copy Database
- MySQL - Database Export
- MySQL - Database Import
- MySQL - Database Info
- MySQL Users
- MySQL - Create Users
- MySQL - Drop Users
- MySQL - Show Users
- MySQL - Change Password
- MySQL - Grant Privileges
- MySQL - Show Privileges
- MySQL - Revoke Privileges
- MySQL - Lock User Account
- MySQL - Unlock User Account
- MySQL Tables
- MySQL - Create Tables
- MySQL - Show Tables
- MySQL - Alter Tables
- MySQL - Rename Tables
- MySQL - Clone Tables
- MySQL - Truncate Tables
- MySQL - Temporary Tables
- MySQL - Repair Tables
- MySQL - Describe Tables
- MySQL - Add/Delete Columns
- MySQL - Show Columns
- MySQL - Rename Columns
- MySQL - Table Locking
- MySQL - Drop Tables
- MySQL - Derived Tables
- MySQL Queries
- MySQL - Queries
- MySQL - Constraints
- MySQL - Insert Query
- MySQL - Select Query
- MySQL - Update Query
- MySQL - Delete Query
- MySQL - Replace Query
- MySQL - Insert Ignore
- MySQL - Insert on Duplicate Key Update
- MySQL - Insert Into Select
- MySQL Indexes
- MySQL - Indexes
- MySQL - Create Index
- MySQL - Drop Index
- MySQL - Show Indexes
- MySQL - Unique Index
- MySQL - Clustered Index
- MySQL - Non-Clustered Index
- MySQL Operators and Clauses
- MySQL - Where Clause
- MySQL - Limit Clause
- MySQL - Distinct Clause
- MySQL - Order By Clause
- MySQL - Group By Clause
- MySQL - Having Clause
- MySQL - AND Operator
- MySQL - OR Operator
- MySQL - Like Operator
- MySQL - IN Operator
- MySQL - ANY Operator
- MySQL - EXISTS Operator
- MySQL - NOT Operator
- MySQL - NOT EQUAL Operator
- MySQL - IS NULL Operator
- MySQL - IS NOT NULL Operator
- MySQL - Between Operator
- MySQL - UNION Operator
- MySQL - UNION vs UNION ALL
- MySQL - MINUS Operator
- MySQL - INTERSECT Operator
- MySQL - INTERVAL Operator
- MySQL Joins
- MySQL - Using Joins
- MySQL - Inner Join
- MySQL - Left Join
- MySQL - Right Join
- MySQL - Cross Join
- MySQL - Full Join
- MySQL - Self Join
- MySQL - Delete Join
- MySQL - Update Join
- MySQL - Union vs Join
- MySQL Keys
- MySQL - Unique Key
- MySQL - Primary Key
- MySQL - Foreign Key
- MySQL - Composite Key
- MySQL - Alternate Key
- MySQL Triggers
- MySQL - Triggers
- MySQL - Create Trigger
- MySQL - Show Trigger
- MySQL - Drop Trigger
- MySQL - Before Insert Trigger
- MySQL - After Insert Trigger
- MySQL - Before Update Trigger
- MySQL - After Update Trigger
- MySQL - Before Delete Trigger
- MySQL - After Delete Trigger
- MySQL Data Types
- MySQL - Data Types
- MySQL - VARCHAR
- MySQL - BOOLEAN
- MySQL - ENUM
- MySQL - DECIMAL
- MySQL - INT
- MySQL - FLOAT
- MySQL - BIT
- MySQL - TINYINT
- MySQL - BLOB
- MySQL - SET
- MySQL Regular Expressions
- MySQL - Regular Expressions
- MySQL - RLIKE Operator
- MySQL - NOT LIKE Operator
- MySQL - NOT REGEXP Operator
- MySQL - regexp_instr() Function
- MySQL - regexp_like() Function
- MySQL - regexp_replace() Function
- MySQL - regexp_substr() Function
- MySQL Fulltext Search
- MySQL - Fulltext Search
- MySQL - Natural Language Fulltext Search
- MySQL - Boolean Fulltext Search
- MySQL - Query Expansion Fulltext Search
- MySQL - ngram Fulltext Parser
- MySQL Functions & Operators
- MySQL - Date and Time Functions
- MySQL - Arithmetic Operators
- MySQL - Numeric Functions
- MySQL - String Functions
- MySQL - Aggregate Functions
- MySQL Misc Concepts
- MySQL - NULL Values
- MySQL - Transactions
- MySQL - Using Sequences
- MySQL - Handling Duplicates
- MySQL - SQL Injection
- MySQL - SubQuery
- MySQL - Comments
- MySQL - Check Constraints
- MySQL - Storage Engines
- MySQL - Export Table into CSV File
- MySQL - Import CSV File into Database
- MySQL - UUID
- MySQL - Common Table Expressions
- MySQL - On Delete Cascade
- MySQL - Upsert
- MySQL - Horizontal Partitioning
- MySQL - Vertical Partitioning
- MySQL - Cursor
- MySQL - Stored Functions
- MySQL - Signal
- MySQL - Resignal
- MySQL - Character Set
- MySQL - Collation
- MySQL - Wildcards
- MySQL - Alias
- MySQL - ROLLUP
- MySQL - Today Date
- MySQL - Literals
- MySQL - Stored Procedure
- MySQL - Explain
- MySQL - JSON
- MySQL - Standard Deviation
- MySQL - Find Duplicate Records
- MySQL - Delete Duplicate Records
- MySQL - Select Random Records
- MySQL - Show Processlist
- MySQL - Change Column Type
- MySQL - Reset Auto-Increment
- MySQL - Coalesce() Function
MySQL - Show Privileges
The users in MySQL must have enough privileges to interact with the server. This is possible by assigning authentication details, like passwords to the users. In addition to this, operational or administrative privileges are granted separately if a user wants to interact with and operate on the data.
The MySQL SHOW Privileges
The MySQL SHOW PRIVILEGES Statement displays the list of privileges that are supported by the MYSQL server. The displayed list includes all static and currently registered dynamic privileges.
The information (returned list) contains three columns −
- Privilege − Name of the privilege
- Context − Name of the MySQL object for which the privilege is applicable.
- Comment − A string value describing the purpose of the privilege.
Syntax
Following is the syntax to list out all privileges in a MySQL Server −
SHOW PRIVILEGES;
Example
Following query lists out all the privileges supported by the MySQL server −
SHOW PRIVILEGES
Output
After executing the above code, we get the following output −
Privilege | Context | Comment |
---|---|---|
Alter | Tables | To alter the table |
Alter routine | Functions, Procedures | To alter or drop stored functions/procedures |
Create | Databases, Tables, Indexes | To create new databases and tables |
Create routine | Databases | To use CREATE FUNCTION/PROCEDURE |
Create role | Server Admin | To create new roles |
Create temporary tables | Databases | To use CREATE TEMPORARY TABLE |
Create view | Tables | To create new views |
Create user | Server Admin | To create new users |
Delete | Tables | To delete existing rows |
Drop | Databases, Tables | To drop databases, tables, and views |
Drop role | Server Admin | To drop roles |
Event | Server Admin | To create, alter, drop and execute events |
Execute | Functions, Procedures | To execute stored routines |
File | File access on server | To read and write files on the server |
Grant option | Databases, Tables, Funcs, Procedures | To give to other users those privileges you possess |
Index | Tables | To create or drop indexes |
Insert | Tables | To insert data into tables |
Lock tables | Databases | To use LOCK TABLES (together with SELECT privilege) |
Process | Server Admin | To view the plain text of currently executing queries |
Proxy | Server Admin | To make proxy user possible |
References | Databases,Tables | To have references on tables |
Reload | Server Admin | To reload or refresh tables, logs and privileges |
Replication client | Server Admin | To ask where the slave or master servers are |
Replication slave | Server Admin | To read binary log events from the master |
Select | Tables | To retrieve rows from table |
Show databases | Server Admin | To see all databases with SHOW DATABASES |
Show view | Tables | To see views with SHOW CREATE VIEW |
Shutdown | Server Admin | To shut down the server |
Super | Server Admin | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc. |
Trigger | Tables | To use triggers |
Create tablespace | Server Admin | To create/alter/drop tablespaces |
Update | Tables | To update existing rows |
Usage | Server Admin | No privileges - allow connect only |
BINLOG_ENCRYPTION_ADMIN | Server Admin | |
AUDIT_ADMIN | Server Admin | |
ENCRYPTION_KEY_ADMIN | Server Admin | |
INNODB_REDO_LOG_ARCHIVE | Server Admin | |
APPLICATION_PASSWORD_ADMIN | Server Admin | |
SHOW_ROUTINE | Server Admin | |
BACKUP_ADMIN | Server Admin | |
BINLOG_ADMIN | Server Admin | |
CLONE_ADMIN | Server Admin | |
CONNECTION_ADMIN | Server Admin | |
SET_USER_ID | Server Admin | |
SERVICE_CONNECTION_ADMIN | Server Admin | |
GROUP_REPLICATION_ADMIN | Server Admin | |
REPLICATION_APPLIER | Server Admin | |
INNODB_REDO_LOG_ENABLE | Server Admin | |
PERSIST_RO_VARIABLES_ADMIN | Server Admin | |
TABLE_ENCRYPTION_ADMIN | Server Admin | |
ROLE_ADMIN | Server Admin | |
REPLICATION_SLAVE_ADMIN | Server Admin | |
SESSION_VARIABLES_ADMIN | Server Admin | |
RESOURCE_GROUP_ADMIN | Server Admin | |
RESOURCE_GROUP_USER | Server Admin | |
SYSTEM_USER | Server Admin | |
SYSTEM_VARIABLES_ADMIN | Server Admin | |
XA_RECOVER_ADMIN | Server Admin |
Listing Privileges Using a Client Program
Now, let us see how to retrieve/list all the privileges granted to the current MySQL user using a client program in programming languages like Java, PHP, Python, JavaScript, C++ etc.
Syntax
Following are the syntaxes −
To show all the privileges granted to an user, we need to pass the SHOW PRIVILEGES statement as a parameter to the query() function of the PHP mysqli library as −
$sql = "SHOW PRIVILEGES"; $mysqli->query($sql);
Following is the syntax to show all the privileges granted to the current user through a JavaScript program −
sql= "SHOW PRIVILEGES;" con.query(sql, function (err, result) { if (err) throw err; console.log(result); });
To show the privileges of the current user, we need to execute the SHOW PRIVILEGES statement using the JDBC executeQuery() function as −
String sql = "SHOW PRIVILEGES"; statement.executeQuery(sql);
Following is the syntax to show all the privileges granted to the current MySQL user through a Python program −
sql = f"SHOW GRANTS FOR '{username_to_show}'@'localhost'"; 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 = "SHOW PRIVILEGES"; if($result = $mysqli->query($sql)){ printf("PRIVILEGES found successfully...!"); printf("Lists 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 −
PRIVILEGES found successfully...!Lists are: Array ( [0] => Alter [Privilege] => Alter [1] => Tables [Context] => Tables [2] => To alter the table [Comment] => To alter the table ) Array ( [0] => Alter routine [Privilege] => Alter routine [1] => Functions,Procedures [Context] => Functions,Procedures [2] => To alter or drop stored functions/procedures [Comment] => To alter or drop stored functions/procedures ) Array ( [0] => Create [Privilege] => Create [1] => Databases,Tables,Indexes [Context] => Databases,Tables,Indexes [2] => To create new databases and tables [Comment] => To create new databases and tables ) Array ( [0] => Create routine [Privilege] => Create routine [1] => Databases [Context] => Databases [2] => To use CREATE FUNCTION/PROCEDURE [Comment] => To use CREATE FUNCTION/PROCEDURE ) Array ( [0] => Create role [Privilege] => Create role [1] => Server Admin [Context] => Server Admin [2] => To create new roles [Comment] => To create new roles ) .......... ( [0] => REPLICATION_SLAVE_ADMIN [Privilege] => REPLICATION_SLAVE_ADMIN [1] => Server Admin [Context] => Server Admin [2] => [Comment] => ) Array ( [0] => SENSITIVE_VARIABLES_OBSERVER [Privilege] => SENSITIVE_VARIABLES_OBSERVER [1] => Server Admin [Context] => Server Admin [2] => [Comment] => )
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("--------------------------"); sql = "SHOW PRIVILEGES"; con.query(sql, function(err, result){ if (err) throw err; console.log(result); }); });
Output
The output produced is as follows −
Connected! -------------------------- [ { Privilege: 'Alter', Context: 'Tables', Comment: 'To alter the table' }, . . . { Privilege: 'TELEMETRY_LOG_ADMIN', Context: 'Server Admin', Comment: '' } ]
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class ShowPriv { 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 = "SHOW PRIVILEGES"; rs = st.executeQuery(sql); System.out.println("All privileges: "); while(rs.next()) { String priv = rs.getNString(1); System.out.println(priv); } }catch(Exception e) { e.printStackTrace(); } } }
Output
The output obtained is as shown below −
All privileges: Alter Alter routine Create Create routine Create role Create temporary tables Create view Create user Delete Drop Drop role Event Execute File Grant option Index Insert Lock tables Process Proxy References Reload Replication client Replication slave Select Show databases Show view Shutdown Super
import mysql.connector # creating the connection object connection = mysql.connector.connect( host='localhost', user='root', password='password' ) username_to_show = 'newUser' # Create a cursor object for the connection cursorObj = connection.cursor() cursorObj.execute(f"SHOW GRANTS FOR '{username_to_show}'@'localhost'") privileges = cursorObj.fetchall() print(f"Privileges for user '{username_to_show}' are:") for grant in privileges: print(grant[0]) cursorObj.close() connection.close()
Output
Following is the output of the above code −
Privileges for user 'newUser' are: GRANT USAGE ON *.* TO `newUser`@`localhost` GRANT SELECT, INSERT, UPDATE ON `your_database`.* TO `newUser`@`localhost`