HATA 1396 (HY000): CREATE USER işlemi 'jack' @ 'localhost' için başarısız oldu


311

MySQL'de kök olarak bile sildiğim basit bir kullanıcıyı yeniden oluşturamıyorum.

Benim durumum: kullanıcı 'jack' daha önce vardı, ama yeniden oluşturmak için mysql.user dan sildim. Bu tabloda bunun izini görmüyorum. Bu komutu başka bir rastgele kullanıcı adı için çalıştırırsam, 'jimmy' deyin, iyi çalışır (tıpkı 'jack' için olduğu gibi).

'Jack' kullanıcısını bozmak için ne yaptım ve 'jack'i MySQL'in bu kurulumu için geçerli bir kullanıcı olarak yeniden oluşturmak için bu bozulmayı nasıl geri alabilirim?

Aşağıdaki örneğe bakın. (Tabii ki, başlangıçta, 'jack' in yaratılması ve kaldırılması arasında çok zaman vardı.)

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)

Yanıtlar:


233

Bir yapmayı deneyin FLUSH PRIVILEGES;. Bu hata kodundaki bu MySQL hata gönderisi, privs'ı temizledikten sonra kendinize benzer bir durumda bazı başarıları bildiriyor gibi görünüyor. 


13
Bu öneriyi buldum ve daha önce başarılı olmadan denedim, ama belki başka bir şey yanlıştı. Şimdi tekrar denemek, sonra durumu başka bir kullanıcıyla yeniden oluşturmak, bunun aslında hile yaptığını buldum. Elbette, bugünün resmi yanıtı "aptal olmamak" ve bunu yapmak için REVOKE ve DROP USER kullanmaktı. Üç cevabın hepsine borçluyum (bu sadece şimdiki durumumdan beni kefalet eden cevap oldu).
Russ Bateman

13
2016, mysql v14.14'te ve hala bozuk.
ivo Welch

4
İlk olarak kullanıcıyı @ tver3305 yanıtına göre bırakmam gerekiyordu.
Shautieh

9
10.1.21 ile aynı sorunu görüyorum, ancak "floş ayrıcalıkları" hiçbir fark yaratmadı. Kullanıcıyı düşürürüm, temizler ve sonra "7. satırdaki ERROR 1396 (HY000) ile başarısız olur: CREATE USER işlemi başarısız oldu". Keşke neden mysql / mariadb bu hata üzerinde biraz ayrıntılı almak için alabilir, NEDEN başarısız gibi.
David M. Karr

3
Kullanıcıyı da bırakmaya çalıştığımda bile hatayı aldım, 'temizleme ayrıcalıkları' benim için işe yaramadı, biraz araştırma yaptıktan sonra, tüm erişimi iptal edip kullanıcıyı bırakarak çözümü buldum, sanmıyorum benzer durumlarda yardımcı olacak gömme işlemi, bu sayfayı benim ayrıntılı açıklama paylaştı rathishkumar.in/2018/10/...
Rathish

545

evet bu böcek var. Ancak, küçük bir çözüm buldum.

  • Kullanıcının orada olduğunu varsayın, kullanıcıyı bırakın
  • Kullanıcıyı sildikten sonra, mysql ayrıcalıklarını temizlemeniz gerekir
  • Şimdi kullanıcıyı oluşturun.

Bunu çözmeli. Admin @ localhost kullanıcısını oluşturmak istediğimizi varsayarsak, bunlar şu komutlar olacaktır:

drop user admin @ localhost;
floş ayrıcalıkları;
' admins_password ' ile
 tanımlanan kullanıcı yöneticisi @ localhost oluştur

Şerefe


58
Gömme ayrıcalıkları tek başına işe yaramadı. kullanıcıyı bırakarak her şeyi düzeltti. Teşekkürler.
Jake

3
Benim için de aynı. Önce kullanıcıyı bırakmak zorunda kaldım.
kgiannakakis

3
@QuantumMekanik çözüm benim için işe yaramadı ama düştü ve yıkayın.
ocaklar

Benim durumumda, sadece kullanıcı bırakarak ayrıcalıklar yıkama olmadan enogh oldu.
Scadge

