Предоставить права на несколько таблиц с определенным префиксом - PullRequest
14 голосов
/ 04 мая 2011

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

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

Ответы [ 4 ]

30 голосов
/ 04 мая 2011

Предварительное примечание: это не мой ответ. Я нашел это в 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_%'

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

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

-

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

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

3 голосов
/ 04 мая 2011

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

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

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

0 голосов
/ 04 декабря 2013

следующие

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

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

0 голосов
/ 08 апреля 2013

с использованием bash:

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