15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
16.11.2023

MySQL’de “SET PASSWORD Has No Significance for User root@localhost” Hatasını Düzeltme

"SET PASSWORD has no significance for user 'root'@'localhost'" hatası, sunucu root hesabı için SET PASSWORD komutunu işlemeyi reddettiğinde MySQL’de oluşur — genellikle root kullanıcısının geleneksel parola tabanlı bir yöntem yerine auth_socket veya unix_socket eklentisi aracılığıyla kimlik doğrulaması yapması nedeniyle. Bu yapılandırmalarda MySQL, kimlik doğrulamasını işletim sistemine devreder ve parola tabanlı kimlik bilgisi değişikliklerini SQL düzeyinde anlamsız kılar.

Bu kılavuz, yönetilen VPS ortamlarında, cPanel tabanlı sunucularda ve güçlendirilmiş üretim sistemlerinde ortaya çıkan uç durumlar dahil olmak üzere tüm temel nedenleri, doğru tanılama sırasını ve birden fazla çözüm yolunu kapsamaktadır.

Bu Hata Neden Oluşur: Temel Neden Analizi

Herhangi bir düzeltme uygulamadan önce tam tetikleyiciyi anlamak çok önemlidir. Hata, geleneksel anlamda bir izin hatası değildir — root hesabı için MySQL’in kimlik doğrulama katmanının tamamen atlandığının bir sinyalidir.

auth_socket / unix_socket Eklentisi

Modern Debian, Ubuntu ve türevlerinde MySQL (ve MariaDB), root kullanıcısını varsayılan olarak auth_socket eklentisi aracılığıyla kimlik doğrulaması yapacak şekilde yapılandırır. Bu eklenti etkin olduğunda MySQL, bir parola kontrol etmek yerine bağlanan işletim sistemi kullanıcısının kimliğini doğrular. Sonuç olarak, SET PASSWORD kullanarak parola belirleme girişimleri reddedilir — sunucu, komutu bu kimlik doğrulama modeli için alakasız kabul eder.

Giriş yaptıktan hemen sonra bunu doğrulayabilirsiniz:

SELECT user, host, plugin, authentication_string
FROM mysql.user
WHERE user = 'root' AND host = 'localhost';

plugin sütunu auth_socket (MySQL) veya unix_socket (MariaDB) döndürüyorsa, bu sizin temel nedeninizdir.

Diğer Katkıda Bulunan Faktörler

  • Yetersiz ayrıcalıklar: Çalıştıran kullanıcı, root’un kimlik bilgilerini değiştirmek için gereken SUPER veya SYSTEM_USER ayrıcalıklarından yoksundur.
  • Kısıtlayıcı my.cnf / my.ini yönergeleri: skip-grant-tables gibi seçenekler veya özel validate_password politikaları parola işlemlerine müdahale edebilir.
  • MySQL sürüm uyumsuzluğu: SET PASSWORD sözdizimi MySQL 8.0’da kullanımdan kaldırıldı ve belirli bağlamlarda kaldırıldı. Tercih edilen yöntem ALTER USER‘dir.
  • Salt okunur sistem tabloları: Bazı bulut veya konteynerleştirilmiş dağıtımlarda mysql sistem şeması kısmen kilitlenmiş olabilir.

Karşılaştırma: SET PASSWORD vs. ALTER USER vs. UPDATE

Bu üç yöntem birbirinin yerine kullanılamaz. MySQL sürümünüz veya kimlik doğrulama eklentiniz için yanlış olanı seçmek, söz konusu hatayı üretir ya da sessizce başarısız olur.

YöntemMySQL Sürüm Desteğiauth_socket ile ÇalışırÖnerilen
SET PASSWORD5.x, kısmen 8.0HayırHayır (kullanımdan kaldırıldı)
ALTER USER5.7+, 8.0+Evet (eklentiyi değiştirir)Evet
UPDATE mysql.userTüm sürümler (flush ile)Evet (düşük seviye)Yalnızca acil durum
mysqladmin passwordTüm sürümlerHayırSınırlı kullanım

Adım Adım Çözüm

Adım 1: MySQL’e Root Olarak Giriş Yapın

auth_socket kullanan sistemlerde, işletim sistemi root kullanıcısı olarak giriş yapmanız gerekir — parola istemi görünmez:

