Sepertinya saya tidak dapat membuat kembali pengguna sederhana yang saya hapus, bahkan sebagai root di MySQL.
Kasus saya: 'jack' pengguna ada sebelumnya, tetapi saya menghapusnya dari mysql.user untuk membuatnya kembali. Saya tidak melihat tanda-tanda ini di meja itu. Jika saya menjalankan perintah ini untuk beberapa nama pengguna lain yang acak, katakan 'jimmy', itu berfungsi dengan baik (seperti yang awalnya dilakukan untuk 'jack').
Apa yang telah saya lakukan untuk merusak 'jack' pengguna dan bagaimana saya bisa membatalkan korupsi itu untuk membuat kembali 'jack' sebagai pengguna yang valid untuk instalasi MySQL ini?
Lihat contoh di bawah ini. (Tentu saja, awalnya, ada banyak waktu antara penciptaan 'jack' dan pemindahannya.)
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)
sumber
ya bug ini ada di sana. Namun, saya menemukan solusi kecil.
Itu harus menyelesaikannya. Dengan asumsi kami ingin membuat admin pengguna @ localhost, ini akan menjadi perintah:
Bersulang
sumber
Bug ini telah ada di bugs.mysql.com sejak 2007 dan utas ini terutama merupakan parrot dari semua jawaban yang salah itu bahkan hingga setahun yang lalu.
Menurut dokumentasi MySQL, perintah seperti
CREATE USER
,GRANT
,REVOKE
, danDROP USER
tidak memerlukan berikutnyaFLUSH PRIVILEGES
perintah. Cukup jelas mengapa, jika seseorang membaca dokumen. Itu karena mengubah tabel MySQL secara langsung tidak memuat ulang info ke dalam memori; namun kebanyakan solusi untuk klaim bug iniFLUSH PRIVILEGES
adalah jawabannya.Ini bahkan mungkin bukan bug. Ini adalah konspirasi dokumentasi - dokumen bervariasi di satu tempat kritis dari satu versi ke versi lainnya.
13.7.1.2. Sintaks PENGGUNA DROP
...
...
Jika Anda hanya menentukan bagian nama pengguna dari nama akun, bagian nama host dari '%' digunakan.
DROP USER
seperti yang ada di MySQL 5.0.0 hanya menghapus akun yang tidak memiliki hak istimewa. Di MySQL 5.0.2, itu dimodifikasi untuk menghapus hak akun juga. Ini berarti bahwa prosedur untuk menghapus akun tergantung pada versi MySQL Anda.Pada MySQL 5.0.2, Anda dapat menghapus akun dan hak istimewanya sebagai berikut:
Pernyataan itu menghapus baris privilege untuk akun dari semua tabel hibah.
Satu-satunya waktu saya mendapatkan kesalahan ini adalah ketika saya melakukannya
DROP USER user
; seperti yang disarankan oleh dokumen, tetapi MySQL tidak memperlakukan '%' sebagai wildcard dengan cara yang akan menjatuhkan semua pengguna di semua host. Lagipula tidak begitu liar. Atau, mungkin terkadang berfungsi saat menghapus pengguna localhost dan kemudian mencoba menghapus yang di%.Jelas bagi saya bahwa ketika mencoba menghapus pengguna di%, ia mengeluarkan pesan kesalahan dan berhenti. Selanjutnya
CREATE USER
di localhost akan gagal karena pengguna localhost tidak pernah dihapus. Tampaknya tidak perlu membuang waktu menggali di meja hibah untuk mencari hantu seperti yang disarankan oleh salah satu poster.Saya melihat 7 suara untuk:
Yang diartikan sebagai
DROP USER 'jack@localhost'@'%';
# salahTampaknya sebenarnya ada bug nyata yang menghasilkan pesan kesalahan yang sama, tetapi itu ada hubungannya dengan pengguna yang dibuat pertama (setelah menginstal server mysql baru) yang dihapus. Apakah bug itu sudah diperbaiki, saya tidak tahu; tapi saya tidak ingat itu terjadi akhir-akhir ini dan saya sampai ver 5.5.27 saat ini.
sumber
mariadb-server-5.5.60-1.el7_5.x86_64
Jika Anda menggunakan
DELETE
pernyataan di atasmysql.user
meja dalam upaya untuk menghapus pengguna, kemudian mencoba untuk membangun kembali penggunaCREATE USER
, Anda akan mendapatkan1396
kesalahan. Singkirkan kesalahan ini dengan menjalankanDROP USER 'username'@'host';
(Anda akan mendapatkan 1396 kesalahan jika Anda mencoba membuat kembali jack)
(Keluar dari situasi ini dengan berlari
DROP USER
)(Saya kira
FLUSH PRIVILEGES
tidak ada salahnya, tapi pasti jatuhkan pengguna terlebih dahulu.)sumber
Anda seharusnya tidak secara manual menghapus pengguna dengan cara itu. MySQL memiliki
REVOKE
sintaks untuk menghapus privilege danDROP USER
menghapusnya:Cara terbaik untuk menggunakan alat yang disediakan daripada mucking di latar belakang.
sumber
flush privileges
di tempat pertama? Dokumentasi MySQL resmi melakukan pembicaraan tentang hal-hal sepertidelete from user where user = 'jack';
danflush privileges
. Mengapa Anda mengatakan bahwa itu bukan bagian dari alat yang disediakan?'jack@localhost'
mungkin harus ada di'jack'@'localhost'
sini.Jatuhkan pengguna, siram hak istimewa; lalu, buat pengguna. Itu berhasil!
sumber
coba
delete from mysql.db where user = 'jack'
lalu buat penggunasumber
Di MySQL 5.6 menggunakan
Drop user userid;
tidak berfungsi. Gunakan:Drop user 'userid'@'localhost';
dan / atauDrop user 'userid'@'%';
. Dengan cara ini saya bisa menjatuhkan pengguna dan membuatnya kembali.sumber
sumber
Periksa apakah ada
atau
sumber
Jika Anda ingin menghapus pengguna dengan sql, Anda perlu menghapus data terkait dalam tabel ini:
columns_priv
,db
,procs_priv
,tables_priv
. Kemudian jalankanflush privileges;
sumber
Lucunya, meja kerja MySQL menyelesaikannya untuk saya. Di tab Administrasi -> Pengguna dan Hak Istimewa, pengguna terdaftar dengan kesalahan. Menggunakan opsi hapus memecahkan masalah.
sumber
Pekerjaan sederhana tentang masalah ini. Karena perintah "delete" hanya menghapus catatan pengguna dalam tabel "user" dari database "mysql", kita bisa menambahkannya kembali dan kemudian menjatuhkan pengguna sepenuhnya. Kemudian Anda bisa membuat pengguna dengan nama yang sama.
Langkah 1. temukan format rekaman tabel pengguna di database mysql
Langkah 2. Menurut kolom yang ditunjukkan pada langkah1, buat catatan boneka dengan nama pengguna. Masukkan ke dalam tabel, misalnya, diingatkan untuk mengganti "nama pengguna" dengan nama pengguna Anda.
Catatan: kadang-kadang Anda mungkin mengalami masalah dalam menyisipkan, cukup ubah data untuk membuatnya berfungsi.
Langkah 3. Jatuhkan pengguna.
Sekarang Anda dapat membuat pengguna dengan nama yang sama.
sumber
Posting ini MySQL ERROR 1045 (28000): Akses ditolak untuk 'tagihan' @ 'localhost' pengguna (menggunakan kata sandi: YES) berguna. Terkadang, ada pengguna anonim '' @ 'localhost' atau '' @ '127.0.0.1'. Jadi, untuk menyelesaikan masalah,
jatuhkan dulu pengguna yang 'buat pengguna' gagal.
Buat pengguna baru.
Berikan hak istimewa yang diperlukan kepada pengguna baru.
Hak istimewa flush.
sumber
Saya memiliki kesalahan yang sama. Tetapi perintahkan "FLUSH PRIVILEGES;" tidak membantu. Saya memang suka itu:
sumber
Server MySQL berjalan dengan opsi --skip-grant-tables sehingga tidak dapat menjalankan pernyataan ini
sumber
Saya tahu ini sudah tua, tetapi karena ini adalah hasil pertama di Google saya pikir saya harus menambahkan solusi saya. Dalam kasus saya menjatuhkan pengguna bekerja dengan baik, tetapi menciptakan kembali pengguna memberi saya "ERROR 2013 (HY000): Sambungan hilang ke server MySQL selama permintaan" dan "ERROR 2006 (HY000): Server MySQL telah pergi." Saya mencoba hak flush -> drop solusi pengguna, tetapi masih memiliki kesalahan yang sama.
Dalam kasus saya kesalahannya adalah karena upgrade mysql dari 5.1 -> 5.6. Melihat log kesalahan, saya perhatikan bahwa dikatakan untuk menjalankan mysql_upgrade. Apakah itu dan pernyataan pengguna buat saya berfungsi dengan baik!
sumber
Saya baru saja mendapat kesalahan ini.
Apa yang berhasil bagi saya adalah memeriksa di meja kerja mysql 'Pengguna dan Hak Istimewa' dan menyadari pengguna masih ada.
Setelah menghapusnya dari sana, saya dapat membuat ulang pengguna.
sumber
mysql> DELETE FROM mysql.db WHERE user = 'jack'
Mulai ulang server:
# mysql.server restart
Kemudian lakukan
CREATE USER
perintah Anda .sumber
CREATE
setelahDELETE
.Saya menghadapi masalah ini hari ini, dan saya mengatasinya dengan melakukan langkah-langkah berikut:
1) secara manual memasukkan pengguna bermasalah yang memberikan nilai bidang wajib ke dalam
mysql.user
2)
3) A.
4) A.
B.
Semoga ini membantu.
sumber
Hapus saja data terkait pengguna dari mysql.db (mungkin dari tabel lain juga), lalu buat kembali keduanya.
sumber
Saya juga menghadapi masalah yang sama, setelah beberapa pencarian, saya menemukan solusi yang bekerja untuk saya. Saya harap ini akan membantu Anda. Karena Anda telah membuat pengguna, sekarang coba lakukan
FLUSH PRIVILEGES
di konsol Mysql Anda. Masalah ini sudah ada di pos bug MySql. Anda juga dapat memeriksa yang ini. Sekarang setelah pembilasan, Anda dapat membuat pengguna baru. ikuti Langkah-langkah di bawah ini:Sekarang Anda dapat melihat konsol Mysql.
Alih-alih nama pengguna Anda dapat memasukkan nama pengguna yang Anda inginkan. Jika Anda menjalankan Mysql di mesin lokal Anda, ketikkan "localhost" alih-alih tuan rumah, jika tidak berikan nama server yang ingin Anda akses.
Contoh: CREATE USER smruti @ localhost IDENTIFIED oleh 'hello';
Sekarang pengguna baru dibuat. Jika Anda ingin memberikan semua akses, ketikkan
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
Sekarang Anda dapat keluar dari MySQL dengan mengetik
\q
. Sekarang masuk kembalimysql -u newusername -p
, lalu tekan Enter. Anda bisa melihat semuanya.Semoga ini membantu.
sumber