Como conceder permissões de acesso remoto ao servidor mysql para o usuário?


118

Se eu fizer SHOW GRANTSno meu banco de dados mysql, recebo

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

Se não me engano, root@localhostsignifica que o usuário só rootpode acessar o servidor de localhost. Como digo ao MySQL para conceder rootpermissão para acessar este servidor mysql de todas as outras máquinas (na mesma rede) também?


6
A mudança simples localhostpara %concederá acesso root à rede pública. Não se esqueça deflush privileges;

6
Adicionar root @% expõe você a muitos riscos e não deve ser feito. Eu sei que este é um post antigo, mas esse aviso deveria estar aqui. A conta root é a primeira conta visada pelos invasores, e root @ '%' significa que o usuário root pode se conectar à sua conta MySQL de qualquer lugar que desejar. Há muito a ser abordado nos comentários, mas você deve tentar remover o máximo possível de usuários @ '%', e qualquer um que for declarado com isso deve ter privilégios muito limitados. Não importa o que aconteça, você definitivamente não deve adicionar root @ '%' e seus aplicativos também não devem esperar que essa conta esteja presente.
— Damon


Olá pessoal, devemos remover a string PASSWORD desse comando ... está causando um erro ... basta finalizar com IDENTIFICADO POR e depois a própria senha.
— Mário de Sá Vera

Respostas:


143

Isso concede acesso root com a mesma senha de qualquer máquina em *.example.com:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

Se a resolução de nomes não funcionar, você também pode conceder acesso por IP ou sub-rede:

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

GRANTDocumentos de sintaxe do MySQL .


15
Presumo ...TO 'root'@'%' IDENTIFIED...que concederia acesso de qualquer lugar?
— Aufwind

3
Executei o comando no mysql, mas SHOW GRANTSainda mostra o mesmo (como na minha pergunta). Eu até fiz FLUSH PRIVILGES. Há algo que eu sinto falta?
— Aufwind

@Aufwind, eu não esperava que você precisasse de mais nada FLUSH PRIVILEGES. Saia e volte a entrar, reinicie o serviço mysqld se você tiver acesso. Além disso, certifique-se de que a skip networkinglinha não esteja habilitada em seu, my.cnfembora isso não explicaria o fato de você SHOW GRANTSainda não ser o mesmo.
— Michael Berkowski

@Aufwind Caso contrário, você precisará perguntar em ServerFault.com.
— Michael Berkowski

10
Observe que IDENTIFIED BY PASSWORDé acompanhado por um número hexadecimal de 41 dígitos com hash. Use IDENTIFIED BY 'password'se quiser incluir a senha diretamente.
— Rainulf

94

Experimentar:

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

1
umm o que Pa55w0rdparece estúpido, não me diga que essa é a senha que você deseja criar. Para todos que tentam fazer o login no seu mysql?
— SSpoke de

23
É comumente usado para dar um espaço reservado para a senha, dizendo "coloque sua senha de leitura válida neste lugar".
— moshe beeri de

2
Este comando com a advertência usual de que você só deseja usá-lo para aplicativos onde a segurança não é uma preocupação, por exemplo, dev ou QA.
— einnocent de

se não estiver funcionando no mac, tente mudar 'root' @ '%' com 'root' @ 'localhost' ou / etc / hosts nome do computador ao qual você está concedendo privilégios.
— moshe beeri de

2
Não se esqueça de executá-lo após:FLUSH PRIVILEGES;
— dinamarquês de

44

Você precisa seguir alguns passos para se certificar de que primeiro o mysql e o usuário root estão acessíveis de fora:

  1. Desativar skip-networkingem my.cnf(ou seja /etc/mysql/my.cnf:)

  2. Verifique o valor de bind-addressin my.cnf, se estiver definido como 127.0.0.1, você pode alterá-lo 0.0.0.0para permitir o acesso de todos os IPs ou de qualquer ip a partir do qual você deseja se conectar.

  3. Conceda acesso remoto ao usuário root de qualquer ip (ou especifique seu ip em vez de %)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
  4. Reinicie o serviço mysql:

    sudo service mysql restart

Você também precisa abrir a porta 3306 do mysql do firewall, caso contrário os clientes remotos não se conectarão
— David Okwii

Apenas um aviso rápido no ponto 2 de @Khashayar: 0.0.0.0 significa qualquer endereço IPv4. * significa QUALQUER endereço, seja IPv4 ou IPv6.
— Gustavo Pinsard

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

*.* = DB.TABLE você pode restringir o usuário a um banco de dados específico e a uma tabela específica.

'root'@'%'você pode alterar o root com qualquer usuário que você criou e% é permitir todos os IPs. Você pode restringi-lo alterando% .168.1.1 etc. também.


