Akses ditolak untuk pengguna 'test' @ 'localhost' (menggunakan kata sandi: YES) kecuali pengguna root

100

Saya menghadapi masalah dengan pengguna non root / admin mysql, saya mengikuti langkah-langkah di bawah ini untuk membuat pengguna dan hak istimewanya, perbaiki saya jika saya melakukan kesalahan,

saya menginstal mysqlpada RHEL 5.7 64bit, paket disebutkan di bawah ini, setelah saya melakukan rpm installkita

  1. membuat db mysql menggunakan mysql_install_db , lalu
  2. memulai layanan mysql kemudian
  3. menggunakan mysql_upgradejuga yang kami lakukan ke server.

Setelah proses ini saya dapat masuk sebagai roottetapi dengan pengguna non-root saya tidak dapat masuk ke server:

[root@clustertest3 ~]# rpm -qa | grep MySQL
MySQL-client-advanced-5.5.21-1.rhel5
MySQL-server-advanced-5.5.21-1.rhel5


[root@clustertest3 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[root@clustertest3 ~]# ls -ld /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Nov  30 11:09 /var/lib/mysql/mysql.sock

mysql> CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER()         | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

[root@clustertest3 ~]# mysql -ugolden -p
Enter password:
ERROR 1045 (28000): Access denied for user 'golden'@'localhost' (using password: YES)

Ini masalah yang saya hadapi, apakah ada solusi untuk ini?

pengguna3061726
sumber
Bisakah Anda login sebagai root dan kemudian melakukannyaSELECT * FROM mysql.user
Noam Rathaus
1
Terima jawaban yang berhasil untuk Anda, sehingga pengguna lain tahu bagaimana Anda memecahkan masalah Anda.
Pengguna yang bukan pengguna

Jawaban:

59

Jangan berikan semua hak istimewa atas semua database kepada pengguna non-root, ini tidak aman (dan Anda sudah memiliki "root" dengan peran itu)

GRANT <privileges> ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Pernyataan ini membuat pengguna baru dan memberikan hak istimewa yang dipilih untuk itu. YAITU:

GRANT INSERT, SELECT, DELETE, UPDATE ON database.* TO 'user'@'localhost' IDENTIFIED BY 'password';

Lihat dokumennya untuk melihat detail semua hak istimewa

EDIT: Anda dapat mencari info lebih lanjut dengan kueri ini (masuk sebagai "root"):

select Host, User from mysql.user;

Untuk melihat apa yang terjadi

Alberto Megía
sumber
Saya tidak setuju dengan pernyataan tentang root itu. Ya, Anda seharusnya tidak memberikan keistimewaan super secara sembarangan. Namun Anda juga umumnya tidak boleh menggunakan akun bersama karena Anda tidak memiliki jejak audit yang tepat dalam DB. Jika Anda pasti memiliki akun bersama seperti root, Anda memerlukan hal-hal lain yang melingkupinya untuk memastikan jejak audit tetap utuh.
krad
36

Jika Anda terhubung ke MySQL menggunakan mesin jarak jauh (Contoh meja kerja) dll., Gunakan langkah-langkah berikut untuk menghilangkan kesalahan ini pada OS tempat MySQL diinstal

mysql -u root -p

CREATE USER '<<username>>'@'%%' IDENTIFIED BY '<<password>>';
GRANT ALL PRIVILEGES ON * . * TO '<<username>>'@'%%';
FLUSH PRIVILEGES;

Coba masuk ke instance MYSQL.
Ini berhasil bagi saya untuk menghilangkan kesalahan ini.

Makarand Kulkarni
sumber
1
Bahkan itu pun tidak berfungsi, karena ia meminta kesalahan bahkan saat menjalankan "mysql -u root -p"
Marian Klühspies
26

Mencoba:

CREATE USER 'golden'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'localhost';
FLUSH PRIVILEGES;

Atau bahkan lebih baik gunakan: mysql_setpermissionuntuk membuat pengguna

Noam Rathaus
sumber
1
Ini tidak menyelesaikan masalah. BUAT PENGGUNA 'goldy' @ '%' DIIDENTIFIKASI OLEH 'some_pass'; adalah kueri yang valid
pratim_b
Untuk beberapa alasan miliknya %yang seharusnya berfungsi untuk semua host, tidak menyelesaikannya. Jadi dengan menentukan localhostitu harus bekerja. Jika itu TIDAK berhasil, ada sesuatu yang salah di mysql
Noam Rathaus
13

Sepertinya Anda mencoba menjadikan pengguna 'golden' @ '%' tetapi pengguna lain dengan nama 'golden' @ 'localhost' menghalangi / didahulukan.

Lakukan perintah ini untuk melihat pengguna:

SELECT user,host FROM mysql.user;

Anda akan melihat dua entri:

1) pengguna = emas, tuan rumah =%

