Faça um loop por todos os usuários do MySQL em mysql.user
table e conceda privilégios que você deseja:
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;"
UPDATE
Como eu disse no comentário abaixo, você pode usar incron para monitorar /var/lib/mysql/mysql/user.MYI
e executar o script acima sempre que um usuário é criado .
Instale o incron e inicie-o:
# /etc/init.d/incrond start
Starting Filesystem event daemon (incrond): [ OK ]
Crie uma tabela incron para mysql
user:
# incrontab -l -u mysql
/var/lib/mysql/mysql/user.MYI IN_MODIFY,IN_CLOSE_WRITE /var/lib/mysql/update_privileges.sh
Quando você cria um novo usuário do MySQL, você verá o abaixo em /var/log/cron
:
incrond[13084]: (mysql) CMD (/var/lib/mysql/update_privileges.sh)
e o novo usuário receberá automaticamente INSERT, UPDATE
privileges em db.table
:
+-----------------------------------------------------------------------------------------------------------+
| Grants for testuser@% |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'testuser'@'%' IDENTIFIED BY PASSWORD '*' |
| GRANT INSERT, UPDATE ON 'db'.'table' TO 'testuser'@'%' |
+-----------------------------------------------------------------------------------------------------------+
Gostaria de saber se existe uma maneira de obter o usuário mais recente do MySQL e conceder privilégios para este, em vez de fazer para todos os usuários.