Puncte:4

Avertisment MySQL „Utilizatorul există”, dar utilizatorul nu este în tabelul „utilizator”.

drapel in
Zak

Am această problemă de săptămâni întregi. Habar n-am unde să mă uit în continuare. Am curățat, spălat, repornit MySQL service, a repornit Ubuntu Server. Ce poate cauza asta AVERTIZARE iar utilizatorul să nu se afișeze în utilizator masa? Am incercat si eu DROP utilizator si ia 0 rânduri afectate ca urmare. Acest lucru este frustrant dincolo de credință! Unde mai sunt stocate informațiile despre utilizator în Schemă și cum le pot șterge?

Captură de ecran

ACTUALIZAȚI

Când introduc numele de utilizator /var/lib/mysql/mysql Găsesc numele de utilizator în db.MYD fişier. Deși nu îl pot edita. Așa că știu că numele de utilizator există undeva ALTUL decât tabelul de utilizatori.

drapel us
Dacă creați un `mysqldump`, ar trebui să puteți afla ce tabele conțin acea intrare. Comanda ar putea fi cam așa:`mysqldump -u YourUser -p YourDatabaseName > wantedsqlfile.sql`. Ar trebui să puteți vizualiza acel fișier descărcat cu editorul dvs. preferat.
Zak avatar
drapel in
Zak
Gata .. Și utilizatorul nu este găsit în dump .. Cu toate acestea, dacă vizualizați actualizarea mea . Utilizatorul se găsește în fișierul `mysql/db.MYD` ..
drapel in
Vă rugăm să nu postați capturi de ecran cu text pe care îl puteți copia și lipi. Copiați și lipiți-l în schimb.
Puncte:11
drapel mx

This happens when a user is created and granted privileges and then deleted from mysql.user instead of being dropped:

First, create a user admin_x@localhost:

mysql> create user admin_x@localhost identified by 'abc123';
Query OK, 0 rows affected (0.01 sec)

Check if the user is in mysql.user:

mysql> select user, host from mysql.user where user='admin_x';
+---------+-----------+
| user    | host      |
+---------+-----------+
| admin_x | localhost |
+---------+-----------+
1 row in set (0.01 sec)

Okay.

Now we grant this user access to db test:

mysql> grant all on test.* to admin_x@localhost;
Query OK, 0 rows affected (0.00 sec)

And check it:

mysql> show grants for admin_x@localhost;
+---------------------------------------------+
| Grants for admin_x@localhost                              |
+---------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admin_x'@'localhost'      |
| GRANT ALL PRIVILEGES ON `test`.* TO 'admin_x'@'localhost' |
+---------------------------------------------+
2 rows in set (0.00 sec)

Now delete the user improperly from mysql.user:

mysql> delete from mysql.user where user='admin_x';
Query OK, 1 row affected (0.00 sec)

And the user is no longer in mysql.user:

mysql> select user from mysql.user where user='admin_x';
Empty set (0.00 sec)

But when you now try to create it new, you get an error:

mysql> create user admin_x@localhost identified by 'abc123';
ERROR 1396 (HY000): Operation CREATE USER failed for 'admin_x'@'localhost'

That is because admin_x@localhost still has privileges stored in mysql.db:

mysql> select User from mysql.db where user='admin_x';
+---------+
| User    |
+---------+
| admin_x |
+---------+
1 row in set (0.00 sec)

Now, when you drop the user

mysql> drop user admin_x@localhost;
Query OK, 0 rows affected (0.00 sec)

it is really gone and you can create it again:

mysql> create user admin_x@localhost identified by 'abc123';
Query OK, 0 rows affected (0.00 sec)
Zak avatar
drapel in
Zak
Raspunsul tau m-a condus in directia buna! Am încercat să renunț .. de mai multe ori .. Problema a fost că utilizatorul încă mai apărea în tabelul **fișier** `db.MYD` pentru acea bază de date (`mysql`) -- Așa că am copiat (descarcat) mysql baza de date .. Am creat o copie .. Am inserat fișierul de descărcare .. Am copiat apoi fișierele `db.MYI` `db.MYD`, `db.opt` și `db.frm` înapoi și am schimbat dreptul de proprietate asupra fișierelor menționate înapoi la `mysql:mysql` -- Mysql spălat, repornit și voila! Nu am reușit să mă uit la fișierele fizice db față de rezultatul lui `select User from mysql.db where user='admin_x';` Mulțumesc pentru răspuns!
digijay avatar
drapel mx
Ciudat că `drop` nu a funcționat, m-am întrebat și de ce primești un avertisment în loc de o eroare când recreezi utilizatorul. Oricum, ma bucur ca te-am putut ajuta!
drapel co
@digijay OP a executat o instrucțiune „creați utilizator *dacă nu există*”, utilizatorul există conform logicii DB, deci nu au fost afectate rânduri și un avertisment

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.