conceder acesso remoto ao banco de dados MySQL a partir de qualquer endereço IP

280

Estou ciente deste comando:

GRANT ALL PRIVILEGES
ON database.*
TO 'user'@'yourremotehost'
IDENTIFIED BY 'newpassword';

Mas só me permite conceder um endereço IP específico para acessar esse banco de dados MySQL remoto. E se eu quiser, para que qualquer host remoto possa acessar esse banco de dados MySQL? Como faço isso? Basicamente, estou tornando esse banco de dados público para que todos possam acessá-lo.

adit
fonte
1
Antes de fazer isso, considere as implicações de segurança
e18r
7
nem todo sistema é um sistema de produção. algumas pessoas precisam disso para o desenvolvimento.
Conrad Jones

Respostas:

272
TO 'user'@'%'

% é um curinga - você também pode fazer '%.domain.com'ou '%.123.123.123'e coisas assim, se precisar.

Ariel
fonte
@ Kristopolous Há muitas coisas que podem causar isso. Este comando é sobre acesso remoto (duas máquinas diferentes). Se não é isso que você está fazendo, esse não é o comando certo. Você ainda precisa de uma senha correta e outras coisas.
Ariel #
11
Você precisa usar "privilégios de liberação"; para que as alterações entrem em vigor
Didier Sampaolo 19/11/2015
O truque ao conectar-se a uma instância db em execução na mesma instância do SO (por exemplo, sua máquina de desenvolvimento), é passar o -h my_machine_nameparâmetro Isso engana o cliente para identificá-lo como 'user'@my_machine_name.example.com, e não 'user'@localhost. Dessa forma, você não precisa criar e manter contas e concessões duplas para localhostacesso a ambos e à rede. E, claro, não se esqueça mysqldé obrigado a 0.0.0.0vs. 127.0.0.1.
Charlie Reitzel
173

Ativar acesso remoto (Grant) Início / Tutoriais / Mysql / Ativar acesso remoto (Grant) Se você tentar se conectar ao servidor mysql a partir de uma máquina remota, e encontrar um erro como o descrito abaixo, este artigo é para você.

ERRO 1130 (HY000): O host '1.2.3.4' não tem permissão para se conectar a este servidor MySQL

Alterar configuração do mysql

Comece com a edição do arquivo de configuração do mysql

vim /etc/mysql/my.cnf

Comente as seguintes linhas.

#bind-address           = 127.0.0.1
#skip-networking

Se você não encontrar a linha de ignorar rede, adicione-a e comente-a.

Reinicie o servidor mysql.

~ /etc/init.d/mysql restart

Alterar privilégio GRANT

Você pode se surpreender ao ver, mesmo após as alterações acima, que você não está obtendo acesso remoto ou acesso, mas não é capaz de todos os bancos de dados.

Por padrão, o nome de usuário e a senha do mysql que você está usando têm permissão para acessar o servidor mysql localmente. Então, precisa atualizar privilégios.