Bu BÜYÜK bir hayat kurtarıcıydı - @Jake ile anahtar parçanın üstünde olduğu gibi, localhost kısmı ile damla kullanıcıydı
kellyfj

46

Bu hata 2007'den beri bugs.mysql.com'da oturuyor ve bu konu esas olarak sadece bir yıl öncesine kadar tüm bu yanlış cevapların bir papağanı.

MySQL belgelerine göre, komutlar gibi CREATE USER, GRANT, REVOKEve DROP USERbir sonraki gerekmez FLUSH PRIVILEGESkomutu. Dokümanları okursa neden oldukça açıktır. Çünkü MySQL tablolarını doğrudan değiştirmek bilgiyi tekrar belleğe yüklemez; yine de bu hataya çözümlerin bolluğu FLUSH PRIVILEGEScevap olduğunu iddia ediyor .

Bu bir hata bile olmayabilir. Bu bir dokümantasyon komplosudur - dokümanlar sürümden sürüme kritik bir yerde değişir.

13.7.1.2. DROP USER Sözdizimi

...

DROP USER kullanıcısı [, kullanıcı] ...

...

DROP USER 'jeffrey' @ 'localhost';

Hesap adının yalnızca kullanıcı adı kısmını belirtirseniz, '%' ana bilgisayar adı kısmı kullanılır.

DROP USERMySQL 5.0.0 sürümünde olduğu gibi, yalnızca ayrıcalığı olmayan hesapları kaldırır. MySQL 5.0.2'de hesap ayrıcalıklarını da kaldıracak şekilde değiştirildi. Bu, bir hesabı kaldırma prosedürünün MySQL sürümünüze bağlı olduğu anlamına gelir.

MySQL 5.0.2'den itibaren bir hesabı ve ayrıcalıklarını aşağıdaki gibi kaldırabilirsiniz:

DROP USER kullanıcısı;

Hesap özeti, tüm hibe tablolarından hesap için ayrıcalık satırlarını kaldırır.

Bu hatayı aldığım tek zaman yaptığım zamandır DROP USER user; doc'ın önerdiği gibi, ancak MySQL '%' i tüm kullanıcıları tüm ana bilgisayarlarda bırakacak şekilde joker karakter olarak görmez. Ne de olsa o kadar vahşi değil. Veya, bazen localhost kullanıcısını sildiğinde ve daha sonra% 'da birini silmeye çalıştığında çalışabilir.

Kullanıcıyı% olarak silmeye çalıştığında bir hata mesajı verdiğini ve çıktığını açık. Müteakip CREATE USERlocalhost kullanıcı asla silinmez çünkü localhost de başarısız olur. Bir posterin önerdiği gibi hayalet arayan hibe tablolarında zaman kaybetmeye gerek yok gibi görünüyor.

Şunun için 7 oy görüyorum:

DROP USER 'jack @ localhost'; // hesabı tamamen sil

Hangi DROP USER 'jack@localhost'@'%';# yanlış olarak yorumlanır

Aslında aynı hata mesajını üreten gerçek bir hata var gibi görünüyor, ancak ilk yaratılan kullanıcı (yeni bir mysql sunucu kurulumundan sonra) düşürülmesiyle ilgili. Bu hatanın giderilip giderilmediğini bilmiyorum; ancak son zamanlarda bunun olduğunu hatırlamıyorum ve şu anda 5.5.27 sürümüne kadar çıkıyorum.


8
MySQL doktor yazarı mısınız?
Pacerier

Benim için cevap buydu. Mariadb bu hatayı miras aldı.
zerpsed

Neden kabul edilen cevap bu değil:. Her neyse, teşekkür ederim @ user1969061. Bu kesinlikle benim için çalıştımariadb-server-5.5.60-1.el7_5.x86_64
han solo

36

Bir kullanıcıyı kaldırmak DELETEiçin mysql.usertablodaki bir ifadeyi kullanırsanız , kullanıcıyı yeniden kurmaya çalışırsanız CREATE USERbir 1396hata alırsınız . Çalıştırarak bu hatadan kurtulunDROP USER 'username'@'host';

