I have a user which has access (GRANT ALL) to a set of databases matching a wildcard pattern, now I would like to remove one specific database matching this wildcard from it's access.
mysql> select * from mysql.db where host='server' AND user='user' and Db LIKE 'db_%'\G
*************************** 1. row ***************************
Host: server
Db: db_%
User: db
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Grant_priv: N
References_priv: Y
Index_priv: Y
Alter_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Execute_priv: Y
Event_priv: Y
Trigger_priv: Y
1 row in set (0.00 sec)
I've tried to revoke access on this specific database but that does not work because that does not match a existing rule I assume
mysql> REVOKE ALL on db_6.* FROM 'user'@'server';
ERROR 1141 (42000): There is no such grant defined for user 'user' on host 'server'
eventually I granted the lowest permission (USAGE) for this specific database.
mysql> show grants for 'user'@'server';
+--------------------------------------------------------+
| Grants for user@server |
+--------------------------------------------------------+
| GRANT ALL PRIVILEGES ON `db_%`.* TO 'user'@'server' |
+--------------------------------------------------------+
mysql> GRANT USAGE on db_6.* to 'user'@'server';
mysql> show grants for 'user'@'server';
+--------------------------------------------------------+
| Grants for user@server |
+--------------------------------------------------------+
| GRANT USAGE ON *.* TO 'user'@'server' |
| GRANT ALL PRIVILEGES ON `db_%`.* TO 'user'@'server' |
+--------------------------------------------------------+
is there a way to achieve that ?
Thanks