Execute um comando como abaixo para acessar de todas as máquinas. (Substitua USERNAMEe PASSWORDpor suas credenciais.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Execute um comando como abaixo para dar acesso a um IP específico. (Substitua USERNAMEe PASSWORDpor suas credenciais.)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

Você pode substituir o 1.2.3.4 pelo seu IP. Você pode executar o comando acima várias vezes para conceder acesso a partir de vários IPs.

Você também pode especificar um USERNAME&PASSWORD para acesso remoto.

Você pode verificar o resultado final:

SELECT * from information_schema.user_privileges where grantee like "'USERNAME'%";

Por fim, também pode ser necessário executar:

mysql> FLUSH PRIVILEGES;

Conexão de teste

Do terminal / linha de comando:

mysql -h HOST -u USERNAME -pPASSWORD

Se você obtiver um shell mysql, não se esqueça de executar os bancos de dados show; para verificar se você possui privilégios corretos em máquinas remotas.

Dica de bônus: revogar acesso

Se você acidentalmente conceder acesso a um usuário, é melhor ter a opção de revogação à mão.

A seguir, revogará todas as opções para USERNAME de todas as máquinas:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'%';
Following will revoke all options for USERNAME from particular IP:

mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'USERNAME'@'1.2.3.4';
Its better to check information_schema.user_privileges table after running REVOKE command.

Se você vir o privilégio USAGE após executar o comando REVOKE, tudo bem. É tão bom quanto nenhum privilégio. Não tenho certeza se pode ser revogado.

Siddharth Kumar
fonte
7
Observe que eu tive que alterar o /etc/mysql/mysql.conf.d/mysqld.cnfarquivo em vez de /etc/mysql/my.cnfcomentar a bind-addressparte. A #skip-networkinglinha está ausente e não deve haver efeito de adicionar e comentar a linha.
Pawan
1
No MariaDB 10.1.26, o arquivo de configuração é/etc/mysql/mariadb.conf.d/50-server.cnf
Kwadz
Se você fez tudo o que precede e ainda não conseguiu se conectar, verifique as configurações do firewall, pode estar bloqueando a porta 3306ou a porta que você configurou
18/03/19
37

Assumindo que a etapa acima foi concluída e a porta 3306 do MySql esteja livre para ser acessada remotamente; Não se esqueça de vincular o endereço IP público no arquivo de configuração do mysql.

Por exemplo, no meu servidor ubuntu:

#nano /etc/mysql/my.cnf

No arquivo, procure o bloco de seção [mysqld] e adicione o novo endereço de ligação, neste exemplo é 192.168.0.116. Seria algo como isto

......    
.....    
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.

bind-address        = 127.0.0.1    
bind-address        = 192.168.0.116

.....    
......

você pode remover a ligação localhost (127.0.0.1) se desejar, mas precisará fornecer um endereço IP especificamente para acessar o servidor na máquina local.

Então o último passo é reiniciar o servidor MySql (no ubuntu)

stop mysql

start mysql

ou #/etc/init.d/mysql restartpara outros sistemas

Agora, o banco de dados MySQL pode ser acessado remotamente por:

mysql -u username -h 192.168.0.116 -p
Waqas
fonte
/etc/init.d/mysql reloaddeveria bastar #
Lorenz Lo Sauer
Acabei de fazer isso e não consegui me conectar ao servidor mysql remotamente. Tentei comentar os endereços de ligação e funcionou. Eu também tentei fazer login no servidor com o mysql -u <usuário> -p sem especificar o host e funcionou; portanto, parece que "você pode remover a ligação localhost (127.0.0.1) se quiser, mas precisará especificamente forneça um endereço IP para acessar o servidor na máquina local ". não está correto. (ubuntu 12.04 LTS mysql servidor Ver 14,14 Distrib 5.5.34)
Programster
5
A bind-addressdiretiva determina o endereço IP em que o servidor mysql escuta; não os endereços IP dos quais o servidor aceita conexões.
GoZoner
1
Depois de seguir cada passo, não funciona. Eu recebo um erro ao comentar bind-addresso localhost ou o endereço remotehost. mysql.serviceJob for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
220017 baermathias
É possível fornecer um endereço como abc.abc:1234 em vez de 192.168.0.116?
bielas
26

Para quem se atrapalhou com isso, aqui está como consegui conceder os privilégios, espero que ajude alguém

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY
'yourRootPassword';

Como observado, %é um curinga e isso permitirá que qualquer endereço IP se conecte ao seu banco de dados. A suposição que faço aqui é que, quando você se conectar, terá um usuário chamado root(que é o padrão). Alimente a senha root e você estará pronto. Observe que não tenho aspas simples ( ') ao redor da raiz do usuário.

Dev
fonte
Por que é importante remover as aspas simples do usuário? Por que isso difere de outras respostas (e do manual)?
DMCoding 31/10/16
26

As alterações no arquivo de configuração são necessárias para ativar as conexões via host local.

Para conectar-se através de IPs remotos, entre como um usuário "root" e execute as consultas abaixo no mysql.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Isso criará um novo usuário acessível no host local e também nos IPs remotos.

Comente também a linha abaixo do seu arquivo my.cnf localizado em /etc/mysql/my.cnf

bind-address = 127.0.0.1

Reinicie seu mysql usando

sudo service mysql restart

Agora você deve conseguir se conectar remotamente ao seu mysql.

harishannam
fonte
2
Isso não responde à pergunta.
charris
1
@ChristopheHarris, por que você se sente assim? A resposta fornece instruções passo a passo sobre como criar um novo usuário no MySQL que permita tanto o host local quanto o acesso remoto ao banco de dados usando esse usuário. Você pode explicar?
harishannam
1
Não funciona para mim. Ainda tem o mesmo erro. Não importa se eu o testo com root ou com um novo usuário: Não é possível conectar-se ao servidor MySQL em 'xxx.xxx.xxx.xxx' ([Errno 61] Conexão recusada) '
baermathias
21

Use este comando:

GRANT ALL ON yourdatabasename.* TO root@'%' IDENTIFIED BY 'yourRootPassword';

Então:

FLUSH PRIVILEGES; 

Em seguida, comente a linha abaixo no arquivo "/etc/mysql/mysql.conf.d/mysqld.cnf" (é necessário!):

bind-address = 127.0.0.1 

Funciona para mim!

Tomasz Czechowski
fonte
Muito bom. Importante a concessão. Caso contrário, muitos erros para solicitações como #your-password-does-not-satisfy-the-current-policy-requirements
Alejandro Teixeira Muñoz
21

Para poder se conectar com seu usuário a partir de qualquer endereço IP, faça o seguinte:

Permita que o servidor mysql aceite conexões remotas. Para este arquivo mysqld.conf aberto:

sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

Procure a linha que começa com "endereço de ligação" e defina seu valor como 0.0.0.0

bind-address                    = 0.0.0.0

e, finalmente, salve o arquivo.

Nota: Se você estiver executando o MySQL 8+, a bind-addressdiretiva não estará no mysqld.cnfarquivo por padrão. Nesse caso, adicione a diretiva na parte inferior do arquivo /etc/mysql/mysql.conf.d/mysqld.cnf.

Agora reinicie o servidor mysql, com systemdou use o servicecomando mais antigo . Isso depende do seu sistema operacional:

sudo systemctl restart mysql # for ubuntu    
sudo systemctl restart mysqld.service # for debian

Finalmente, o servidor mysql agora pode aceitar conexões remotas.

Agora precisamos criar um usuário e conceder permissão, para que possamos logar com esse usuário remotamente.

Conecte-se ao banco de dados MySQL como root ou qualquer outro usuário com privilégio de root.

mysql -u root -p

agora crie o usuário desejado no localhost e no curinga '%' e conceda permissões em todos os bancos de dados como tal.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

Então,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

E, finalmente, não se esqueça de liberar privilégios

FLUSH PRIVILEGES;

Nota: Se você configurou um firewall no servidor de banco de dados, também será necessário abrir a porta 3306padrão do MySQL para permitir o tráfego no MySQL.

Espero que isto ajude ;)

Imtiaz Shakil Siddique
fonte
2
sudo systemctl restart mysqld.service é para debian, eu tive que usar o sudo systemctl restart mysql.service é para ubuntu
ani0904071
Atualizei minha resposta e adicionei o comando mysql restart para ambas as distros. Obrigado @ ani0904071
Imtiaz Shakil Siddique
17

Execute o seguinte:

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to root@'ipaddress' IDENTIFIED BY 'mysql root password';     
mysql> FLUSH PRIVILEGES;     
mysql> exit

Em seguida, tente uma conexão a partir do endereço IP especificado:

mysql -h address-of-remove-server -u root -p   

Você deve conseguir se conectar.

akhil.ov
fonte
15

Você pode reduzir o problema do MariaDB através deste comando :

Nota:

GRANT ALL ON *.* to root@'%' IDENTIFIED BY 'mysql root password';

%é um curinga. Nesse caso, refere-se a todos os endereços IP.

未来 陆家嘴 顶尖 的 投资 人
fonte
3
no mysql, o que você precisa fazer é (1) .change my.cnf content (2) .grant usuário remoto (3) lidar com seu firewall para escutar a porta 3306.
未来陆家嘴顶尖的投资人
Você salvou meu dia. Aprecie!
Almett
8
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
user3846464
fonte
7

Para acessar remotamente o servidor Mysql do banco de dados 8:

CREATE USER 'root'@'%' IDENTIFIED BY 'Pswword@123';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;
Anil Rana
fonte
5
  • INICIE MYSQL usando o usuário administrador
    • mysql -u admin-user -p (ENTRAR SENHA NO PROMPT)
  • Crie um novo usuário:
    • CRIAR USUÁRIO 'newuser' @ '%' IDENTIFICADO POR 'senha'; (% -> qualquer host)
  • Conceder privilégios:
    • GRANT SELECT, DELETE, INSERT, UPDATE ON db_name. * TO 'newuser' @ '%';
    • PRIVILÉGIOS DE LAVAGEM;

Se você estiver executando a instância do EC2, não se esqueça de adicionar as regras de entrada no grupo de segurança com o MYSQL / Aurura.

Moh .S
fonte
5

Editar arquivo:

/etc/mysql/percona-server.cnf

Anexe o código abaixo no arquivo.

[mysqld] bind-address = 0.0.0.0

Crie usuário para acesso remoto.

$ mysql -u root -p      
mysql> GRANT ALL ON *.* to snippetbucketdotcom@'%' IDENTIFIED BY 'tejastank';   
mysql> FLUSH PRIVILEGES;    
mysql> exit

Todo servidor linux funciona,

Para MSWin c: \ Localizar local de localização \ caminho do arquivo

Tejas Tank
fonte
[mysqld] necessidade de adicionar no arquivo, o resto não funciona corretamente
Tejas tanque
3

Basta criar o usuário para algum banco de dados como

GRANT ALL PRIVILEGES ON <database_name>.* TO '<username>'@'%' IDENTIFIED BY '<password>'

Então vá para

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnfe mude a linha bind-address = 127.0.0.1parabind-address = 0.0.0.0

Depois disso, você pode se conectar a esse banco de dados a partir de qualquer IP.

Diogo Mendes
fonte
3

Abra o seu mysql consolee execute o seguinte comando (digite o nome do banco de dados, nome de usuário e senha):

CONCEDE TUDO EM seu nome de banco de dados. * PARA admin @ '%' IDENTIFICADO POR 'yourRootPassword';

Em seguida, execute:

PRIVILÉGIOS DE LAVAGEM;

Abra a linha de comando e abra o arquivo /etc/mysql/mysql.conf.d/mysqld.cnfusando qualquer editor com root privileges.

Por exemplo:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Em seguida, comente a linha abaixo:

endereço de ligação = 127.0.0.1

Reinicie o mysql para refletir as alterações usando o comando:

sudo service mysql restart

Aproveitar ;)