DELETE 
  FROM mysql.user 
 WHERE user = 'jack';

(Jack'i yeniden oluşturmaya çalışırsanız 1396 hataları alırsınız)

CREATE USER 'jack'@'localhost' IDENTIFIED BY PASSWORD '*Fi47ytFF3CD5B14E7EjkjkkC1D3F8086A5C0-krn';

(Koşarak bu durumdan kurtulun DROP USER)

DROP USER 'jack'@'localhost';

(Sanırım FLUSH PRIVILEGESincitemez, ama kesinlikle kullanıcıyı ilk önce bırak.)


24

Kullanıcıları bu şekilde manuel olarak silmemelisiniz. MySQL, REVOKEayrıcalıkları kaldırmak ve DROP USERsilmek için sözdizimine sahiptir :

REVOKE priv1,priv2,priv3,etc... FROM 'jack@localhost'; // remove certain privileges
DROP USER 'jack@localhost'; // completely delete the account

Arka planda dolaşmak yerine sağlanan araçları kullanmak en iyisidir.


2
Bu gerçek cevaptı, ama yaşadığım soruna değil (aptallığım tarafından yaratıldı). Beni düzleştirdiğiniz için çok teşekkür ederim!
Russ Bateman

@Marc, O zaman neden flush privilegesilk etapta icat ettiler ? Resmi MySQL dokümanlar yapmak gibi şeyler hakkında konuşmak delete from user where user = 'jack'; ve flush privileges. Neden sağlanan araçların bir parçası olmadığını söylüyorsunuz?
Pacerier

1
@ User1969061'in işaret ettiği gibi, 'jack@localhost'muhtemelen 'jack'@'localhost'burada olmalıdır .
jochen

11

Kullanıcıyı bırakın, ayrıcalıkları yıkayın; ardından kullanıcıyı oluşturun. Çalışıyor!


1
Kullanıcıyı bırakana kadar ayrıcalıkları yıkamak işe yaramadı. Teşekkürler.
Brandon Fitzpatrick

10

dene delete from mysql.db where user = 'jack've sonra bir kullanıcı oluştur


1
Bu, kurulumumu nasıl bozduğumu anlamama yardımcı oldu. Çok teşekkür ederim.
Russ Bateman

Fely'nin yorumuna kadar okuyun. İlgili daha fazla tablo var.
Mahkum 13

6

MySQL 5.6'da kullanmak Drop user userid;çalışmıyor. Kullanın: Drop user 'userid'@'localhost';ve / veya Drop user 'userid'@'%';. Bu şekilde kullanıcıyı bırakıp yeniden oluşturabildim.


5
two method 
one :
setp 1: drop user 'jack'@'localhost';
setp 2: create user 'jack'@localhost identified by 'ddd';

two:
setp 1: delete from user where user='jack'and host='localhost';
setp 2: flush privileges;
setp 3: create user 'jack'@'localhost' identified by 'ddd';

5

Olup olmadığını kontrol edin

'Kullanıcı @ '%'

veya

'Kullanıcı @' localhost''a


4

Eğer sql ile bir kullanıcıyı silmek istiyorsanız, bu tablolarda ilgili verileri silmeniz gerekir: columns_priv, db, procs_priv, tables_priv. Sonra yürütünflush privileges;


Güzel cevap !! Cevabınız, "Bu yamayı kullanın ve başlamaya hazırsınız" yerine gerçekte ne olduğuna dair 'perde arkası' sorununu ortaya koyar. Çorbadan fındıklara kadar anlayabilmem için hep birlikte verilen her iki yanıtı da seviyorum. Şimdi, doğru şekilde yapacaksanız, bu şekilde yapmanın ne kadar iş olduğunu biliyorum - ve bu, başkalarının özetlediği yöntemleri neden kullanması gerektiğini daha da güçlendirir. Müthiş! Yukarıdaki yanıtların çoğu iyi olsa da, size oyumu veriyorum çünkü bu siteye yeni üye olmanın nasıl bir şey olduğunu biliyorum. Yeni olduğunuzda başkalarına yardım etmeyi gerçekten zorlaştırıyorlar.
Mahkum 13

Bu alternatif kabul edilmiş bir cevap olmalıdır. Ben mysql 5.5 kullanıyorum ve DROP USER IF EXISTS henüz mevcut değilse bu yüzden kullanıcı sözdizimini SİL (ilk kullanıcı varlığını test etmek zorunda) kullanmak zorunda. Yalnızca kullanıcı tablosundan silme işe yaramadı. FLUSH AYRICALIKLARI da yoktu. Yukarıdaki diğer tablolardan silmeniz gerekir.
alds

4

Funsily MySQL tezgah benim için çözdü. Yönetim sekmesi -> Kullanıcılar ve Ayrıcalıklar bölümünde kullanıcı bir hata ile listelenmiştir. Sil seçeneğini kullanmak sorunu çözdü.


3

Bu konuda basit bir çalışma. "Sil" komutu yalnızca "mysql" veritabanının "kullanıcı" tablosundaki kullanıcı kaydını kaldırdığından, geri ekleyip kullanıcıyı tamamen bırakabiliriz. Ardından aynı ada sahip bir kullanıcı oluşturabilirsiniz.

Adım 1. mysql veritabanında kullanıcı tablosunun kayıt biçimini bulun

use mysql;
select * from user;

2. Adım. 1. adımda gösterilen sütunlara göre, kullanıcı adıyla bir sahte kayıt oluşturun. Örneğin, tabloya ekleyin, "kullanıcı adı" nın kullanıcı adınızla değiştirilmesi hatırlatılır.

Insert into user value ('%','username','N','N','N','N','N',
'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N',
'N','N','N','N','N','N','N','N','N','','','','','0','0','0',
'0','mysql_native_password',
'*52C5E3AC6BC5E2E0BFF86978BF62A1481AC79D58','N',
'2016-12-10 23:59:12',null,'N');

Not: Bazen ekleme konusunda sorunlarla karşılaşabilirsiniz, sadece çalışması için verileri değiştirin.

Adım 3. Kullanıcıyı bırakın.

drop user username;

Artık aynı ada sahip bir kullanıcı oluşturabilirsiniz.


DESCRIBE <tablename> deneyin
Mahkum 13

2

Bu yazı MySQL ERROR 1045 (28000): 'bill' @ 'localhost' kullanıcısı için erişim reddedildi (şifre: YES kullanılarak) kullanışlıdır. Bazen anonim bir kullanıcı '' @ 'localhost' veya '' @ '127.0.0.1' vardır. Yani, sorunu çözmek için,

  1. önce 'kullanıcı oluştur' başarısız olan kullanıcıyı bırakın.

  2. Yeni kullanıcı oluştur.

  3. Yeni kullanıcıya gerekli ayrıcalıkları verin.

  4. Yıkama ayrıcalıkları.


Bunun için teşekkürler. Anonim kullanıcıyı silen mysql_secure_installation çalıştırmayı unuttum.
ablackhat

2

Aynı hatayla karşılaştım. Ancak "FLUSH PRIVILEGES" komutu; yardım etmedi. Bunu beğendim:

CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
UPDATE mysql.user SET USER='jack' WHERE USER='jimmy';

0

MySQL sunucusu --skip-grant-tables seçeneğiyle çalışıyor, bu nedenle bu ifadeyi yürütemiyor


0

Bunun eski olduğunu biliyorum, ancak Google'daki ilk sonuç olduğu için çözümümü eklemeliyim diye düşündüm. Benim durumumda kullanıcı iyi çalıştı, ancak kullanıcının yeniden yaratma bana "ERROR 2013 (HY000): Sorgu sırasında MySQL sunucusuna bağlantı kesildi" ve "ERROR 2006 (HY000): MySQL sunucusu gitti." Temizleme ayrıcalıklarını denedim -> kullanıcı çözümünü düşürdüm, ancak yine de aynı hatayla karşılaştık.

Benim durumumda, hata 5.1 -> 5.6'dan bir mysql güncellemesinden kaynaklandı. Hata günlüklerini görüntülerken, mysql_upgrade çalıştırmayı söylediğini fark ettim. Bunu yaptım ve kullanıcı oluştur ifadem işe yaradı!


0

Geçenlerde bu hatayı aldım.

Benim için işe yarayan mysql çalışma tezgahında 'Kullanıcılar ve Ayrıcalıklar' kontrol ediyor ve kullanıcı hala var olduğunu fark ediyor.

Oradan sildikten sonra kullanıcıyı yeniden oluşturabildim.


0

mysql> DELETE FROM mysql.db WHERE user = 'jack'

Sunucuyu yeniden başlatın:

# mysql.server restart

Sonra CREATE USERkomutunu yap.


Bu yararlı değil. Hata üzerinde karşılaşıldı CREATEsonra DELETE.
waqasgard

0

Bugün bu sorunla karşılaştım ve aşağıdaki adımları izleyerek çözdüm:

1) Zorunlu alanların değerini veren rahatsız edici kullanıcının manuel olarak mysql.user

