Parece-me incapaz de recriar um usuário simples que excluí, mesmo como root no MySQL.
Meu caso: o usuário 'jack' existia antes, mas eu o apaguei do mysql.user para recriá-lo. Não vejo vestígios disso nessa tabela. Se eu executar este comando para outro nome de usuário aleatório, digamos 'jimmy', ele funcionará bem (exatamente como originalmente para 'jack').
O que eu fiz para corromper o usuário 'jack' e como posso desfazer essa corrupção para recriar 'jack' como um usuário válido para esta instalação do MySQL?
Veja o exemplo abaixo. (Obviamente, originalmente, havia muito tempo entre a criação de 'jack' e sua remoção.)
mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from user;
+------------------+-----------------+
| user | host |
+------------------+-----------------+
| root | 127.0.0.1 |
| debian-sys-maint | localhost |
| jack | localhost |
| root | localhost |
| root | russ-elite-book |
+------------------+-----------------+
5 rows in set (0.00 sec)
mysql> delete from user where user = 'jack';
Query OK, 1 row affected (0.00 sec)
mysql> select user,host from user;
+------------------+-----------------+
| user | host |
+------------------+-----------------+
| root | 127.0.0.1 |
| debian-sys-maint | localhost |
| root | localhost |
| root | russ-elite-book |
+------------------+-----------------+
4 rows in set (0.00 sec)
mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123';
ERROR 1396 (HY000): Operation CREATE USER failed for 'jack'@'localhost'
mysql> CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from user;
+------------------+-----------------+
| user | host |
+------------------+-----------------+
| root | 127.0.0.1 |
| debian-sys-maint | localhost |
| jimmy | localhost |
| root | localhost |
| root | russ-elite-book |
+------------------+-----------------+
5 rows in set (0.00 sec)
fonte
Sim, este bug está lá. No entanto, encontrei uma pequena solução alternativa.
Isso deve resolver isso. Supondo que desejamos criar o usuário admin @ localhost, estes seriam os comandos:
Felicidades
fonte
Esse bug está no bugs.mysql.com desde 2007 e esse tópico é basicamente apenas um papagaio de todas as respostas erradas até um ano atrás.
De acordo com a documentação do MySQL, comandos como
CREATE USER
,GRANT
,REVOKE
, eDROP USER
não requerem uma posteriorFLUSH PRIVILEGES
comando. É bem claro por que, se alguém lê os documentos. É porque alterar diretamente as tabelas do MySQL não recarrega as informações na memória; no entanto, a infinidade de soluções para esse bug afirma queFLUSH PRIVILEGES
é a resposta.Isso também pode nem ser um bug. É uma conspiração de documentação - os documentos variam em um local crítico de versão para versão.
13.7.1.2 Sintaxe DROP USER
...
...
Se você especificar apenas a parte do nome de usuário do nome da conta, será usada uma parte do nome do host de '%'.
DROP USER
como presente no MySQL 5.0.0 remove somente contas que não têm privilégios. No MySQL 5.0.2, ele foi modificado para remover os privilégios da conta também. Isso significa que o procedimento para remover uma conta depende da sua versão do MySQL.No MySQL 5.0.2, você pode remover uma conta e seus privilégios da seguinte maneira:
A instrução remove as linhas de privilégio da conta de todas as tabelas de concessão.
A única vez que recebo esse erro é quando o faço
DROP USER user
; como o documento sugere, mas o MySQL não trata o '%' como um curinga de maneira a eliminar todos os usuários em todos os hosts. Afinal, não é tão selvagem. Ou, às vezes, funciona quando exclui o usuário do host local e tenta excluir o usuário em%.É claro para mim que, quando tenta excluir o usuário em%, emite uma mensagem de erro e sai. Subseqüente
CREATE USER
em localhost falhará porque o usuário localhost nunca foi excluído. Parece não haver necessidade de perder tempo cavando nas tabelas de subsídios à procura de fantasmas, como sugeriu um pôster.Vejo 7 votos a favor:
Que é interpretado como
DROP USER 'jack@localhost'@'%';
# erradoNa verdade, parece haver um bug real que gera a mesma mensagem de erro, mas tem a ver com o primeiro usuário criado (após a instalação de um novo servidor mysql) ser descartado. Se esse bug foi corrigido, não sei; mas não me lembro disso acontecendo ultimamente e estou com a versão 5.5.27 no momento.
fonte
mariadb-server-5.5.60-1.el7_5.x86_64
Se você usar uma
DELETE
instrução namysql.user
tabela na tentativa de remover um usuário e tentar restabelecer o usuárioCREATE USER
, receberá um1396
erro. Livre-se desse erro executandoDROP USER 'username'@'host';
(Você receberá 1396 erros se tentar recriar o conector)
(Saia dessa situação executando
DROP USER
)(Suponho
FLUSH PRIVILEGES
que não pode machucar, mas definitivamente derrube o usuário primeiro.)fonte
Você não deve excluir manualmente os usuários dessa maneira. O MySQL possui
REVOKE
sintaxe para remover privilégios eDROP USER
excluí-los:É melhor usar as ferramentas fornecidas, em vez de mexer no fundo.
fonte
flush privileges
em primeiro lugar? Os documentos oficiais MySQL fazer conversa sobre coisas comodelete from user where user = 'jack';
eflush privileges
. Por que você diz que eles não fazem parte das ferramentas fornecidas?'jack@localhost'
provavelmente deveria estar'jack'@'localhost'
aqui.Largue o usuário, liberte os privilégios; então, crie o usuário. Isso funciona!
fonte
tente
delete from mysql.db where user = 'jack'
e crie um usuáriofonte
No MySQL 5.6, o uso
Drop user userid;
não funciona. Use:Drop user 'userid'@'localhost';
e / ouDrop user 'userid'@'%';
. Dessa maneira, pude descartar o usuário e recriá-lo.fonte
fonte
Verifique se está
ou
fonte
Se você deseja excluir um usuário com sql, você precisa apagar os dados relacionados nestas tabelas:
columns_priv
,db
,procs_priv
,tables_priv
. Então executeflush privileges;
fonte
Curiosamente, o ambiente de trabalho MySQL resolveu isso para mim. Na guia Administração -> Usuários e Privilégios, o usuário foi listado com um erro. O uso da opção de exclusão resolveu o problema.
fonte
Uma solução simples para esse problema. Como o comando "delete" remove apenas o registro do usuário na tabela "user" do banco de dados "mysql", poderíamos adicioná-lo novamente e, em seguida, excluir o usuário completamente. Então você pode criar um usuário com o mesmo nome.
Etapa 1. encontre o formato de registro da tabela de usuários no banco de dados mysql
Etapa 2. De acordo com as colunas mostradas na etapa 1, crie um registro fictício com o nome do usuário. Insira-o na tabela, por exemplo, lembre-se de substituir o "nome de usuário" pelo seu nome de usuário.
Nota: às vezes você pode encontrar problemas ao inserir, basta alterar os dados para fazê-lo funcionar.
Etapa 3. Solte o usuário.
Agora você pode criar usuários com o mesmo nome.
fonte
Este post MySQL ERROR 1045 (28000): Acesso negado para o usuário 'conta' @ 'localhost' (using password: YES) é útil. Às vezes, há um usuário anônimo '' @ 'localhost' ou '' @ '127.0.0.1'. Então, para resolver o problema,
primeiro solte o usuário cujo 'criar usuário' falhou.
Crie um novo usuário.
Conceda os privilégios necessários para o novo usuário.
Privilégios de liberação.
fonte
Eu tive o mesmo erro. Mas comande "DESCARREGAR PRIVILÉGIOS"; não ajudou. Eu fiz assim:
fonte
O servidor MySQL está sendo executado com a opção --skip-grant-tables, portanto, não pode executar esta instrução
fonte
Sei que isso é antigo, mas, como é o primeiro resultado no Google, achei que deveria adicionar minha solução. No meu caso, a remoção do usuário funcionou bem, mas a recriação do usuário me deu um "ERRO 2013 (HY000): conexão perdida com o servidor MySQL durante a consulta" e "ERRO 2006 (HY000): o servidor MySQL desapareceu". Eu tentei os privilégios de liberação -> solte a solução do usuário, mas ainda tive o mesmo erro.
No meu caso, o erro ocorreu devido a uma atualização do mysql de 5.1 -> 5.6. Vendo os logs de erro, notei que ele dizia executar mysql_upgrade. Fiz isso e minha declaração de usuário de criação funcionou bem!
fonte
Recentemente, recebi esse erro.
O que funcionou para mim foi checar no 'mysql workbench' Users and Privileges 'e perceber que o usuário ainda existia.
Depois de excluí-lo, pude recriar o usuário.
fonte
mysql> DELETE FROM mysql.db WHERE user = 'jack'
Reinicie o servidor:
# mysql.server restart
Então faça seu
CREATE USER
comando.fonte
CREATE
depoisDELETE
.Eu enfrentei esse problema hoje e o resolvi executando as seguintes etapas:
1) inserir manualmente esse usuário problemático, fornecendo valor dos campos obrigatórios
mysql.user
2)
3) A.
4) A.
B.
Espero que isto ajude.
fonte
Apenas exclua os dados relacionados ao usuário do mysql.db (talvez também de outras tabelas) e depois recrie os dois.
fonte
Também enfrentei o mesmo problema, depois de algumas pesquisas, encontrei uma solução que funcionou para mim. Espero que ajude você. Como você já criou usuários, agora tente fazer um
FLUSH PRIVILEGES
no seu console Mysql. Este problema já está na publicação de erros do MySQL. Você também pode verificar este. Agora, após a liberação, você pode criar um novo usuário. siga as etapas abaixo:Agora você pode ver o console do Mysql.
Em vez do nome de usuário, você pode colocar o nome de usuário desejado. Se você estiver executando o Mysql em sua máquina local, digite "localhost" em vez do host; caso contrário, forneça o nome do servidor que você deseja acessar.
Ex: CRIAR USUÁRIO smruti @ localhost IDENTIFICADO por 'hello';
Agora novo usuário é criado. Se você deseja dar todo o acesso, digite
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
Agora você pode sair do MySQL digitando
\q
.Agora, faça o login novamentemysql -u newusername -p
e pressione Enter. Você pode ver tudo.Espero que isto ajude.
fonte