Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conceder direitos ao banco de dados MySQL adicional causando problemas


O MySQL identifica um usuário pelo nome de usuário e pelo host. Quando o MySQL faz a autenticação no login, o MySQL primeiro procura um nome de host que seja uma correspondência exata. Se não encontrar uma correspondência exata, procurará um host contendo um curinga '%'.

Quando você fez o GRANT ... TO [email protected] , MySQL criou um novo usuário (sem senha, porque não havia IDENTIFIED BY dado na declaração.

Então o que aconteceu, quando você tentou fazer login como myuser do localhost, o mysqld tentou encontrar uma entrada que correspondesse a 'myuser'@'localhost' na tabela mysql.user e encontrou. E a sessão obteve os privilégios atribuídos a esse usuário.

(Para ser um pouco mais preciso, o mysqld realmente não olha para o conteúdo da tabela mysql.user, o que realmente olha para a estrutura na memória, que foi preenchida a partir da tabela quando foi construída. Uma reconstrução do estrutura de memória é acionada por uma instrução GRANT, REVOKE ou FLUSH PRIVILEGES.)

O que estava acontecendo ANTES de você adicionar esse novo usuário, o mysqld estava procurando por uma correspondência exata no usuário e no nome do host, e não encontrou um. Mas ele encontrou uma entrada com o curinga '%', então correspondeu a isso, então a sessão obteve todos os privilégios concedidos ao usuário 'myuser'@'%'.

Os dois usuários 'u'@'%' e 'u'@'localhost' são separados e distintos um do outro. Os privilégios devem ser concedidos a cada usuário individualmente. Quaisquer privilégios concedidos a 'u'@'%' aplicam-se SOMENTE a esse usuário e NÃO a 'u'@'localhost' .