Usman Yousaf
fonte
2

Você precisa alterar o arquivo de configuração do mysql:

Comece com a edição do arquivo de configuração do mysql

vim /etc/mysql/my.cnf

adicionar:

bind-address = 0.0.0.0
bhushan pardhi
fonte
0

Nos painéis de sites como o cPanel, você pode adicionar um único %(sinal de porcentagem) nos nomes de host permitidos para acessar seu banco de dados MySQL.

Ao adicionar um único, %você pode acessar seu banco de dados a partir de qualquer IP ou site, mesmo a partir de aplicativos de desktop.

Muhammad Saqib
fonte
por favor, não se referem a uma coisa como cPanel quando uma consulta em linha reta é apresentada, isso nunca irá mostrar um resultado de trabalho para mais ninguém
Tobias Hagenbeek
@TobiasHagenbeek Obrigado pelo seu feedback. Este método / truque não foi inventado por mim (é comum na internet). Mas sou um dos testadores desse método e achei que é o método mais fácil e prático, por isso o publiquei aqui. Eu sei que existem alguns riscos de segurança nesse método que podem ser negligenciados.
Muhammad Saqib
0

Por exemplo, no meu CentOS

sudo gedit /etc/mysql/my.cnf

comente as seguintes linhas

# bind-address = 127.0.0.1

