permitindo qualquer acesso de usuário MySQL válido a uma tabela específica

2

Eu tenho uma tabela de banco de dados que eu quero que todos os usuários válidos do MySQL tenham acesso (é para rastrear um determinado conjunto de estatísticas em vários bancos de dados). Existe uma maneira de fazer isso?

Eu sei que você pode hospedar hosts curinga, mas parece que você não consegue usar nomes de usuário com caracteres curingas. Essencialmente, quero fazer isso:

REVOKE ALL PRIVILEGES ON  'database'.'table' FROM  ''@'%';
GRANT INSERT, UPDATE ON  'database'.'table' TO  ''@'%';
    
por ceejayoz 09.09.2011 / 20:59

2 respostas

1

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.

    
por 10.09.2011 / 07:28
3

O MySQL não suporta caracteres curinga em nomes de usuários, conforme documentos do mysql, e não há outra maneira além de usar qualquer script para adicionar privilégios de usuário adicionais toda vez que você adicionar um novo usuário.

Na verdade, a instrução de concessão sem qualquer usuário especificado concederá acesso à conta de usuário anônimo e você precisará definir e usar a senha da conta de usuário anônimo para acessar a tabela.

Se você está tentando usar isso em um script, eu prefiro sugerir o uso de um usuário mysql separado para coletar informações daquela tabela em vez de conceder privilégio & usando credenciais individuais do usuário mysql.

Referências:

link

link

    
por 13.09.2011 / 01:50

Tags