Wydaje mi się, że nie mogę odtworzyć prostego użytkownika, który usunąłem, nawet jako root w MySQL.
Mój przypadek: użytkownik „jack” istniał wcześniej, ale usunąłem go z mysql.user, aby go odtworzyć. Nie widzę w tym śladu. Jeśli wykonam to polecenie dla innej losowej nazwy użytkownika, powiedzmy „Jimmy”, zadziała to dobrze (tak jak pierwotnie dla „Jacka”).
Co zrobiłem, aby zepsuć użytkownika „jack” i jak mogę cofnąć to uszkodzenie, aby ponownie utworzyć „jack” jako prawidłowego użytkownika dla tej instalacji MySQL?
Zobacz przykład poniżej. (Oczywiście początkowo istniało dużo czasu między stworzeniem „Jacka” a jego usunięciem).
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)
źródło
tak, ten błąd istnieje. Znalazłem jednak małe obejście.
To powinno to rozwiązać. Zakładając, że chcemy utworzyć użytkownika admin @ localhost, będą to następujące polecenia:
Twoje zdrowie
źródło
Ten błąd pojawia się na stronie bugs.mysql.com od 2007 roku, a ten wątek jest głównie papugowaniem wszystkich tych błędnych odpowiedzi nawet jeszcze rok temu.
Zgodnie z dokumentacją MySQL polecenia podoba
CREATE USER
,GRANT
,REVOKE
, iDROP USER
nie wymagają późniejszegoFLUSH PRIVILEGES
polecenia. Jest całkiem jasne, dlaczego, jeśli ktoś czyta dokumenty. Jest tak, ponieważ bezpośrednia modyfikacja tabel MySQL nie powoduje ponownego załadowania informacji do pamięci; ale mnóstwo rozwiązań tego błędu twierdzi, żeFLUSH PRIVILEGES
jest to odpowiedź.To też może nie być błąd. Jest to spisek dokumentacyjny - dokumenty różnią się w jednym kluczowym miejscu w zależności od wersji.
13.7.1.2. Składnia DROP USER
...
...
Jeśli podasz tylko część nazwy użytkownika dla nazwy konta, używana jest część nazwy hosta „%”.
DROP USER
tak jak w MySQL 5.0.0 usuwa tylko konta, które nie mają uprawnień. W MySQL 5.0.2 został zmodyfikowany, aby usunąć również uprawnienia do konta. Oznacza to, że procedura usuwania konta zależy od wersji MySQL.Począwszy od MySQL 5.0.2, możesz usunąć konto i jego uprawnienia w następujący sposób:
Instrukcja usuwa wiersze uprawnień dla konta ze wszystkich tabel grantu.
Ten błąd pojawia się tylko wtedy, gdy to robię
DROP USER user
; jak sugeruje dokument, ale MySQL nie traktuje „%” jako symbolu wieloznacznego w sposób, który upuściłby wszystkich użytkowników na wszystkich hostach. W końcu nie jest tak dzikie. Lub może się zdarzyć, że czasami działa, gdy usuwa użytkownika hosta lokalnego, a następnie próbuje usunąć ten na%.Jest dla mnie jasne, że kiedy próbuje usunąć użytkownika na%, wyświetla komunikat o błędzie i kończy pracę. Kolejne
CREATE USER
na localhost zakończy się niepowodzeniem, ponieważ użytkownik localhost nigdy nie został usunięty. Wydaje się, że nie trzeba marnować czasu na szukanie duchów w tabelach grantów, jak sugerował jeden plakat.Widzę 7 głosów za:
Co jest interpretowane jako
DROP USER 'jack@localhost'@'%';
# źleWydaje się, że istnieje prawdziwy błąd, który generuje ten sam komunikat o błędzie, ale ma to związek z usunięciem pierwszego utworzonego użytkownika (po nowej instalacji serwera mysql). Czy ten błąd został naprawiony, nie wiem; ale nie przypominam sobie, żeby to się ostatnio działo i jestem teraz w wersji 5.5.27.
źródło
mariadb-server-5.5.60-1.el7_5.x86_64
Jeśli użyjesz
DELETE
instrukcji zmysql.user
tabeli, aby usunąć użytkownika, a następnie spróbujesz przywrócić go ponownieCREATE USER
, pojawi się1396
błąd. Pozbądź się tego błędu, uruchamiającDROP USER 'username'@'host';
(Otrzymasz 1396 błędów, jeśli spróbujesz odtworzyć Jacka)
(Wyjdź z tej sytuacji, uruchamiając
DROP USER
)(Przypuszczam, że
FLUSH PRIVILEGES
nie może zranić, ale zdecydowanie najpierw upuść użytkownika.)źródło
Nie powinieneś ręcznie usuwać użytkowników w ten sposób. MySQL ma
REVOKE
składnię do usuwania uprawnień iDROP USER
ich usuwania:Najlepiej jest korzystać z dostarczonych narzędzi zamiast przesuwać się w tle.
źródło
flush privileges
? Oficjalne docs MySQL zrobić mówić o takich rzeczachdelete from user where user = 'jack';
iflush privileges
. Dlaczego mówisz, że nie są one częścią dostarczonych narzędzi?'jack@localhost'
prawdopodobnie powinien'jack'@'localhost'
tu być .Upuść użytkownika, opróżnij uprawnienia; następnie utwórz użytkownika. To działa!
źródło
spróbuj,
delete from mysql.db where user = 'jack'
a następnie utwórz użytkownikaźródło
W MySQL 5.6 korzystanie
Drop user userid;
nie działa. Użyj:Drop user 'userid'@'localhost';
i / lubDrop user 'userid'@'%';
. W ten sposób mogłem upuścić użytkownika i odtworzyć go.źródło
źródło
Sprawdź, czy jest
lub
źródło
Jeśli chcesz usunąć użytkownika z SQL, należy usunąć odpowiednie dane w tych tabelach:
columns_priv
,db
,procs_priv
,tables_priv
. Następnie wykonajflush privileges;
źródło
Co zabawne, warsztat MySQL rozwiązał to dla mnie. Na karcie Administracja -> Użytkownicy i uprawnienia użytkownik został wyświetlony z błędem. Korzystanie z opcji usuwania rozwiązało problem.
źródło
Proste obejście tego problemu. Ponieważ polecenie „usuń” usuwa tylko rekord użytkownika z tabeli „użytkownik” bazy danych „mysql”, możemy go dodać z powrotem, a następnie całkowicie usunąć użytkownika. Następnie możesz utworzyć użytkownika o tej samej nazwie.
Krok 1. znajdź format rekordu tabeli użytkowników w bazie danych mysql
Krok 2. Zgodnie z kolumnami pokazanymi w kroku 1 utwórz fikcyjny rekord z nazwą użytkownika. Wstaw go do tabeli, na przykład przypomnienie, aby zastąpić „nazwę użytkownika” swoją nazwą użytkownika.
Uwaga: czasami mogą wystąpić problemy z wstawieniem, wystarczy zmienić dane, aby działało.
Krok 3. Upuść użytkownika.
Teraz możesz utworzyć użytkownika o tej samej nazwie.
źródło
Ten post MySQL ERROR 1045 (28000): Odmowa dostępu dla użytkownika „rachunek” @ „localhost” (przy użyciu hasła: TAK) jest przydatna. Czasami istnieje anonimowy użytkownik „@” localhost ”lub„ @ ”127.0.0.1”. Aby rozwiązać problem,
najpierw upuść użytkownika, którego „tworzenie użytkownika” nie powiodło się.
Utwórz nowego użytkownika.
Nadaj wymagane uprawnienia nowemu użytkownikowi.
Przywracanie uprawnień.
źródło
Miałem ten sam błąd. Ale wydaj polecenie „FLUSH PRIVILEGES;” nie pomogło Podobało mi się to:
źródło
Serwer MySQL działa z opcją --skip-grant-tables, więc nie może wykonać tej instrukcji
źródło
Wiem, że to stare, ale ponieważ jest to pierwszy wynik w Google, pomyślałem, że powinienem dodać moje rozwiązanie. W moim przypadku upuszczenie użytkownika działało dobrze, ale odtworzenie go dało mi komunikat „BŁĄD 2013 (HY000): Utracono połączenie z serwerem MySQL podczas zapytania” i „BŁĄD 2006 (HY000): Serwer MySQL zniknął”. Próbowałem przywilejów flush -> upuść rozwiązanie użytkownika, ale nadal miałem ten sam błąd.
W moim przypadku błąd był spowodowany aktualizacją MySQL z 5.1 -> 5.6. Przeglądając dzienniki błędów, zauważyłem, że powiedział, aby uruchomić mysql_upgrade. Czy to i moje oświadczenie użytkownika działało dobrze!
źródło
Niedawno dostałem ten błąd.
To, co zadziałało, to sprawdzenie w środowisku mysql „Użytkownicy i uprawnienia” i uświadomienie sobie, że użytkownik nadal istnieje.
Po usunięciu go stamtąd mogłem odtworzyć użytkownika.
źródło
mysql> DELETE FROM mysql.db WHERE user = 'jack'
Uruchom ponownie serwer:
# mysql.server restart
Następnie wykonaj
CREATE USER
polecenie.źródło
CREATE
poDELETE
.Napotkałem dzisiaj ten problem i rozwiązałem go, wykonując następujące czynności:
1) ręcznie wstawiając kłopotliwego użytkownika, podając wartość pól obowiązkowych
mysql.user
2)
3) A.
4) A.
B.
Mam nadzieję że to pomoże.
źródło
Wystarczy usunąć dane związane z użytkownikiem z mysql.db (być może również z innych tabel), a następnie odtworzyć oba.
źródło
Zetknąłem się z tym samym problemem, po kilku poszukiwaniach znalazłem rozwiązanie, które dla mnie zadziałało. Ponieważ już utworzyłeś użytkowników, spróbuj teraz zrobić
FLUSH PRIVILEGES
na konsoli Mysql. Ten problem znajduje się już w poście o błędzie MySql. Możesz także to sprawdzić, a teraz po opróżnieniu możesz utworzyć nowego użytkownika. wykonaj poniższe kroki:Teraz możesz zobaczyć konsolę MySQL.
Zamiast nazwy użytkownika możesz podać żądaną nazwę użytkownika. Jeśli używasz MySQL na komputerze lokalnym, wpisz „localhost” zamiast hosta, w przeciwnym razie podaj nazwę serwera, do którego chcesz uzyskać dostęp.
Przykład: UTWÓRZ UŻYTKOWNIKA smruti @ localhost ZIDENTYFIKOWANY przez 'hello';
Teraz tworzony jest nowy użytkownik. Jeśli chcesz dać wszystkim dostęp, wpisz
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
Teraz możesz wyjść z MySQL, wpisując.
\q
Teraz ponownie zaloguj sięmysql -u newusername -p
, a następnie naciśnij klawisz Enter. Możesz zobaczyć wszystko.Mam nadzieję że to pomoże.
źródło