Como associar e autorizar um usuário do banco de dados mysql com um banco de dados mysql, no mysql CLI?

1

Em um ambiente de teste, criei um usuário e um banco de dados com o mesmo nome dessa maneira:

create user 'test'@'localhost' identified by 'blablabla';
create database test;

Quando cheguei a associar o usuário ao banco de dados (ao mesmo tempo em que também concede todos os privilégios ao usuário):

grant all privileges on test.* to test; 

Eu recebi este erro:

ERROR 1133 (42000): Can't find any matching row in the user table

Eu não entendo o que não combina. Como show databases; e SELECT user FROM mysql.user; indicam que tanto o usuário quanto o banco de dados foram criados com sucesso, sinto falta do motivo pelo qual recebi esse erro.

Por que recebo esse erro?

Atualização para Abhik Bose:

mysql> grant all privileges on test.* to 'test'@'localhost';
grant all privileges on test.* to 'test'@'localhost';
^C
mysql> grant all privileges on test.* to 'test'@'localhost';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    4774
Current database: *** NONE ***

Query OK, 0 rows affected (0.00 sec)
    
por Arcticooling 17.11.2017 / 07:22

1 resposta

3

Diferentemente do PostgreSQL, o MySQL e o MariaDB não possuem funções de nome de usuário único. O usuário chamado test sem nome de host definido é interpretado como usuário test@% , para qualquer host, que é um usuário diferente de test@localhost e pode ter uma senha totalmente diferente.

Você vai querer fazer

GRANT ALL PRIVILEGES ON test.* TO test@localhost;

em vez disso. Na verdade, você pode omitir completamente a declaração CREATE USER e fazer:

CREATE DATABASE test;
GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY 'password'; 

E o MySQL cuidará do resto.

    
por 17.11.2017 / 12:14

Tags