sudo mysql -u root

Sisteminiz parola kimlik doğrulaması kullanıyorsa ve mevcut parolayı biliyorsanız:

mysql -u root -p

Adım 2: Kimlik Doğrulama Eklentisini Onaylayın

Tanılama sorgusunu çalıştırın:

SELECT user, host, plugin, authentication_string
FROM mysql.user
WHERE user = 'root';

Devam etmeden önce plugin sütunundaki değeri not edin. Bu, durumunuza hangi düzeltmenin uygulanacağını belirler.

Adım 3: Mevcut Ayrıcalıkları Doğrulayın

Kimlik doğrulamasını değiştirmeden önce root hesabının izin setini onaylayın:

SHOW GRANTS FOR 'root'@'localhost';

Çıktı GRANT ALL PRIVILEGES ON *.* ... WITH GRANT OPTION içermelidir. İçermiyorsa, muhtemelen yetersiz haklara sahip bir kullanıcı olarak bağlısınız — işletim sistemi düzeyinde güveni çağırmak için sudo mysql kullanarak yeniden kimlik doğrulaması yapın.

Adım 4: Parola Kimlik Doğrulamasına Geçin ve Yeni Parola Belirleyin

Bu, auth_socket veya unix_socket etkin eklenti olduğunda birincil düzeltmedir. ALTER USER ifadesi, tek bir atomik işlemde hem kimlik doğrulama eklentisini değiştirir hem de parolayı belirler:

ALTER USER 'root'@'localhost'
  IDENTIFIED WITH mysql_native_password
  BY 'YourStrongPassword!9#';

FLUSH PRIVILEGES;

MariaDB için eşdeğeri şudur:

ALTER USER 'root'@'localhost'
  IDENTIFIED VIA mysql_native_password
  USING PASSWORD('YourStrongPassword!9#');

FLUSH PRIVILEGES;

> Güvenlik notu: MySQL 8.0.34 ve sonrasında mysql_native_password, caching_sha2_password lehine kullanımdan kaldırılmıştır. Üretim sistemleri için şunu kullanın:

>

> “`sql

> ALTER USER 'root'@'localhost'

> IDENTIFIED WITH caching_sha2_password

> BY 'YourStrongPassword!9#';

> “`

Adım 5: Tam Ayrıcalıkları Verin (Gerekirse)

Adım 3’teki ayrıcalık kontrolü eksik izinleri ortaya koyduysa, bunları açıkça geri yükleyin:

GRANT ALL PRIVILEGES ON *.*
  TO 'root'@'localhost'
  WITH GRANT OPTION;

FLUSH PRIVILEGES;

MySQL 8.0+’da eski GRANT ... IDENTIFIED BY sözdizimini kullanmayın. Bu birleşik sözdizimi kaldırıldı. GRANT ve ALTER USER ifadelerini her zaman ayrı tutun.

Adım 6: Düzeltmeyi Doğrulayın

Eklentinin güncellendiğini onaylayın:

SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

MySQL’den çıkın ve uçtan uca doğrulamak için yeni parolayla yeniden bağlanın:

mysql -u root -p

Acil Durum Yöntemi: skip-grant-tables ile Sıfırlama

Tamamen kilitliyseniz ve kimlik doğrulaması yapamıyorsanız, skip-grant-tables modunu kullanın. Bu, tüm ayrıcalık kontrollerini atlar ve yalnızca kontrollü, çevrimdışı bir bakım penceresinde kullanılmalıdır.

1. MySQL servisini durdurun:

sudo systemctl stop mysql
# or for MariaDB:
sudo systemctl stop mariadb

2. MySQL’i izin tabloları devre dışı olarak başlatın:

sudo mysqld_safe --skip-grant-tables --skip-networking &

--skip-networking bayrağı kritik öneme sahiptir — bu güvensiz durum sırasında uzak bağlantıları engeller.

3. Kimlik bilgileri olmadan bağlanın:

mysql -u root

4. Ayrıcalıkları temizleyin, ardından parolayı güncelleyin:

FLUSH PRIVILEGES;

ALTER USER 'root'@'localhost'
  IDENTIFIED WITH mysql_native_password
  BY 'YourStrongPassword!9#';

FLUSH PRIVILEGES;

