'Test' @ 'localhost' kullanıcısı için erişim reddedildi (şifre kullanılarak: YES), root kullanıcısı hariç


102

Mysql olmayan root / admin kullanıcısı ile sorun yaşıyorum, kullanıcı ve ayrıcalıklarını oluşturmak için aşağıdaki adımları takip ediyorum, yanlış yapıyorsam beni düzeltin,

mysqlüzerine kuruyorum RHEL 5.7 64bit, paketler aşağıda belirtilmiştir, bir kez yaptıktan sonra rpm installbiz

  1. kullanarak mysql db oluşturmak mysql_install_db, sonra
  2. mysql hizmetini başlattıktan sonra
  3. kullanarak mysql_upgradeda sunucuya yapıyoruz.

Bu işlemden sonra olarak giriş yapabilirim, rootancak root olmayan bir kullanıcıyla sunucuya giriş yapamıyorum:

[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)

Karşılaştığım sorun bu, buna herhangi bir çözüm var mı?


Kök olarak giriş yapıp sonra yapabilir misinizSELECT * FROM mysql.user
Noam Rathaus

1
Sizin için işe yarayan cevabı kabul edin, böylece diğer kullanıcılar probleminizi nasıl çözdüğünüzü bilirler.
kullanıcı olmayan kullanıcı

Yanıtlar:


60

Root olmayan bir kullanıcıya tüm veritabanları üzerinde tüm ayrıcalıkları vermeyin, bu güvenli değildir (ve zaten bu role sahip "root" a sahipsiniz)

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

Bu ifade, yeni bir kullanıcı oluşturur ve ona seçilen ayrıcalıkları verir. IE:

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

Tüm ayrıcalıkları ayrıntılı olarak görmek için dokümanlara bir göz atın

DÜZENLEME: Bu sorgu ile daha fazla bilgi arayabilirsiniz ("kök" olarak oturum açın):

select Host, User from mysql.user;

Ne olduğunu görmek için


Kök hakkındaki bu ifadeye katılmıyorum. Evet, isteksizce süper ayrıcalıklar vermemelisiniz. Bununla birlikte, DB'de uygun bir denetim izine sahip olmadığınız için genel olarak paylaşılan hesapları kullanmamalısınız. Kök gibi paylaşılan hesaplara sahip olmanız gerekiyorsa, denetim izinin sağlam olduğundan emin olmak için etrafına sarılmış başka şeyler de gerekir.
krad

37

Uzak makineyi (Örnek çalışma tezgahı) vb. Kullanarak MySQL'e bağlanıyorsanız, MySQL'in kurulu olduğu işletim sisteminde bu hatayı ortadan kaldırmak için aşağıdaki adımları kullanın.

mysql -u root -p

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

MYSQL örneğinde oturum açmayı deneyin.
Bu, bu hatayı ortadan kaldırmak için benim için çalıştı.


1
Bu bile çalışmıyor, "mysql -u root -p" çalıştırılırken bile hata
veriyor

26

Deneyin:

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

Veya daha da iyi kullanım: mysql_setpermissionkullanıcıyı oluşturmak için


1
Bu sorunu çözmez. 'Bazı_pass' TARAFINDAN TANIMLANAN KULLANICI 'goldy' @ '%' OLUŞTUR; geçerli bir sorgu
pratim_b

Nedense %tüm ev sahibi için çalışması gereken, onu çözmüyor. Yani belirterek localhostişe yaramalı . Bu işe yaramazsa, mysql'de bir şeyler kapalı
Noam Rathaus

14

Görünüşe göre bir kullanıcıyı 'altın' @ '%' yapmaya çalışıyorsunuz, ancak 'golden' @ 'localhost' adında farklı bir kullanıcı araya giriyor / önceliğe sahip.

Kullanıcıları görmek için şu komutu yapın:

SELECT user,host FROM mysql.user;

İki giriş görmelisiniz:

