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

1045, Acesso negado para usuário 'username'@'NOT-local' (usando senha:YES)


mostrar logins para o servidor (observe que % significa anyhost ou curinga)
select user,host from mysql.user;

+-----------+------------+
| user      | host       |
+-----------+------------+
| ajax_guy  | %          |
| joe7      | %          |
| joe8      | %          |
+-----------+------------+

mostrar quais concessões existem para um determinado usuário.
show grants for 'ajax_guy'@'%';

+----------------------------------------------------------------------
| Grants for [email protected]%                                              
+----------------------------------------------------------------------
| GRANT USAGE ON *.* TO 'ajax_guy'@'%' IDENTIFIED BY PASSWORD ...
| GRANT ALL PRIVILEGES ON `ajax_stuff`.* TO 'ajax_guy'@'%'           
| GRANT ALL PRIVILEGES ON `ajax_stuff`.`ajax_stuff` TO 'ajax_guy'@'%'
+----------------------------------------------------------------------

Como conceder acesso a um determinado db para um determinado login. Abaixo estamos concedendo todos os direitos ao usuário para o so_gibberish banco de dados .
grant ALL on so_gibberish.* to 'ajax_guy'@'%';

Veja as concessões em vigor agora para esse login
+----------------------------------------------------------------------
| Grants for [email protected]%                                              
+----------------------------------------------------------------------
| GRANT USAGE ON *.* TO 'ajax_guy'@'%' IDENTIFIED BY PASSWORD ...
| GRANT ALL PRIVILEGES ON `ajax_stuff`.* TO 'ajax_guy'@'%'           
| GRANT ALL PRIVILEGES ON `so_gibberish`.* TO 'ajax_guy'@'%'         
| GRANT ALL PRIVILEGES ON `ajax_stuff`.`ajax_stuff` TO 'ajax_guy'@'%'
+----------------------------------------------------------------------

Crie um novo login drew_saturday com uma senha friday987 .Ele tem todos os privilégios no banco de dados so_gibberish e pode fazer login de qualquer host (% )
grant ALL on so_gibberish.* to 'drew_saturday'@'%' IDENTIFIED BY 'friday987';

select user,host,password from mysql.user where user='drew_saturday';

+---------------+------+-------------------------------------------+
| user          | host | password                                  |
+---------------+------+-------------------------------------------+
| drew_saturday | %    | *4600ED0F377308959665877BD327D4788DC2071F |
+---------------+------+-------------------------------------------+

Essa senha acima é a senha com hash, a propósito.

Nota:para MySQL 5.7 o comando acima seria:
select user,host,authentication_string from mysql.user where user='drew_saturday';

Página de manual do MySQL em Grant . Não conceda direitos excessivos aos usuários usando grant ALL on *. ... . Isso seria para todos banco de dados no sistema. Basta ler o manual e menos é mais.

Às vezes, os administradores desejam conceder acesso a apenas um punhado de tabelas em um banco de dados (nem todas as tabelas nele) para um login. O manual é uma leitura obrigatória sobre isso.

E uma última coisa. 'drew_saturday'@'%' é um login diferente de 'drew_saturday'@'NOT-local' (emprestado do seu título). São logins diferentes com direitos diferentes. Esse é o ponto da primeira coisa que escrevi lá em cima.