Somebody asked on Freenode. I don't know why they wanted it. How
would you drop all MySQL users who do not have "GRANT ALL ON *.*
... WITH GRANT OPTION"? That is, drop any users who have 'N' in
any of the privilege columns in `mysql`.`user`.
My solution shown below. Did you think of a different approach?
My solution ▼
I used SQL to build SQL which built more SQL. Get the list of
'priv' columns from information_schema.columns. Build a query
that looks for 'N' in any of those columns (it feels funny to
search for a constant in a list of fields instead of a field in a
list of constants, but it's perfectly legal). Use the results to
build the DROP USER statement.
mysql -BNe "SELECT CONCAT('SELECT CONCAT(''DROP USER '', QUOTE(user), ''@'', QUOTE(Host), '';'') FROM mysql.user WHERE ''N'' IN (', GROUP_CONCAT(column_name), ')') FROM information_schema.columns WHERE table_schema = 'mysql' AND table_name = 'user' AND …[Read more]