1) kullanıcı = altın, ana bilgisayar =%

2) kullanıcı = altın, ana bilgisayar = yerel ana bilgisayar

Şu Komutu yapın:

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

MySQL Workbench'i yeniden başlatın.

Ardından orijinal komutlarınızı tekrar yapın:

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

Daha sonra MySQL'de oturum açmaya gittiğinizde, şu şekilde yazın:

görüntü açıklamasını buraya girin

'Bağlantıyı Test Et'e basın ve şifrenizi' şifrenizi 'girin.


2
Burada bulduğum ve önemi olan tek çözüm bu. Teşekkür ederim efendim.
Sumuk Shashidhar

8

İlk önce kullanıcıyı kullanarak oluşturdum:

CREATE user user@localhost IDENTIFIED BY 'password_txt';

Googling ve gördükten sonra bu , ben kullanan kullanıcının şifresini güncelleme:

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

ve daha sonra bağlanabilirim.


3

Tüm tavsiyeleri veren herkes için ama sorun hala devam ediyor.

Depolanan yordamı kontrol edin ve TANIMLAYICILARI görüntüleyin. Bu tanımlayıcılar artık mevcut olmayabilir.

Sorunum, joker ana bilgisayarı (%) IP'ye özel olarak değiştirdiğimizde ortaya çıktı ve bu da veritabanını daha güvenli hale getirdi. Ne yazık ki, 'kullanici' @ '172 ....' teknik olarak doğru olsa bile, hala 'kullanıcı' @ '%' kullanan bazı görünümler var.


Beni doğru yola soktuğun için teşekkürler. Görünümler ve depolanmış prosedürler üzerindeki SQL Güvenliği ayarını bile bilmiyordum. Görünümü oluşturan kullanıcı yerine komutu yürüten kullanıcının izinlerini kullanması için SQL Güvenliği'ni görünümlerimde Invoker olarak ayarladım. İşte referans için bir bağlantı: dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html
Justin

2

Bende de benzer bir sorun var ve daha sonra ana bilgisayar adımı değiştirdiğim için buldum (değiştirmedim localhost).

Bu nedenle, şunu belirterek çözdüm --host=127.0.0.1

mysql -p mydatabase --host=127.0.0.1

2

Kullanıcınızı oluşturma şeklinize göre, MySQL farklı bir şekilde yorumlar. Örneğin, böyle bir kullanıcı oluşturursanız:

create user user01 identified by 'test01';

MySQL, kullanarak bazı ayrıcalıklar vermenizi bekliyor grant all on <your_db>.* to user01;

Unutma flush privileges;

Ancak, böyle bir kullanıcı oluşturursanız (bir IP adresi ileterek), bunu şu şekilde değiştirmeniz gerekir:

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

bu nedenle, bazı ayrıcalıklar vermek için bunu yapmanız gerekir:

grant all on <your_db>.* to user02@localhost;
flush privileges;

2

Kullanıcının kullanıcılar tablosunda bir localhost girişi olduğundan emin olun. Benim yaşadığım sorun buydu. EX:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

1

Bu hata mesajını aradıktan sonra buraya gelen rahatsız edici arama için:

'Someuser @ somewhere' kullanıcısı için erişim reddedildi (şifre kullanılarak: YES)

Benim için sorun, şifreyi tırnak içine almak değildi. Örneğin. Ben kullanmak için gerekli -p'password'yerine-ppassword


0

Benim durumumda aynı hata, "mysql -u root -p" yerine "mysql" yazarak mysql kullanmaya çalıştığım için de oluyor


0

sunucunuzu mysqlworkbench üzerinden bağlayın ve bu komutu çalıştırın-> ALTER USER 'root' @ 'localhost' 'your password' TARAFINDAN TANIMLANMIŞTIR;


-8

Ana bilgisayar adına veya MySQL Ana Bilgisayar adresine 'localhost' yerine bilgisayar adı eklemeniz yeterlidir.

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.