Não é possível logar no mysql com usuário não root da linha de comando

2

Estou configurando um servidor mysql e estou tentando criar um usuário não privilegiado para efetuar login em cada banco de dados que eu criar. Eu posso fazer o login com sucesso como root a partir do console, mas quando tento fazer o login como o usuário "rails" ele falha. É assim que meus usuários se parecem:

mysql> select user,host,password from mysql.user;
+---------+-----------+-------------------------------------------+
| user    | host      | password                                  |
+---------+-----------+-------------------------------------------+
| root    | localhost | *9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0 |
| root    | 127.0.0.1 | *C453FFD4FD2470D5CD56BB9A229BDC7388F3A170 |
| datadog | localhost | *AEB79FF15C0A9CA185F3768235927ADDD9667C85 |
| rails   | localhost | *9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0 |
+---------+-----------+-------------------------------------------+

As concessões para o usuário rails são assim:

mysql> show grants for 'rails'@'localhost';                                                                                                                                          ';
+--------------------------------------------------------------------------------------------------------------------------+
| Grants for rails@localhost                                                                                               |
+--------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'rails'@'localhost' IDENTIFIED BY PASSWORD '*9CAF1C22F1F66A8C47C74E7F6700391F0AB817F0' REQUIRE SSL |
| GRANT ALL PRIVILEGES ON 'resumecompanion_staging'.* TO 'rails'@'localhost'                                               |
+--------------------------------------------------------------------------------------------------------------------------+

por favor note que eu defini a senha do usuário root e a senha do trilho como a mesma. Eu fiz isso para confirmar que estou inserindo a senha correta e ainda não funciona.

Quando eu tento fazer o login com os usuários do Rails, vejo isso:

mysql -u rails -h localhost -p --protocol=TCP resumecompanion_staging
Enter password:
ERROR 1045 (28000): Access denied for user 'rails'@'localhost' (using password: YES)

Alguém tem alguma idéia do que estou fazendo de errado?

Obrigado,

Josh

    
por Josh Moore 20.07.2015 / 08:19

1 resposta

2

GRANT ... TO 'rails'@'localhost' ... REQUIRE SSL

Para iniciantes que exigem SSL para conexões de / para localhost é completamente sem sentido. O SSL ou o TLS fornecem segurança de transporte que você não precisa para comunicações que não saiam do sistema real, que não fornecem segurança adicional e apenas sobrecarga extra.

Além disso, as bibliotecas oficiais do MySQL no Linux / UNIX tratam a palavra-chave localhost diferente do que você esperaria e usarão o soquete Unix, não o TCP. do manual :

On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port or -P option is given to specify a port number. ... You can also specify the connection protocol explicitly, by using the --protocol=TCP option.

O uso do soquete oferece muito mais desempenho do que o uso de TCP / IP e AFAIK, o soquete não suporta SSL (e não precisaria de nenhum dos dois).

Se você forçar uma conexão TCP, você precisará CONCEDER acesso sobre TCP também, com GRANT ... TO 'rails'@'127.0.0.1' ... , porque a concessão de conexões de localhost implica no soquete Unix.

Particularmente inútil é que, para mensagens de erro, o MySQL segue a convenção para fazer uma pesquisa inversa de DNS para endereços IP que irá converter o endereço IP 127.0.0.1 em localhost .

    
por 20.07.2015 / 09:05

Tags