Назад | Перейти на главную страницу

разрешить любому действующему пользователю MySQL доступ к определенной таблице

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

Я знаю, что вы можете использовать подстановочные знаки для хостов, но, похоже, вы не можете использовать подстановочные знаки для имен пользователей. По сути, я хочу это сделать:

REVOKE ALL PRIVILEGES ON  `database`.`table` FROM  ''@'%';
GRANT INSERT, UPDATE ON  `database`.`table` TO  ''@'%';

MySQL не поддерживает подстановочные знаки в именах пользователей в соответствии с документами mysql, и нет другого способа, кроме использования любого скрипта, для добавления дополнительных привилегий пользователя каждый раз, когда вы добавляете нового пользователя.

Фактически, оператор grant без указания пользователя предоставит доступ к учетной записи анонимного пользователя, и вам нужно будет установить и использовать пароль для учетной записи анонимного пользователя для доступа к таблице.

Если вы пытаетесь использовать это в сценарии, я бы предпочел использовать отдельного пользователя mysql для сбора информации из этой таблицы, а не предоставлять привилегии и использовать индивидуальные учетные данные пользователя mysql.

Ссылки:

http://dev.mysql.com/doc/refman/5.1/en/grant.html#grant-table-privileges

http://dev.mysql.com/doc/refman/5.5/en/default-privileges.html

Прокрутите всех пользователей MySQL в mysql.user table и предоставьте привилегии, которые вы хотите:

mysql --skip-column-names -e "select user,host from mysql.user where host='%';" \
| grep -v root | \
while read account; do
    mysql -e "revoke all privileges on db.table from \
        '`echo $account | awk '{ print $1 }'`'@'%';"
    mysql -e "grant insert, update on db.table to \
        '`echo $account | awk '{ print $1 }'`'@'%';"
done
mysql -e "flush privileges;"

ОБНОВИТЬ

Как я уже сказал в комментарии ниже, вы можете использовать Incron контролировать /var/lib/mysql/mysql/user.MYI и запускать указанный выше сценарий всякий раз, когда создается пользователь.

Установите incron и запустите его:

# /etc/init.d/incrond start
Starting Filesystem event daemon (incrond):                [  OK  ]

Создать таблицу incron для mysql пользователь:

# incrontab -l -u mysql
/var/lib/mysql/mysql/user.MYI IN_MODIFY,IN_CLOSE_WRITE /var/lib/mysql/update_privileges.sh

Когда вы создаете нового пользователя MySQL, вы увидите ниже в /var/log/cron:

incrond[13084]: (mysql) CMD (/var/lib/mysql/update_privileges.sh)

и новому пользователю будет автоматически предоставлено INSERT, UPDATE привилегии на db.table:

+-----------------------------------------------------------------------------------------------------------+
| Grants for testuser@%                                                                                   |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'testuser'@'%' IDENTIFIED BY PASSWORD '*' |
| GRANT INSERT, UPDATE ON `db`.`table` TO 'testuser'@'%'                                                |
+-----------------------------------------------------------------------------------------------------------+

Интересно, есть ли способ получить последнего пользователя MySQL и предоставить ему привилегии вместо того, чтобы делать это для всех пользователей.