Users with "Grant_priv" GRANT are able to assign GRANT privileges to other users which is true for root user too which contains WITH GRANT OPTION privilege Now scenarios you described seems expected behavior to me as DROP privilege enables you to drop (remove) existing databases, tables, and views. So, when root doesn’t have that privilege so failed to assign “ALL PRIVILEGES” which also includes “DROP PRIVILEGE” regardless root have GRANT privilege. However, you can still assign individual privilege excluding DROP privilege. Let me show you with below example: mysql> SELECT CURRENT_USER(); +----------------+ | CURRENT_USER() | +----------------+ | root@localhost | +----------------+ mysql> SELECT User, Host, Drop_priv, Grant_priv FROM mysql.user WHERE user='root'; +------+-----------+-----------+------------+ | User | Host | Drop_priv | Grant_priv | +------+-----------+-----------+------------+ | root | localhost | Y | Y | +------+-----------+-----------+------------+ 1 row in set (0.00 sec) mysql> SHOW GRANTS FOR 'root'@'localhost'; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON test.* TO 'test_user'@'localhost' IDENTIFIED BY 'fame_and_fortUne12#3'; Query OK, 0 rows affected, 1 warning (0.00 sec) So, you can see no issues when assigning DROP privilege to test_user when Drop_priv is true for root user. 2nd test: mysql> SELECT CURRENT_USER(); +----------------+ | CURRENT_USER() | +----------------+ | root@localhost | +----------------+ mysql> UPDATE mysql.user set Drop_priv = 'N' where user = 'root'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> SHOW GRANTS FOR 'root'@'localhost'; +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for root@localhost | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ Now, here when checking "root" user privileges it shows individual privileges assigned to root user as DROP privilege is revoked from root user and it shows the list of privileges which root user can GRANT. mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON test.* TO 'test_user'@'localhost' IDENTIFIED BY 'fame_and_fortUne12#3'; ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'test' As expected Access denied because of DROP privilege. mysql> UPDATE mysql.user set Drop_priv = 'Y' where user = 'root'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> SHOW GRANTS FOR 'root'@'localhost'; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 2 rows in set (0.00 sec) As soon as I assigned DROP privilege back to root user it shows "ALL PRIVILEGES" back to root user which means root user can now assign DROP privilege too. mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON test.* TO 'test_user'@'localhost' IDENTIFIED BY 'fame_and_fortUne12#3'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> SELECT CURRENT_USER(); +----------------+ | CURRENT_USER() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.01 sec) Hope that helps.