então

serviço sudo mysqld restart

zawhtut
fonte
0

Se você deseja conceder acesso remoto ao seu banco de dados a partir de qualquer endereço IP, execute o comando mysql e depois execute o seguinte comando.

GRANT ALL PRIVILEGES ON *.*
TO 'root'@'%' 
IDENTIFIED BY 'password' 
WITH GRANT OPTION;
Atul6.Singh
fonte
0

o que funcionou no Ubuntu está concedendo todos os privilégios ao usuário:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;

e definindo o endereço de ligação em /etc/mysql/mysql.conf.d/mysqld.cnf:

bind-address            = 0.0.0.0

reiniciando o daemon mysql:

service mysql restart
Miguel Mota
fonte
-7

Você pode desativar toda a segurança editando /etc/my.cnf:

skip-grant-tables
Danyial Shahid Ali
fonte
isso remove todos os requisitos de senha
kristopolous
5
Observe que não é aconselhável ter essa opção ativada em um ambiente de produção, pois isso permite que qualquer pessoa se conecte sem uma senha!
AStopher
no entanto, isso é ideal para um ambiente de desenvolvimento #
DMCoding 31/10
Isso permite que as pessoas invadam seu banco de dados sem usar uma senha.
MilkyWay90
@DanielJames mesmo para ambiente de desenvolvimento é uma idéia terrível
Dragas