Список всех пользователей с разрешениями DML в MySQL - PullRequest
0 голосов
/ 15 октября 2018

Мне нужно перечислить всех пользователей, у которых есть доступ к DML на сервере, определенном на уровне схемы, таблицы или столбца.У меня есть следующий запрос.Есть ли более элегантное решение для этого?

select host, 
       db, user, 
       '*' tables, 
       '*' columns, 
       'schema' priv_defined_at 
from mysql.db d
where (Insert_priv = 'Y' 
    or Update_priv = 'Y'
    or Delete_priv = 'Y' 
    or Create_priv = 'Y' 
    or Grant_priv = 'Y' 
    or Index_priv = 'Y' 
    or Alter_priv = 'Y' 
    or Create_tmp_table_priv = 'Y' 
    or Create_view_priv = 'Y' 
    or Create_routine_priv = 'Y' 
    or Alter_routine_priv = 'Y' 
    or Event_priv = 'Y' 
    or Trigger_priv = 'Y')
union all
select host, 
       db, 
       user, 
       table_name, 
       '*' columns, 
       'table' defined_at 
from mysql.tables_priv
where (Table_priv in ('Insert','Update','Delete','Create','Drop','Index','Alter','Create View','Trigger'))
union all
(select host, 
        db, 
        user, 
        table_name, 
        group_concat(column_name separator ', '), 
        'column' defined_at 
from mysql.columns_priv 
where (Column_priv like '%insert%' 
    or Column_priv like '%delete%' 
    or Column_priv like '%update%'
    or Column_priv like '%alter%')
group by 1, 2, 3, 4)
order by user;
...