5. MySQL’i normal şekilde yeniden başlatın:

sudo systemctl restart mysql

MySQL Yapılandırma Dosyalarını Kontrol Etme ve Ayarlama

my.cnf (Linux) veya my.ini (Windows) dosyası, parola işlemlerine müdahale eden yönergeler içerebilir. Yaygın konumlar:

  • /etc/mysql/my.cnf
  • /etc/my.cnf
  • /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] bölümü altında bu sorunlu yönergeleri kontrol edin:

skip-grant-tables       # Disables all privilege enforcement — remove after recovery
validate_password       # May reject passwords that don't meet complexity rules
bind-address            # Affects remote access, not password changes directly

validate_password seçtiğiniz parolayı reddeden bir politika uyguluyorsa, politika gereksinimlerini karşılayın veya politika düzeyini geçici olarak ayarlayın:

SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 8;

Platforma Özgü Değerlendirmeler

cPanel ve WHM Ortamları

cPanel’li VPS kurulumlarında MySQL root kimlik bilgileri cPanel’in kendisi tarafından yönetilir. Root parolasını WHM dışında manuel olarak değiştirmek, cPanel’in dahili veritabanı bağlantılarını bozabilir. Bu ortamlar için her zaman WHM > SQL Services > Change MySQL Root Password kullanın. CLI kullanmanız gerekiyorsa, cPanel’in depolanan kimlik bilgilerini yeniden senkronize etmek için ardından /usr/local/cpanel/scripts/mysqlpasswd çalıştırın.

Yönetilen VPS Ortamları

Tam root işletim sistemi erişimine sahip olduğunuz bir VPS Hosting ortamında, sudo mysql yaklaşımı (auth_socket kullanarak) en güvenilir giriş noktasıdır. Uygulama yığınınız özellikle parola tabanlı root kimlik doğrulaması gerektirmiyorsa auth_socket‘yi devre dışı bırakmaktan kaçının — işletim sistemi düzeyinde kimlik doğrulama mimari olarak daha güvenlidir.

Dedicated Sunucular

Güçlendirilmiş MySQL yapılandırmaları çalıştıran Dedicated Sunucularda, validate_password eklentisi sıklıkla STRONG politika uygulamasıyla etkinleştirilir. Yedek parolanızın minimum gereksinimleri karşıladığından emin olun: en az 8 karakter, büyük/küçük harf karışımı, rakamlar ve özel karakterler. Mevcut politika ayarlarını şununla kontrol edebilirsiniz:

SHOW VARIABLES LIKE 'validate_password%';

Hatayı Çözdükten Sonra Güvenlik En İyi Uygulamaları

Root parola sorunu çözüldükten sonra bu güçlendirme adımlarını hemen uygulayın:

  • mysql_secure_installation çalıştırın — anonim kullanıcıları, test veritabanlarını ve uzak root girişini kaldırmak için.
  • Uzak root girişini devre dışı bırakın: mysql.user‘da hiçbir 'root'@'%' girişinin bulunmadığından emin olun.
  • Uygulamaya özgü kullanıcılar oluşturun — uygulama bağlantıları için root kullanmak yerine minimum gerekli ayrıcalıklarla.
  • Kimlik bilgilerini döndürün — uygulama yapılandırma dosyalarında (.env, wp-config.php, database.yml) depolananları yeni parolayla eşleşecek şekilde güncelleyin.
  • MySQL bağlantıları için SSL/TLS etkinleştirin — özellikle uygulama sunucunuz ve veritabanı sunucunuz ayrı ana bilgisayarlardaysa geçerlidir. Bunu web katmanınızda geçerli bir SSL Sertifikası ile eşleştirin.
  • mysql.user tablosunu periyodik olarak denetleyin — boş authentication_string değerlerine veya aşırı geniş ana bilgisayar joker karakterlerine sahip hesapları belirlemek için.

Teknik Temel Çıkarımlar Kontrol Listesi

