como faço para liberar TUDO em relação aos privilégios no mysql

1

Eu tenho o mysql rodando no meu sistema em casa. Eu estava jogando com acesso (tentando permitir o acesso de algo diferente de localhost) e sendo um noob / perdedor de banco de dados completo se bloqueado meu usuário de raiz.

A única maneira de entrar no momento é iniciar um processo mysqld_safe com as tabelas --skip-grant & opção (descoberta após googling).

Eu tentei UPDATE User set Host = 'localhost' onde usuário = 'root'; e isso não parece funcionar.

Existe uma maneira de "começar de novo"? Eu ainda gostaria de manter os dados, portanto, não quero fazer uma reinstalação completa.

Não estou preocupado com a segurança, pois é apenas a minha caixa local (por exemplo, correção rápida e suja). Apenas procurando por uma opção "reset" ou algo assim. Eu sou um hacker sql, então não tenho medo de linha de comando, só não tenho idéia do que estou fazendo. Socorro! : - (

    
por David Archer 29.06.2009 / 14:16

3 respostas

1

Durante o --skip-grant-tables, você não pode usar as instruções GRANT ou REVOKE, então você não pode usar as funções internas para criar / remover usuários.

Você quer essencialmente criar / editar uma linha na tabela mysql.user. Para fazer isso sozinho:

  • Use o mysqldump em outra máquina para pegar a linha do usuário root do mysql.user. Em seguida, execute o comando de consulta INSERT resultante no banco de dados "mysql". Isso copiará efetivamente as permissões globais para esse usuário, incluindo sua senha. Lembre-se de executar os PRIVILÉGIOS FLUSH; depois de inserir a linha.
  • Como alternativa, escolhi uma linha de acesso ao estilo raiz para você. Para um servidor MySQL 5, as seguintes consultas criarão um usuário de acesso completo com nome de usuário "toor", senha "mypassword":

Link Pastebin (editar: a consulta estava quebrando a interface SF)

O usuário criado tem acesso somente a partir do host local. Boa sorte!

    
por 29.06.2009 / 14:49
1

Você pode usar o comando REVOKE para remover permissões, mas você pode querer verificar as tabelas user, db, tables_priv e columns_priv no banco de dados mysql depois de executá-lo para ter certeza de que ele fez o que você esperava Faz. Se não, você pode excluir todas as linhas nas tabelas que correspondem ao que você está procurando. Apenas certifique-se de sempre ter uma linha no usuário que tenha:

             Host: localhost
             User: root
         password: 

Você pode ter uma senha lá. Sem uma senha, você pode efetuar login no banco de dados como raiz na máquina local. Obviamente, isso não é ideal se houver outras pessoas que possam fazer login no servidor.

Uma coisa que você deve se lembrar é que sempre que modificar as permissões, seja usando GRANT / REVOKE ou modificando as tabelas você mesmo, é para executar

mysql> FLUSH PRIVILEGES;

para fazer o mysql tomar conhecimento das mudanças.

    
por 29.06.2009 / 14:32
0

A maneira mais rápida que já vi para resolver o problema da senha perdida é com o opção de configuração init-file :

  1. Para o seu /etc/my.cnf (no Debian: /etc/mysql/my.cnf) adicione:
    [mysqld] #this should already be here, add the following line after it
    init-file = /tmp/init.sql
  2. Coloque uma declaração de concessão nesse arquivo:
    cat <<EOF>/tmp/init.sql
    grant all privileges on *.* to 'temp'@'localhost' identified by 'temp' with grant option;
    EOF
  3. Reinicie o mysql: sudo /etc/init.d/mysql restart
  4. Remova a linha criada na etapa 1 e o arquivo criado na etapa 2.

Agora você pode fazer login e fazer correções com o GRANT adequado, REVOKE e SHOW SUBSTITUIÇÕES PARA declarações via: mysql -utemp -ptemp

Esta é uma melhoria para a sugestão que o próprio MySQL dá aqui .

    
por 29.06.2009 / 21:05