Подтвердить что ты не робот

Предоставить привилегии для нескольких таблиц с определенным префиксом

Я использую метод префикса таблицы для того, чтобы несколько клиентов использовали одну и ту же базу данных. Количество таблиц, созданных для каждого клиента, будет ~ 55. Вместо того, чтобы делать все предоставленные вручную путем перечисления таблиц, могу ли я сделать что-то вроде следующего?

GRANT SELECT,INSERT,UPDATE,DELETE ON database.prefix_* TO 'username'@'localhost' IDENTIFIED BY 'password';
4b9b3361

Ответ 1

Предварительная заметка: Это не мой ответ. Я нашел его в http://lists.mysql.com/mysql/202610 и скопировал и вложил для простоты кредит Стивен Куку

Вы можете использовать представление INFORMATION_SCHEMA.TABLES для создания GRANT заявления для вас. Напишите запрос в следующих строках:

SELECT   CONCAT('GRANT SELECT ON test.', TABLE_NAME, ' to ''foouser'';')
FROM     INFORMATION_SCHEMA.TABLES
WHERE    TABLE_SCHEMA = 'test'
      AND TABLE_NAME LIKE 'foo_%'

Затем запустите его, скопируйте результаты и запустите эти результаты в виде запроса или script. Разумеется, вы можете сходить с ума, как хотите, для Например, если вы сделаете это для многих пользователей, возможно, напишите хранимую процедуру который принимает параметр для имени пользователя и поэтому может быть использован как инструмент, когда вам это нужно.

Это не синтаксис, который вы просили, но это хороший трюк, который работает.

-

Замените таблицу "test" таблицы именем вашей базы данных. foo_% может быть заменен соответствующим приставкой _%

Я пробовал это самостоятельно, и он отлично работал.

Ответ 2

Я не уверен, если вы можете использовать подстановочные имена таблиц, вы можете определенно использовать подстановочные имена баз данных. Остерегайтесь, так как _ - это подстановочный знак, соответствующий любому одиночному символу (например, . в регулярном выражении).

Документация находится здесь: http://dev.mysql.com/doc/refman/5.5/en/grant.html

Подстановочные знаки "_" и "%" разрешено при указании базы данных имена в заявлениях GRANT, которые предоставляют привилегии в глобальной или базе данных уровни. Это означает, например, что если вы хотите использовать символ "_" в качестве часть имени базы данных, вы должны укажите его как "\ _" в GRANT, чтобы предотвратить возможность доступа к дополнительным базы данных, соответствующие шаблону шаблон; например, GRANT... ON `foo\_bar`. * TO....

Ответ 3

Следующие

GRANT SELECT , INSERT , UPDATE , DELETE ON ``database.prefix\_%``. * TO 'username'@'localhost'

отлично работает (протестирован с MySQL 5.6.12 в Windows)

Ответ 4

с помощью bash:

mysql -Ne "show tables from test like 'foo_%'" | xargs -I {} mysql -Ne "GRANT SELECT ON test.{} TO 'foouser'@'%'"