mysql> insert into user(Host, User, Password, ssl_type) 
   values ('localhost', 'jack', 'jack', 'ANY');

2)

mysql> select * from user where User = 'jack';
   1 row in set (0.00 sec)

3 A.

mysql> drop user jack;
Query OK, 0 rows affected (0.00 sec)

B. mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

C. mysql> create user 'jack' identified by 'jack';
Query OK, 0 rows affected (0.00 sec)

D. mysql> select Host, User, Password, ssl_type  from user where User = 'jack';
+-----------+-----------+-------------------------------------------+----------+
| Host      | User      | Password                                  | ssl_type |
+-----------+-----------+-------------------------------------------+----------+
| localhost | jack      | jack                                      | ANY      |
| %         | jack      | *45BB7035F11303D8F09B2877A00D2510DCE4D758 |          |
+-----------+-----------+-------------------------------------------+----------+
2 rows in set (0.00 sec)

4) A.

mysql> delete from user 
 where User = 'nyse_user' and 
       Host = 'localhost' and 
       Password ='nyse';
Query OK, 1 row affected (0.00 sec)

B.

mysql> select Host, User, Password, ssl_type  from user where User = 'jack';
+------+-----------+-------------------------------------------+----------+
| Host | User      | Password                                  | ssl_type |
+------+-----------+-------------------------------------------+----------+
| %    | jack      | *45BB7035F11303D8F09B2877A00D2510DCE4D758 |          |
+------+-----------+-------------------------------------------+----------+
1 row in set (0.00 sec)

