Eu tenho um novo centos 6.2 com mysql em 5.1.52. Então eu vi dois nomes de usuário vazios e os apaguei, então vi 3 usuários root deletados e criei um assim CREATE USER 'root'@'%' IDENTIFIED BY ' ** ';. Mas quando entro como root no meu phpMyAdmin agora não consigo criar um novo banco de dados. O que eu fiz de errado aqui?
relate perguntas
-
Existem ferramentas de benchmarking do MySQL? [fechado]
-
Onde posso encontrar o log lento do mysql?
-
Como posso otimizar um mysqldump de um banco de dados grande?
-
Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?
-
Como um grupo pode rastrear alterações no esquema do banco de dados?
Seu problema decorre da exclusão de todos os usuários raiz primeiro.
Quando você cria um usuário usando
CREATE USER
, ele simplesmente insere um rwo na tabela mysql.user. Você precisava emitir este comando logo em seguida:Se você não emitir GRANT imediatamente, todos os Privilégios db serão desativados (ou seja, na tabela mysql.user, update_priv='N', delete_priv='N', etc.)
Se você tiver root@localhost e ainda não conseguir acessá-lo, talvez seja necessário invadi-lo assim:
PASSO 01) Reinicie o mysql assim
PASSO 02) Digite mysql na linha de comando (sem senha necessária neste momento)
PASSO 03) Faça
desc mysql.user
Você terá que ajustar cada privilégio, pois o comando GRANT não funciona se
skip-grant-tables
estiver ativadoExemplo
Para o MySQL 5.1, você pode inserir um novo root@localhost cuja senha seja 'whatever' da seguinte forma:
PASSO 04) reinicie o mysql
Você pode fazer login como root@localhost a partir daqui com a senha 'whatever'.
Sinta-se à vontade para substituir o que quiser pela senha que desejar.
De uma chance !!!
ATUALIZAÇÃO 2012-04-10 11:28 EDT
Ao fazer a nova instalação, você verá usuários anônimos na tabela mysql.user. Os usuários anônimos são os usuários que estão em branco. APAGUE-OS IMEDIATAMENTE POIS ISSO PODE APRESENTAR UM RISCO DE SEGURANÇA !!!
Aqui está o porquê: Usuários anônimos têm acesso a qualquer banco de dados cujas 4 primeiras letras sejam
test
. Você pode executar muitas coisas intensivas em CRUD em um banco de dados de teste. Você também pode querer renomear os bancos de dados de teste para algo completamente diferente. Por favor, leia esses links porque já tratei desse problema antes no DBA StackExchange.Não é possível remover usuário anônimo de mysql.user
Este é um conjunto normal de privilégios do MySQL?
Para confirmar a necessidade de fazer isso, observe o que o MySQL 5.0 Certification Study Guide diz na página 498, parágrafo 6 em seus marcadores:
ATUALIZAÇÃO 2012-04-10 12:50 EDT
Em uma nova instalação, você pode apenas executar mysql_secure_installation . Se você já carregou seus usuários, você mesmo pode executar os marcadores (suponha que você queira configurá-los para myckrit. Apenas execute estes comandos se não tiver certeza do que mysql_secure_installation está fazendo):
Para recuperar o acesso root, pare seu servidor e inicie-o com a
--skip-grant-tables
opção.Se o phpMyAdmin permitir que você faça login (sem senha), ou se você tiver acesso à linha de comando, conecte e emita (
mysql -uroot -h127.0.0.1
):Saia e conecte-se como root@localhost (
mysql -uroot -hlocalhost -p
) digite sua senha eVocê não quer root em nenhum host! Além disso, você desejará fazer isso o mais rápido possível se ainda tiver a rede habilitada.
Você precisa conceder os privilégios apropriados para a conta root, não apenas criá-la. O MySQL não sabe por conta própria que você deseja uma conta de Superusuário.
Você deve usar a
@'host'
opção apropriada apropriada para sua situação. Se você não precisa administrar remotamente esse banco de dados, deve usar@'localhost'
.ATUALIZAR
Caso você não tenha privilégios suficientes para conceder novos privilégios, tente algumas opções.
Tente seguir as instruções de Rolando, mas substitua algumas etapas. Parece que ele tem instruções para o Windows mostrando como reiniciar o serviço MySQL. Em vez da etapa 1 de Rolando, faça o seguinte: Pare o MySQL. Em seguida, inicie o MySQL com essas opções
/usr/bin/mysqld_safe --skip-grant-tables --skip-networking --defaults-file=/etc/my.cnf &> /dev/null &
(substitua o caminho e os nomes dos arquivos conforme necessário para o seu ambiente).Substitua o diretório mysql e todos os arquivos pelos mesmos arquivos de outra instância do MySQL onde você tenha privilégios totais de superusuário - o diretório que contém as tabelas do sistema MySQL, como user, host, db, tables_priv, etc. Antes de fazer isso, certifique-se de fazer backup de seu banco de dados se contiver dados importantes. Você poderia substituir o diretório mysql de uma cópia de backup, se tiver uma.