A concessão do usuário do MySQL não está funcionando - permissão oculta no mysql.db

4

Eu tenho um usuário mysql conectando do Server2 ao Server1 por SSL (mysql 5.0.77).

Aqui estão as concessões para este usuário no Server1, (server2 tem um ip no intervalo xx.xx.xx.%)

mysql> show grants for user@'xx.xx.xx.%';
+-------------------------------------------------------------------------------------------------------------------------------+ 
| Grants for [email protected].%                                      |
+-------------------------------------------------------------------------------------------------------------------------------+ 
| GRANT USAGE ON *.* TO 'user'@'xx.xx.xx.%' IDENTIFIED BY PASSWORD 'xxx' REQUIRE SSL |

Eu fiz um flush privileges , mas mesmo sem privilégios, ainda posso mostrar bancos de dados, mostrar tabelas, selecionar. Como isso é possível ?!!!

Eu verifiquei que em 'show processlist completo' o usuário não está sempre conectado, nova conexão mysql nova. Uma vez que a conexão foi aberta, eu faço um 'show grant', a permissão efetiva é a mesma ... USAGE.

-

A tabela mysql.db tem uma entrada para este usuário que diz que ele selecionou, inseriu, atualizou e deletou no banco de dados. Então este é um tipo de tabela de permissão oculta? Como essa permissão poderia ter ido lá em vez de mysql.user?

    
por Bastien974 09.02.2012 / 21:57

1 resposta

2

Pode ser possível que você tenha um usuário anônimo no mysql.user.

Primeiras coisas primeiro. Por favor, execute esta consulta:

SELECT USER(),CURRENT_USER();

USER () informa como você tentou autenticar p>

CURRENT_USER () informa como o mysqld permitiu autenticar

Se a segunda função revelar um usuário esquisito, é provável que seja o usuário anônimo.

Vá para minha resposta DBA StackExchange sobre como o MySQL realiza a autenticação do usuário, mais como e por que remover usuários anônimos .

    
por 10.02.2012 / 08:28

Tags