Bu yardımcı olur umarım.


-2

Kullanıcı ile ilgili verileri mysql.db'den silin (belki diğer tablolardan da), sonra her ikisini de yeniden oluşturun.


-2

Aynı sorunla da karşılaştım, birkaç aramadan sonra, benim için işe yarayan bir çözüm buldum. Umarım size yardımcı olacaktır. Daha önce kullanıcı oluşturduğunuzdan, şimdi FLUSH PRIVILEGESMysql konsolunuzda bir yapmaya çalışın . Bu sorun zaten MySql hata mesajında. Bunu da kontrol edebilirsiniz.Şimdi yıkamadan sonra yeni bir kullanıcı oluşturabilirsiniz. aşağıdaki adımları izleyin:

Step-1: Open terminal Ctrl+Alt+T
Step-2: mysql -u root -p  , it will ask for your MySQL password.

Şimdi Mysql konsolunu görebilirsiniz.

Step-3: CREATE USER 'username'@'host' IDENTIFIED by 'PASSWORD';

Kullanıcı adı yerine istediğiniz kullanıcı adını koyabilirsiniz. Yerel makinenizde Mysql çalıştırıyorsanız , ana bilgisayar yerine "localhost" yazın , aksi takdirde erişmek istediğiniz sunucu adını verin.

Örn: CERATE USER smruti @ localhost 'merhaba' ile tanımlandı;

Şimdi yeni kullanıcı yaratıldı. Tüm erişimi vermek istiyorsanız yazın

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Şimdi \qMySQL'den çıkabilirsiniz . Şimdi bir kez daha oturum açın

mysql -u newusername -p, ardından Enter tuşuna basın. Her şeyi görebilirsiniz.

Bu yardımcı olur umarım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.