2) pengguna = emas, host = localhost

Lakukan Perintah ini:

DROP User 'golden'@'localhost';
DROP User 'golden'@'%';

Mulai ulang MySQL Workbench.

Kemudian lakukan lagi perintah asli Anda:

CREATE USER 'golden'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'golden'@'%';

Kemudian saat Anda mencoba masuk ke MySQL, ketik seperti ini:

masukkan deskripsi gambar di sini

Tekan 'Uji Koneksi' dan masukkan 'kata sandi' kata sandi Anda.

Gen
sumber
2
Ini adalah satu-satunya solusi yang saya temukan di sini yang memiliki arti penting. Terima kasih baik pak.
Sumuk Shashidhar
9

Pertama saya membuat pengguna menggunakan:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

Setelah Googling dan melihat ini , saya memperbarui kata sandi pengguna menggunakan:

SET PASSWORD FOR 'user'@'localhost' = PASSWORD('password_txt');

dan saya bisa terhubung sesudahnya.

ako
sumber
3

Untuk siapa pun yang telah melakukan semua saran tetapi masalahnya masih berlanjut.

Periksa prosedur yang tersimpan dan lihat PENILAI. Para definisi tersebut mungkin sudah tidak ada lagi.

Masalah saya muncul ketika kami mengubah host wildcard (%) menjadi khusus IP, membuat database lebih aman. Sayangnya ada beberapa tampilan yang masih menggunakan 'user' @ '%' meskipun 'user' @ '172 ....' secara teknis benar.

Yorro
sumber
Terima kasih telah membawa saya ke jalur yang benar. Saya bahkan tidak tahu tentang pengaturan Keamanan SQL pada tampilan dan prosedur tersimpan. Saya akhirnya mengatur Keamanan SQL ke Invoker pada pandangan saya sehingga menggunakan izin pengguna yang menjalankan perintah daripada pengguna yang membuat tampilan. Berikut ini tautan untuk referensi: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin
2

Saya juga memiliki masalah serupa, dan kemudian saya menemukannya karena saya mengubah nama host saya (bukan localhost).

Oleh karena itu, saya menyelesaikannya dengan menentukan --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1
4af2e9eb6.dll
sumber
2

Menurut cara Anda membuat pengguna, MySQL menafsirkan dengan cara yang berbeda. Misalnya, jika Anda membuat pengguna seperti ini:

create user user01 identified by 'test01';

MySQL mengharapkan Anda memberikan beberapa hak istimewa untuk menggunakan grant all on <your_db>.* to user01;

Jangan lupa flush privileges;

Tetapi, jika Anda membuat pengguna seperti itu (dengan meneruskan alamat IP), Anda harus mengubahnya menjadi:

create user 'user02'@'localhost' identified by 'teste02';

jadi, untuk memberikan beberapa hak istimewa, Anda harus melakukan itu:

grant all on <your_db>.* to user02@localhost;
flush privileges;
Antonio Marcos
sumber
2

Pastikan pengguna memiliki entri localhost di tabel pengguna. Itulah masalah yang saya alami. EX:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
RyanT
sumber
0

Dalam kasus saya, kesalahan yang sama terjadi karena saya mencoba menggunakan mysql dengan hanya mengetik "mysql" alih-alih "mysql -u root -p"

lfvv
sumber
0

hubungkan server Anda dari mysqlworkbench dan jalankan perintah ini-> ALTER USER 'root' @ 'localhost' DIIDENTIFIKASI OLEH 'yourpassword';

Sachin
sumber
0

Untuk pencarian yang mengganggu sampai di sini setelah mencari pesan kesalahan ini:

Akses ditolak untuk pengguna 'someuser @ewhere' (menggunakan kata sandi: YA)

Masalahnya bagi saya adalah tidak menyertakan kata sandi dalam tanda kutip. misalnya. Saya perlu menggunakan, -p'password'bukan-ppassword

Routeburn
sumber
-8

Cukup tambahkan nama komputer alih-alih 'localhost' di nama host atau alamat Host MySQL.

vipin
sumber