Pertama izinkan saya menyebutkan bahwa saya telah melalui banyak pertanyaan yang disarankan dan tidak menemukan jawaban yang relevan. Inilah yang saya lakukan.
Saya terhubung ke instance Amazon EC2 saya. Saya bisa masuk dengan root MySQL dengan perintah ini:
mysql -u root -p
Lalu saya membuat tagihan pengguna baru dengan host%
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Memberikan semua hak istimewa untuk tagihan pengguna:
grant all privileges on *.* to 'bill'@'%' with grant option;
Lalu saya keluar dari pengguna root dan mencoba masuk dengan tagihan:
mysql -u bill -p
memasukkan kata sandi yang benar dan mendapatkan kesalahan ini:
GALAT 1045 (28000): Akses ditolak untuk 'tagihan' @ 'localhost' pengguna (menggunakan kata sandi: YES)
mysql
access-denied
Ali
sumber
sumber
FLUSH PRIVILEGES
?Jawaban:
Anda mungkin memiliki pengguna anonim
''@'localhost'
atau''@'127.0.0.1'
.Sesuai manual :
Karenanya, pengguna anonim seperti itu akan "menutupi" pengguna lain seperti
'[any_username]'@'%'
saat menyambung darilocalhost
.'bill'@'localhost'
tidak cocok'bill'@'%'
, tetapi akan cocok (misalnya)''@'localhost'
sebelum tangan.Solusi yang disarankan adalah menghapus pengguna anonim ini (ini biasanya hal yang baik untuk dilakukan).
Hasil edit di bawah ini sebagian besar tidak relevan dengan pertanyaan utama. Ini hanya dimaksudkan untuk menjawab beberapa pertanyaan yang diajukan dalam komentar lain dalam utas ini.
Edit 1
Mengotentikasi
'bill'@'%'
melalui soket.Edit 2
Pengaturan yang sama persis, kecuali saya mengaktifkan kembali jaringan, dan sekarang saya membuat pengguna anonim
''@'localhost'
.Edit 3
Situasi yang sama seperti pada edit 2, sekarang memberikan kata sandi pengguna anonim.
Kesimpulan 1, dari edit 1: Seseorang dapat mengotentikasi
'bill'@'%'
melalui soket.Kesimpulan 2, dari edit 2: Apakah seseorang terhubung melalui TCP atau melalui soket tidak berdampak pada proses otentikasi (kecuali seseorang tidak dapat terhubung seperti orang lain kecuali
'something'@'localhost'
melalui soket, jelas).Kesimpulan 3, dari edit 3: Meskipun saya tentukan
-ubill
, saya telah diberi akses sebagai pengguna anonim. Ini karena "aturan penyortiran" yang disarankan di atas. Perhatikan bahwa di sebagian besar instalasi default, ada kata sandi, pengguna anonim (dan harus diamankan / dihapus).sumber
DROP USER ''@'localhost';
. Mereka tidak diperlukan untuk tujuan khusus.Mencoba:
sumber
Ketika kamu berlari
dan mendapat kesalahan ini
mysqld mengharapkan Anda terhubung dengan
bill@localhost
Coba buat
bill@localhost
Jika Anda ingin terhubung dari jarak jauh, Anda harus menentukan nama DNS, IP publik, atau 127.0.0.1 menggunakan TCP / IP:
Setelah Anda masuk, jalankan ini
USER () melaporkan bagaimana Anda mencoba mengotentikasi di MySQL
CURRENT_USER () melaporkan bagaimana Anda diizinkan untuk mengautentikasi di MySQL dari tabel mysql.user
Ini akan memberi Anda pandangan yang lebih baik tentang bagaimana dan mengapa Anda diizinkan masuk ke mysql. Mengapa pandangan ini penting untuk diketahui? Ini ada hubungannya dengan protokol pemesanan otentikasi pengguna.
Berikut ini sebuah contoh: Saya akan membuat pengguna anonim di desktop MySQL saya
OK, perhatikan saya masuk sebagai pengguna anonim:
Pemesanan otentikasi sangat ketat. Ini memeriksa dari yang paling spesifik ke yang paling sedikit. Saya menulis tentang gaya autentasi ini di DBA StackExchange .
Jangan lupa untuk secara eksplisit memanggil TCP sebagai protokol untuk klien mysql bila perlu.
sumber
'bill'@'localhost'
harus cocok'bill@%'
, bukan?SELECT USER(),CURRENT_USER();
. Anda hampir tidak pernah melihat pengguna anonim muncul dari dua fungsi ini kecuali dalam pengaturan yang sangat buruk.mysql.user
. Bahkan, jika Anda membaca jawaban saya lagi, Anda akan melihat bahwa saya mengatakan (sebenarnya, manual mengatakan) urutan pengurutan didasarkan padahost
kolom pertama. Anda banyak menulis tentang cara memeriksa kredensial Anda saat ini, tetapi saya melihat sedikit informasi mengapa'bill'@'localhost'
tidak bisa masuk'bill'@'%'
, yang merupakan pertanyaan hari ini AFAIK. OP mungkin memiliki pengaturan yang buruk, ini sebabnya ia mendapatkan kesalahan ini.--protocol=TCP
adalah kuncinya. Terima kasih banyak!Sangat terlambat untuk ini
Saya mencoba semua jawaban lain ini dan menjalankan banyak versi berbeda
mysql -u root -p
tetapi tidak pernah hanya berlarimysql -u root -p
Dan hanya menekan
[ENTER]
kata sandi.Setelah saya lakukan itu berhasil. Semoga ini bisa membantu seseorang.
sumber
Masalah terkait dalam kasus saya mencoba terhubung menggunakan:
Spasi IS ternyata diperbolehkan antara -u # uname # tetapi BUKAN antara -p dan # password #
Karena itu diperlukan:
Kalau tidak dengan spasi putih antara -p mypass mysql mengambil 'mypass' sebagai nama db
sumber
Saat Anda mengetik
mysql -u root -p
, Anda tersambung ke server mysql melalui soket unix lokal.Namun hibah yang Anda berikan,
'bill'@'%'
hanya cocok dengan koneksi TCP / IP yang cukup aneh.Jika Anda ingin memberikan akses ke soket unix lokal, Anda perlu memberikan hak istimewa ke 'tagihan' @ 'localhost', yang cukup aneh tidak sama dengan 'bill'@'127.0.0.1'
Anda juga bisa terhubung menggunakan TCP / IP dengan klien baris perintah mysql, agar sesuai dengan hak istimewa yang sudah Anda berikan, misalnya menjalankan
mysql -u root -p -h 192.168.1.123
atau alamat IP lokal mana pun yang dimiliki kotak Anda.sumber
skip-networking
'bill'@'%'
melalui soket pada v5.5.Jika Anda lupa kata sandi atau ingin mengubah kata sandi. Anda dapat mengikuti langkah-langkah ini:
Bingo! Anda dapat menghubungkan database Anda dengan nama pengguna dan kata sandi baru Anda:
sumber
mysql.server stop
. Dalam kasus saya, saya tidak dapat memperbarui kolom pengguna karena tidak ada satu; juga tidak dapat membuat satu karena dalam mode aman. Untuk apa yang saya lakukan saat ini saya tidak peduli, tapi saya sangat menghargai jawaban format ini dengan input & output tepat yang ditampilkan. Terima kasih!Simpan diri Anda dari sakit kepala UTAMA ... Masalah Anda mungkin adalah bahwa Anda melewatkan tanda kutip di sekitar kata sandi. Setidaknya itulah kasus saya yang memutar saya selama 3 jam.
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
Cari "Ini adalah file opsi pengguna yang khas:" dan lihat contoh yang mereka nyatakan di sana. Semoga beruntung, dan saya berharap bisa menyelamatkan orang lain beberapa saat.
sumber
Solusinya adalah menghapus pengguna anonim (Apa saja)!
Saya juga menghadapi masalah yang sama pada pengaturan server oleh orang lain. Saya biasanya tidak memilih untuk membuat pengguna anonim setelah menginstal MySQL, jadi saya tidak memperhatikan ini. Awalnya saya masuk sebagai pengguna "root" dan menciptakan beberapa pengguna "normal" (alias pengguna dengan hak istimewa hanya pada dbs dengan nama pengguna mereka sebagai awalan), kemudian logout, kemudian melanjutkan untuk memverifikasi pengguna normal pertama. Saya tidak bisa masuk. Baik melalui phpMyAdmin, maupun via shell. Ternyata, pelakunya adalah pengguna "Apa saja" ini.
sumber
Saya memiliki masalah yang agak mirip - pada upaya pertama saya untuk masuk ke MySQL, karena
root
, ia memberi tahu saya akses ditolak. Ternyata saya lupa menggunakansudo
...Jadi, jika Anda gagal pada
root
upaya pertama, coba:dan kemudian masukkan kata sandi Anda, ini harus bekerja.
sumber
Solusi terbaik yang saya temukan untuk diri saya adalah.
pengguna saya adalah sonar dan setiap kali saya mencoba untuk terhubung ke database saya dari eksternal atau mesin lain saya mendapatkan error
Juga ketika saya mencoba ini dari komputer lain dan melalui pekerjaan Jenkins URL saya untuk mengakses adalah
jika Anda ingin terhubung dari jarak jauh, Anda dapat menentukannya dengan berbagai cara sebagai berikut:
Untuk mengakses ini dengan URL Anda hanya perlu menjalankan query berikut.
sumber
Oke, saya tidak yakin tapi mungkin ini file my.cnf di dalam direktori instalasi mysql adalah penyebabnya. Komentari baris ini dan masalahnya mungkin teratasi.
sumber
Hanya ingin memberi tahu Anda keadaan yang tidak biasa saya menerima kesalahan yang sama. Mungkin ini membantu seseorang di masa depan.
Saya telah mengembangkan beberapa pandangan dasar, dibuat di situs pengembangan dan mentransfernya ke lokasi produksi. Kemudian pada minggu itu saya mengubah skrip PHP dan tiba-tiba muncul kesalahan bahwa Access ditolak untuk pengguna 'local-web-user' @ 'localhost'. Objek sumber data tidak berubah, jadi saya berkonsentrasi pada pengguna database di MySQL, khawatir sementara itu seseorang meretas situs web saya. Untungnya sisa situs tampaknya tidak terluka.
Kemudian ternyata bahwa pandangannya adalah pelakunya. Transfer objek kami dilakukan menggunakan pengguna lain (dan jarak jauh: admin @ ip-address) daripada pengguna situs web lokal. Jadi pandangan dibuat dengan 'admin' @ 'ip-address' sebagai definisi. Tampilan pembuatan SECURITY default adalah
Ketika pengguna web-lokal mencoba menggunakan tampilan itu tersandung pada hak istimewa yang kurang dari definisi untuk menggunakan tabel. Setelah keamanan diubah menjadi:
masalah telah teratasi. Masalah sebenarnya sangat berbeda dari yang diantisipasi berdasarkan pesan kesalahan.
sumber
Ini perbedaan antara:
dan
Periksa:
Perintah
akses tersirat ke 'tagihan' @ 'localhost' dan BUKAN ke 'tagihan' @ '%'.
Tidak ada izin untuk 'tagihan' @ 'localhost'
Anda mendapatkan kesalahan:
memecahkan masalah:
sumber
Ini juga terjadi ketika kata sandi Anda mengandung beberapa karakter khusus seperti @, $, dll. Untuk menghindari situasi ini, Anda dapat membungkus kata sandi dalam tanda kutip tunggal:
Atau sebaliknya jangan gunakan kata sandi saat memasukkan. Biarkan kosong dan ketikkan ketika terminal bertanya. Ini cara yang disarankan.
sumber
pwgen
. Hari ini saya membuat yang baru untuk database MySQL dan penggunanya. Sayangnya kata sandi tersebut mengandung "backslash" yang tidak saya identifikasi sebagai kesalahan asal (saya bahkan tidak memikirkannya). Jadi, saya mencari solusi selama berjam-jam. Setelah mengatur kata sandi ke "123" dengan putus asa, login akhirnya berhasil. ... Pengguna harus menyadari bahwa beberapa karakter khusus dapat menyebabkan masalah karena MySQL tidak menunjukkan peringatan tentang penggunaan kata sandi seperti "daiy4ha4in7chooshuiphie \ Th * aew", misalnya.Bagi saya, masalah ini disebabkan oleh fitur baru MySQL 5.7.2:
user
entri diabaikan jikaplugin
bidangnya kosong.Atur untuk eg
mysql_native_password
untuk mengaktifkannya kembali:Lihat catatan rilis untuk MySQL 5.7.2 , di bawah «Catatan Otentikasi».
Untuk beberapa alasan (mungkin karena hash kata sandi pra-4.1 saya dihapus),
mysql_upgrade
skrip tidak menetapkan nilai plugin default.Saya mengetahuinya dengan memperhatikan pesan peringatan berikut di
/var/log/mysql/error.log
:Saya memposting jawaban ini di sini untuk mungkin menyelamatkan seseorang dari menggunakan jumlah waktu yang sama konyol pada ini seperti yang saya lakukan.
sumber
Tidak yakin apakah ada orang lain yang akan membantu ini, tetapi saya menemukan kesalahan yang sama dan mencari seluruh pengguna anonim ... dan tidak ada. Masalahnya akhirnya adalah bahwa akun pengguna diatur ke "Memerlukan SSL" - yang saya temukan di PHPMyAdmin dengan masuk ke Akun Pengguna dan mengklik Edit Hak Istimewa untuk pengguna. Segera setelah saya menghapus centang opsi ini, semuanya berjalan seperti yang diharapkan!
sumber
Ringkasan Debugging
Ada kemungkinan besar, Anda mungkin pernah mengalami masalah ini beberapa kali dalam pekerjaan Anda. Masalah ini sering terjadi pada saya karena kesalahan memasukkan nama pengguna atau kata sandi. Meskipun ini adalah salah satu alasannya, ada banyak peluang lain Anda mungkin mendapatkan masalah ini. Terkadang, tampilannya sangat mirip, tetapi ketika Anda menggali lebih dalam, Anda akan menyadari banyak faktor yang berkontribusi terhadap kesalahan ini. Posting ini akan menjelaskan secara rinci, sebagian besar alasan umum dan mengatasi masalah ini.
Alasan yang mungkin:
Ini adalah alasan paling umum untuk kesalahan ini. Jika Anda salah memasukkan nama pengguna atau kata sandi, pasti Anda akan mendapatkan kesalahan ini.
Larutan:
Solusi untuk jenis kesalahan ini sangat sederhana. Cukup masukkan nama pengguna dan kata sandi yang benar. Kesalahan ini akan diatasi. Jika Anda lupa kata sandi, Anda dapat mengatur ulang nama pengguna / kata sandi. Jika Anda lupa kata sandi untuk admin / akun root, ada banyak cara untuk mengatur ulang / menangkap kembali kata sandi root. Saya akan menerbitkan posting lain tentang cara mengatur ulang kata sandi root jika Anda lupa kata sandi root.
MySQL menyediakan batasan berbasis host untuk akses pengguna sebagai fitur keamanan. Di lingkungan produksi kami, kami biasanya membatasi permintaan akses hanya ke server Aplikasi. Fitur ini sangat membantu dalam banyak skenario produksi.
Larutan:
Saat Anda menghadapi masalah jenis ini, periksa terlebih dahulu apakah host Anda diizinkan atau tidak dengan memeriksa tabel mysql.user. Jika tidak ditentukan, Anda dapat memperbarui atau menyisipkan catatan baru ke tabel mysql.user. Secara umum, mengakses sebagai pengguna root dari mesin jarak jauh dinonaktifkan dan itu bukan praktik terbaik, karena masalah keamanan. Jika Anda memiliki persyaratan untuk mengakses server Anda dari beberapa mesin, berikan akses hanya ke mesin tersebut. Lebih baik tidak menggunakan wildcard (%) dan memberikan akses universal. Biarkan saya memperbarui tabel mysql.user, sekarang demouser dapat mengakses server MySQL dari host apa pun.
Jenis kesalahan ini terjadi ketika pengguna, yang Anda coba akses tidak ada di server MySQL.
Solusi:
Saat Anda menghadapi masalah jenis ini, cukup periksa apakah pengguna ada di tabel mysql.user atau tidak. Jika catatan tidak ada, pengguna tidak dapat mengakses. Jika ada persyaratan bagi pengguna untuk mengakses, buat pengguna baru dengan nama pengguna itu.
Poin penting
Tidak disarankan untuk menggunakan wildcard saat mendefinisikan host pengguna, cobalah untuk menggunakan nama host yang tepat.
Nonaktifkan login root dari mesin jarak jauh.
Gunakan konsep pengguna proxy.
Ada beberapa konsep lain yang terkait dengan topik ini dan masuk ke detail dari topik-topik itu sangat berbeda ruang lingkup artikel ini. Kami akan melihat topik terkait berikut di artikel mendatang.
Saya harap postingan ini akan membantu Anda memperbaiki MySQL Error Code 1045 Access yang ditolak untuk pengguna di MySQL.
sumber
Saya harap Anda tidak melakukan lebih banyak kerusakan dengan juga menghapus pengguna debian-sys-Maint di mysql
Apakah daemon mysql Anda berjalan dengan cara normal. Mulai klien mysql Anda seperti yang ditunjukkan di bawah ini
Di terminal lain,
cat
file/etc/mysql/debian.cnf
. File itu berisi kata sandi; rekatkan kata sandi itu saat diminta.http://ubuntuforums.org/showthread.php?t=1836919
sumber
Saya menemukan case lain yang muncul di permukaan sebagai case edge; Saya dapat mengekspor ke sistem file, melalui SELECT INTO .. OUTFILE sebagai root, tetapi tidak sebagai pengguna biasa. Meskipun ini mungkin masalah izin, saya sudah melihatnya, dan tidak melihat apa pun yang jelas. Yang bisa saya katakan adalah menjalankan kueri sebagai pengguna biasa yang memiliki semua izin pada basis data yang dipertanyakan mengembalikan kesalahan akses ditolak yang mengarahkan saya ke topik ini. Ketika saya menemukan transkrip sukses menggunakan SELECT INTO ... OUTFILE di proyek lama, saya perhatikan bahwa saya login sebagai root. Benar saja, ketika saya login sebagai root, kueri berjalan seperti yang diharapkan.
sumber
Pembaruan: Pada v8.0.15 (mungkin versi ini) the
PASSWORD()
fungsi tidak berfungsi.Kamu harus:
sudo mysqld_safe --skip-grant-tables
mysql -u root
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
exit;
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
sumber
Ketika Anda menjalankan
mysql -u bill -p
,localhost
diselesaikan ke ip Anda, karena itu adalah 127.0.0.1 dan dalam/etc/hosts
file Anda , sebagai default127.0.0.1 localhost
ada. Jadi, mysql menafsirkan Anda sebagaibill@localhost
yang tidak diberikanbill@'%'
. Inilah sebabnya mengapa ada 2 catatan berbeda untukroot
pengguna dalam hasilselect host, user from mysql.user;
kueri.Ada dua cara untuk menangani masalah ini.
Salah satunya adalah menentukan ip yang tidak diselesaikan secara terbalik oleh
/etc/hosts
file saat Anda mencoba masuk. Sebagai contoh, ip server adalah10.0.0.2
. Ketika Anda menjalankan perintahmysql -u bill -p -h 10.0.0.2
, Anda akan bisa masuk. Jika Anda mengetikselect user();
, Anda akan mendapatkannya[email protected]
. Tentu saja, nama domain apa pun tidak boleh diselesaikan ke ip ini di/etc/hosts
file Anda .Kedua, Anda perlu memberikan akses untuk nama domain spesifik ini. Sebab
bill@localhost
, Anda harus memanggil perintahgrant all privileges on *.* to bill@localhost identified by 'billpass';
. Dalam hal ini, Anda dapat masuk dengan perintahmysql -u bill -p
. Setelah masuk,select user();
perintah kembalibill@localhost
.Tapi ini hanya untuk itu Anda mencoba masuk server mysql di host yang sama. Dari host jarak jauh, mysql bertindak sesuai yang diharapkan, '%' akan memberi Anda login.
sumber
Saya menyelesaikan ini dengan menghapus entri 'tagihan' pengguna kereta yang lama (ini adalah bagian penting: baik dari mysql.user dan mysql.db ), kemudian membuat pengguna yang sama dengan sedih sebelumnya:
Berhasil, pengguna terhubung. Sekarang saya akan menghapus beberapa previlegies dari itu :)
sumber
Saya mengalami kesalahan yang sama. Pengaturan yang tidak berfungsi adalah sebagai berikut:
Pengaturan yang diedit di bawah adalah yang membuatnya berfungsi. Perhatikan perbedaannya?
Perbedaannya adalah tanda kutip ganda. Mereka tampaknya cukup signifikan dalam PHP dibandingkan dengan Jawa dan mereka memiliki dampak ketika datang untuk melarikan diri karakter, mengatur URL dan sekarang, meneruskan parameter ke suatu fungsi. Mereka lebih cantik (saya tahu) tetapi selalu menggunakan tanda kutip tunggal sebanyak mungkin maka tanda kutip ganda dapat bersarang di dalamnya jika perlu.
Kesalahan ini muncul ketika saya menguji aplikasi saya pada kotak Linux yang bertentangan dengan lingkungan Windows.
sumber
Saya memiliki masalah yang sama karena kata sandi saya mengandung ";" char melanggar kata sandi saya ketika saya membuatnya pada saat pertama. Perhatian dengan ini jika dapat membantu Anda.
sumber
Ini mungkin berlaku untuk sangat sedikit orang, tetapi begini saja. Jangan gunakan tanda seru
!
di kata sandi Anda.Saya lakukan dan mendapatkan kesalahan di atas menggunakan MariaDB. Ketika saya menyederhanakannya menjadi hanya angka dan huruf itu berhasil. Karakter lain seperti
@
dan$
berfungsi dengan baik - Saya menggunakan karakter tersebut di pengguna yang berbeda pada contoh yang sama.Tanggapan kelima di alamat ini membuat saya memperbaiki saya.
sumber
Di Windows, berikut ini cara mengatasinya:
C:\Program Files,C:\Program Files (x86)
danC:\ProgramData
sumber
Ini juga dapat terjadi jika MySQL berjalan pada OS yang case-insensitive, seperti Windows.
mis. Saya menemukan bahwa upaya menyambung ke database menggunakan kredensial ini gagal:
mysql>
grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105
Tetapi, ini berhasil:
mysql>
grant select on databasev105.* to 'specialuser' identified by 's3curepa5wrd';
$ mysql -specialuser' -h10.300.300.400 databaseV105 -p
sumber
Jika dbname, nama pengguna, kata sandi, dll panjang string Anda melebihi nilai yang diuraikan di https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html#grant-tables-scope-column-properties , Anda mungkin juga gagal masuk, karena ini dalam kasus saya.
sumber
Sekarang! Solusi untuk:
Wampserver 3.2.0 instalasi atau peningkatan baru
Mungkin
xamp
menggunakanmariaDB
sebagai default juga.Wamp
Server datang denganmariaDB
dan mysql, dan menginstalmariaDB
sebagai default pada port 3306 dan mysql pada 3307, port terkadang 3308.Terhubung ke
mysql
!Pada instalasi diminta untuk menggunakan
mariaDB
atauMySql
, Tapi mariaDB diperiksa sebagai default dan Anda tidak dapat mengubahnya, centangmysql
opsi dan instal.ketika instalasi selesai keduanya akan berjalan
mariaDB
pada port default 3306 danmysql
pada port lain 3307 atau 3308.Klik kanan pada
wampserver
ikon di mana runing-nya harus berada di sudut kanan bawah, goto tools dan lihatmysql
porting runing Anda yang benar .Dan sertakan dalam koneksi database Anda sama dengan folowng:
Note :
Saya menggunakan pdo.Lihat di sini untuk lebih lanjut: https://sourceforge.net/projects/wampserver/
sumber