Я использую скрипты для создания баз данных и таблиц Mysql. Эти скрипты содержат секции grant, подобные следующей:
GRANT SELECT ON my_database.* TO my_user@"%" IDENTIFIED BY 'my_password';
REVOKE ALL PRIVILEGES ON my_database.* FROM my_user@"%";
GRANT SELECT, UPDATE ON my_database.* TO my_user@"%" IDENTIFIED BY 'my_password';
Первоначально я использовал только третью строку, но столкнулся со следующей проблемой: всякий раз, когда я удалял привилегию Q у пользователя и повторно запускал скрипт, пользователь все еще имел эту привилегию в базе данных. Поэтому я добавил строку revoke перед строкой grant.
Затем я столкнулся со следующей проблемой: всякий раз, когда я запускал сценарий на "свежей" установке Mysql, лишение привилегий не удавалось, потому что пользователь еще не существовал. Поэтому я добавил "фиктивный" грант перед отзывом.
Вопрос: Есть ли лучший способ решить эту задачу? Мои "настоящие" скрипты содержат много пользователей и много баз данных, и их трудно читать, потому что мне нужно три строки для каждого набора привилегий, которые я хочу назначить. Я бы хотел использовать только одну строку.
Редактировать (с учетом ответов и комментариев):
Я ищу самый короткий способ сказать что-то вроде
SET PRIVILEGES SELECT, UPDATE
ON my_database.*
TO my_user@"%"
IDENTIFIED BY 'my_password';
где my_user может