Se isso não resolver, modifique também my.cnf ou my.ini e comente essas linhas

bind-address = 127.0.0.1para #bind-address = 127.0.0.1
e
skip-networkingpara#skip-networking

  • Reinicie o MySQL e repita as etapas acima novamente.

Raspberry Pi, encontrei a configuração de endereço de ligação em \etc\mysql\mariadb.conf.d\50-server.cnf


2
Apenas a resposta que explica a parte *.*e 'user'@'address'. Obrigado! :)
— Philipp

Conceder TUDO ativado . convida hackers a entrar.
— Rick James

é por isso que expliquei *. *
— Wasim A.

8

Essas concessões de SQL que os outros estão compartilhando funcionam. Se você ainda não conseguir acessar o banco de dados, é possível que você tenha apenas uma restrição de firewall para a porta. Depende do seu tipo de servidor (e de quaisquer roteadores entre eles) como abrir a conexão. Abra a porta TCP 3306 de entrada e dê a ela uma regra de acesso semelhante para máquinas externas (todos / sub-rede / IP único / etc.).


4

Abra o /etc/mysql/mysql.conf.d/mysqld.cnfarquivo e comente a seguinte linha:

#bind-address = 127.0.0.1

Trabalhando no Ubuntu 19.4
— Ngô Văn Thao

3

No meu caso, eu estava tentando me conectar a um servidor mysql remoto no sistema operacional cent. Depois de passar por várias soluções (conceder todos os privilégios, remover ligações de IP, habilitar a rede), o problema ainda não estava sendo resolvido.

Como descobri, enquanto procurava por várias soluções, me deparei com o iptables, o que me fez perceber que a porta 3306 do mysql não estava aceitando conexões.

Aqui está uma pequena observação sobre como verifiquei e resolvi esse problema.

  • Verificando se a porta está aceitando conexões:
telnet (ip do servidor mysql) [portNo]

- Adicionando regra de tabela de ip para permitir conexões na porta:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACEITAR

-Não recomendamos isso para ambiente de produção, mas se seus iptables não estiverem configurados corretamente, adicionar as regras pode não resolver o problema. Nesse caso, deve ser feito o seguinte:

serviço iptables parar

Espero que isto ajude.


3

Dois passos:

  1. configurar usuário com curinga:
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    adicione o seguinte:
    bind-address=0.0.0.0

reinicie o servidor, você não deverá ter nenhum problema para se conectar a ele.


Seguindo, obtendo "ERROR 1827 (HY000): O hash da senha não tem o formato esperado. Verifique se o algoritmo de senha correto está sendo usado com a função PASSWORD ()." Você poderia explicar o que estou entendendo de errado aqui?
— lampShadesDrifter

2

No mysql 8 e na versão posterior, você não pode adicionar um usuário concedendo privilégios. significa com esta consulta:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'type-root-password-here' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysql retornará este erro:

ERROR 1064 (42000): você tem um erro na sintaxe do SQL; verifique o manual que corresponde à versão do seu servidor MySQL para a sintaxe correta para usar próximo a 'IDENTIFICADA POR' senha escrita 'na linha 1

isso significa que você não tem um usuário root para% domain. então você precisa primeiro inserir o usuário e depois conceder privilégios como este:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.15 sec)

mysql> FLUSH PRIVILEGES;

Não se esqueça de substituir as senhas por senhas específicas.


0

Isso funcionou para mim. Mas havia um problema estranho que até eu tentei primeiro, aqueles que não afetou. Eu atualizei a página do phpmyadmin e de alguma forma a fiz funcionar.

Se você precisar acessar local-xampp-mysql. Você pode ir para xampp-shell -> abrindo o prompt de comando.

Então mysql -uroot -p --port = 3306 ou mysql -uroot -p (se houver senha definida). Depois disso, você pode conceder esses acessos a partir da página do shell do mysql (também pode funcionar em localhost / phpmyadmin).

Basta adicioná-los se alguém encontrar este tópico e tiver problemas para iniciantes.


0

Ubuntu 18.04

Instale e certifique-se de que o mysqld us esteja em execução.

Acesse o banco de dados e configure o usuário root:

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Edite as permissões do mysqld e reinicie:

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

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

De outra máquina, teste. A porta Obvs (3306) na máquina mysqld deve permitir a conexão da máquina de teste.

mysql -u root -p -h 123.456.789.666

Toda a "segurança" adicional do MySql não ajuda em nada a segurança, apenas complica e ofusca, agora é realmente mais fácil estragar tudo do que antigamente, onde você apenas usava uma senha muito longa.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.