Bu hatayı karşıladığınızda hızlı karar matrisi olarak kullanın:

  • Önce eklentiyi kontrol edin — herhangi bir düzeltme denemeden önce SELECT plugin FROM mysql.user WHERE user='root' çalıştırın.
  • SET PASSWORD değil ALTER USER kullanınSET PASSWORD MySQL 8.0+’da kullanımdan kaldırıldı ve soket tabanlı kimlik doğrulamayla uyumsuz.
  • Ubuntu/Debian sistemlerinde her zaman sudo mysql kullanın — işletim sistemi düzeyinde güven, soket eklentisini devre dışı bırakmadan atlar.
  • Üretimde skip-grant-tables‘yi asla etkin bırakmayın — veritabanı sunucunuzdan tüm erişim kontrolünü kaldırır.
  • MySQL 8.0+’da GRANT‘yi ALTER USER‘den ayırın — birleşik GRANT ... IDENTIFIED BY sözdizimi artık mevcut değil.
  • cPanel sunucularında WHM veya cPanel yeniden senkronizasyon betiğini kullanın — doğrudan CLI değişiklikleri dahili cPanel veritabanı oturumlarını bozar.
  • Düzeltmeyi uçtan uca doğrulayın — oturumunuzu kapatmadan önce yeni kimlik bilgilerinin çalıştığını onaylamak için her değişiklikten sonra mysql -u root -p ile yeniden bağlanın.
  • my.cnf‘yi inceleyinvalidate_password yönergeleri için, ALTER USER başarılı olur ancak parola reddedilirse.

Sıkça Sorulan Sorular

SET PASSWORD neden bazı sunucularda çalışıp diğerlerinde çalışmıyor?

Davranış, root hesabına atanan kimlik doğrulama eklentisine bağlıdır. mysql_native_password veya caching_sha2_password kullanan sunucularda SET PASSWORD MySQL 5.7’de hâlâ çalışabilir. auth_socket‘nin varsayılan olduğu Ubuntu/Debian sistemlerinde, hiçbir parola depolanmadığı veya kontrol edilmediği için komut reddedilir. MySQL 8.0 SET PASSWORD‘yi daha da kullanımdan kaldırdı ve ALTER USER‘yi tek güvenilir çapraz sürüm yöntemi haline getirdi.

Parola kimlik doğrulamasına geçtikten sonra auth_socket’i yeniden etkinleştirebilir miyim?

Evet. ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket; çalıştırın ve ardından FLUSH PRIVILEGES;. Bundan sonra sudo mysql parola olmadan tekrar çalışacak ve mysql -u root -p başarısız olacaktır. Bu, yalnızca yerel işletim sistemi kimlik doğrulamalı root erişiminin gerekli olduğu sistemler için önerilen yapılandırmadır.

FLUSH PRIVILEGES ile MySQL’i yeniden başlatmak arasındaki fark nedir?

FLUSH PRIVILEGES, servisi yeniden başlatmadan izin tablolarını diskten belleğe yeniden yükler. Doğrudan UPDATE mysql.user değişikliklerinden sonra yeterlidir. ALTER USER ve GRANT ifadeleri doğrudan izin tablolarına yazar ve hemen etkili olur — FLUSH PRIVILEGES teknik olarak bunlardan sonra gereksizdir ancak zararsızdır ve güvenlik önlemi olarak yaygın biçimde kullanılır.

GRANT ALL PRIVILEGES ... IDENTIFIED BY MySQL 8.0’da neden başarısız oluyor?

MySQL 8.0, bir GRANT ifadesi içinde kullanıcıları örtük olarak oluşturma veya değiştirme özelliğini kaldırdı. GRANT‘daki IDENTIFIED BY yan tümcesi MySQL 5.7’de kullanımdan kaldırıldı ve 8.0’da kaldırıldı. CREATE USER veya ALTER USER‘ı ayrı ayrı kullanmanız, ardından IDENTIFIED BY yan tümcesi olmadan GRANT ifadesini vermeniz gerekir.

Paylaşımlı hosting planında MySQL veritabanı çalıştırmak güvenli midir?

Düşük trafikli kişisel projeler için yönetilen MySQL ile Paylaşımlı Web Hosting yeterlidir. Ancak mysql.user, GRANT yönetimi veya yapılandırma dosyalarına doğrudan erişiminiz olmayacaktır. MySQL üzerinde doğrudan yönetimsel kontrol gerektiren herhangi bir iş yükü için — bu hata gibi sorunları çözmek dahil — root işletim sistemi erişimine sahip bir VPS Hosting ortamı uygun seçimdir.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın