MariaDB root parolasını unuttuysanız önce sudo mariadb ile bağlanmayı deneyin: Linux kurulumlarında root hesabı varsayılan olarak unix_socket ile doğrulandığı için sistem root kullanıcısı parola olmadan girebilir ve ALTER USER ya da SET PASSWORD ile yeni parola atayabilir. Bu yol da kapalıysa sunucu geçici olarak --skip-grant-tables ile başlatılır, bağlanılır, FLUSH PRIVILEGES çalıştırılır, parola değiştirilir ve sunucu normal ayarlarla yeniden başlatılır.
Bu yazı iki yolu da adım adım anlatıyor, ardından günlük parola yönetimine geçiyor: SET PASSWORD ve ALTER USER farkı, parola süresi (PASSWORD EXPIRE), süresi dolan parolalarla gelen kısıtlı kip ve parola doğrulama eklentileri. Bilgiler resmî MariaDB Server belgelerinden alındı. Kimlik doğrulama yöntemlerinin kendisi unix_socket ve ed25519 yazısında, serinin geri kalanı MariaDB öğrenme rehberi sayfasında.
Önce şunu deneyin: sudo mariadb
Bağlantı sorunları kılavuzu, yeni kurulmuş bir sunucuda Access denied for 'root'@'localhost' hatası alanlara önce bu çözümü önerir. Linux'taki varsayılan güvenlik modelinde MariaDB root hesabı sistemin root kullanıcısına bağlıdır; mariadb -u root -p ile parola girmeye çalıştığınızda sunucu parolanızı değil işletim sistemi kimliğinizi beklediği için girişi reddedebilir. Doğru komut şudur:
sudo mariadbKimlik doğrulama sayfası da aynı noktayı vurgular: root parolanızı unuttuysanız sudo ile bağlanıp parolayı değiştirebilirsiniz. Bağlandıktan sonra parolayı şöyle atarsınız:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('your_new_strong_password');Tam sıfırlama: --skip-grant-tables ile

sudo mariadb çalışmıyorsa, örneğin root hesabından unix_socket yöntemini daha önce kaldırdıysanız, son çare yetki tablolarını devre dışı bırakarak başlatmaktır. Belgelere göre --skip-grant-tables sunucuyu yetki tabloları olmadan başlatır ve bu, tüm kullanıcılara tüm tablolara tam erişim verir. Kılavuz bunu yalnızca geçici olarak ve son derece dikkatli kullanmanızı ister. MariaDB 10.10'dan itibaren aynı ayar skip_grant_tables adıyla bir sistem değişkeni olarak da görünür; dinamik değildir, yani yalnızca açılışta ayarlanabilir.
1. Sunucuyu durdurun
systemd kullanan dağıtımlarda servis şu komutla durdurulur. Servis yönetiminin ayrıntıları systemd yazısında anlatılıyor.
sudo systemctl stop mariadb.service2. Seçeneği geçici olarak ekleyin
Kılavuz sunucuyu komut satırından --skip-grant-tables ile elle başlatmayı anlatır. systemd ile yönetilen bir sunucuda aynı seçeneği sunucunun okuduğu bir seçenek grubuna yazmak da aynı etkiyi verir; seçenek dosyalarında baştaki iki tire yazılmaz. Belgeler kendi ayarlarınız için ayrı bir dosya önerir: RHEL, Rocky Linux ve SLES'te /etc/my.cnf.d/z-custom-my.cnf, Debian ve Ubuntu'da /etc/mysql/mariadb.conf.d/z-custom-my.cnf. Dosyalar hakkında ayrıntı my.cnf yazısında.
[mariadb]
skip-grant-tables
skip-networkingBuradaki skip-networking satırı isteğe bağlı bir önlemdir. Belgelere göre bu ayar açıkken sunucu TCP/IP bağlantılarını dinlemez ve tüm erişim Unix soket dosyası üzerinden olur. Yetki denetimi kapalıyken sunucunun ağdan erişilebilir olmaması, bu kısa sürede herhangi birinin dışarıdan tam yetkiyle bağlanmasını önler. Uygulamanız bu sürede veritabanına erişemeyecektir; işlemi bakım penceresinde yapın.
3. Başlatın ve bağlanın
sudo systemctl start mariadb.service
mariadb -u rootKılavuza göre bu modda root@localhost için parola gerekmez. Ayrıca belgelere göre Event Scheduler da yetki tablolarına dayandığı için --skip-grant-tables ile çalışırken otomatik olarak devre dışı kalır; zamanlanmış görevleriniz bu süre içinde çalışmaz.
4. Yetki tablolarını yeniden yükleyin ve parolayı değiştirin
Kimlik doğrulama sayfasındaki adımlara göre önce FLUSH PRIVILEGES çalıştırılır. Bu komut yetki tablolarını yeniden etkinleştirir, yani --skip-grant-tables etkisini o çalışma için kaldırır ve saklanan kimlik doğrulama yöntemini değiştirmenize izin verir. Ardından parola atanır:
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('your_new_strong_password');root'un hem sudo ile parolasız hem de parolayla girebilmesini, yani kurulumdaki düzeni geri istiyorsanız iki yöntemi OR ile birlikte tanımlayabilirsiniz. Aşağıdaki deyim belgelerdeki IDENTIFIED VIA ... OR ... yazımını ALTER USER ile kullanır:
ALTER USER root@localhost IDENTIFIED VIA unix_socket
OR mysql_native_password USING PASSWORD("your_new_strong_password");5. Seçeneği kaldırıp normal başlatın
Eklediğiniz skip-grant-tables (ve varsa skip-networking) satırlarını silin ya da dosyayı kaldırın, sonra sunucuyu yeniden başlatın. Bu adımı atlamak, sunucuyu bir sonraki yeniden başlatmada herkese açık bırakmak demektir.
sudo systemctl restart mariadb.serviceSon olarak yeni parolayla bağlanarak işlemi doğrulayın. Sunucu yeniden başlamazsa hata günlüğüne bakın; olası nedenler sık hatalar yazısında ve error log yazısında anlatılıyor.
Günlük parola değişikliği: SET PASSWORD ve ALTER USER
SET PASSWORD var olan bir hesaba parola atar. FOR yazılmazsa geçerli oturumun hesabının parolası değişir ve anonim olmayan her hesap kendi parolasını bu yolla değiştirebilir. Başka bir hesabın parolasını değiştirmek için mysql veritabanında UPDATE yetkisi gerekir. Parola PASSWORD() içinde düz metin olarak verilir ya da doğrudan özet olarak yazılır.
SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');Aynı işi ALTER USER ile de yapabilirsiniz; bu deyim parola süresi ve kilit gibi diğer ayarları da aynı yerde toplar. Kendi parolanız için CURRENT_USER() yazılabilir:
ALTER USER CURRENT_USER() IDENTIFIED BY 'mariadb';Belgelere göre SET PASSWORD, parolaları mysql.global_priv içinde saklayan eklentilerle (ed25519, mysql_native_password, mysql_old_password) çalışır ve PASSWORD() hesabın eklentisine uygun biçimde özetlenir. unix_socket, named_pipe, gssapi ve pam parola saklamadığı için bu hesaplarda sunucu şu türden bir hata verir:
SET PASSWORD IS ignored FOR users authenticating via unix_socket pluginSET PASSWORD FOR 'bob'@localhost = PASSWORD(""); parolayı siler. Belgelere göre parolaya dayalı eklentilerde parola boş olabilir ve o durumda parola gerekmez; bu yüzden bu deyimi yalnızca gerçekten istiyorsanız kullanın.
Parola süresi
Parolaların belirli aralıklarla değiştirilmesini zorunlu kılmak için iki katman vardır. Genel politika default_password_lifetime değişkeniyle belirlenir; belgelere göre varsayılanı 0'dır ve bu, otomatik parola süresinin kapalı olduğu anlamına gelir. Pozitif bir N değeri parolaların her N günde bir değiştirilmesi gerektiğini belirtir. Hesap bazındaki ayar genel ayarın önüne geçer:
ALTER USER 'monty'@'localhost' PASSWORD EXPIRE INTERVAL 120 DAY;
ALTER USER 'monty'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'monty'@'localhost' PASSWORD EXPIRE DEFAULT;NEVER sınırı kapatır, DEFAULT hesabı yeniden genel politikaya bağlar. Belgelere göre SHOW CREATE USER parola süresini gösterir ama MySQL'den farklı olarak DEFAULT olan ya da kilitli olmayan durumu yazmaz:
SHOW CREATE USER 'monty'@'localhost';
+------------------------------------------------------------------+
| CREATE USER for monty@localhost |
+------------------------------------------------------------------+
| CREATE USER 'monty'@'localhost' PASSWORD EXPIRE INTERVAL 120 DAY |
+------------------------------------------------------------------+Süresi dolan parola ve kısıtlı kip
Parolası dolmuş bir kullanıcının nasıl karşılanacağını disconnect_on_expired_password belirler. Belgelere göre varsayılanı OFF'tur; bu durumda kısıtlı kipi bilmeyen istemciler de bağlanır ama yalnızca parola sıfırlamayla ilgili sınırlı deyimleri, özellikle SET PASSWORD ve SET, çalıştırabilir. Değişken açıksa bu istemcilerin bağlanmasına izin verilmez. mariadb istemcisinin --connect-expired-password seçeneği, --batch verilmiş olsa bile istemcinin bu kipi işleyebildiğini sunucuya bildirir. MariaDB 11.5'ten itibaren parola süresi bilgileri Information Schema USERS tablosunda da tutulur ve yetkisiz bir kullanıcı kendi satırını bu tablodan okuyabilir.
Tüm hesapların parolalarının ne zaman dolacağını görmek isteyen yönetici için belgelerde mysql.global_priv tablosunun JSON alanlarını okuyan uzunca bir sorgu verilir. Sorgunun mantığı basittir: hesabın kendi password_lifetime değeri yoksa genel @@global.default_password_lifetime kullanılır, password_last_changed zaman damgasına bu kadar gün eklenerek bitiş tarihi hesaplanır. Aşağıda sorgunun ilk kısmını görüyorsunuz; tamamı parola süresi sayfasında yer alıyor.
WITH password_expiration_info AS (
SELECT User, Host,
IF(
IFNULL(JSON_EXTRACT(Priv, '$.password_lifetime'), -1) = -1,
@@global.default_password_lifetime,
JSON_EXTRACT(Priv, '$.password_lifetime')
) AS password_lifetime,
JSON_EXTRACT(Priv, '$.password_last_changed') AS password_last_changed
FROM mysql.global_priv
)Parola doğrulama eklentileri

Zayıf parolaları en baştan reddetmek için parola doğrulama eklentileri kullanılır. MariaDB üç eklentiyle gelir: simple_password_check, cracklib_password_check ve password_reuse_check. Belgelere göre hiçbiri varsayılan olarak etkin değildir; INSTALL SONAME ile kurulurlar. En az bir eklenti yüklüyken tüm yeni parolalar denetlenir ve birden fazla eklenti yüklüyse parola hepsinin denetiminden geçmelidir.
INSTALL SONAME 'simple_password_check';simple_password_check ilk kurulduğunda en az sekiz karakter, en az bir rakam, bir büyük harf, bir küçük harf ve harf ya da rakam olmayan bir karakter ister. Kurallara uymayan parola belgelerdeki şu hatayla reddedilir:
SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('abc');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements| Değişken | Varsayılan | Anlamı |
|---|---|---|
| simple_password_check_minimal_length | 8 | En az karakter sayısı |
| simple_password_check_digits | 1 | En az rakam sayısı |
| simple_password_check_letters_same_case | 1 | En az büyük ve en az küçük harf sayısı |
| simple_password_check_other_characters | 1 | Harf ve rakam dışındaki en az karakter sayısı |
cracklib_password_check, birçok Linux dağıtımında zaten kurulu olan CrackLib kütüphanesiyle parolanın gücünü denetler. Belgelere göre en az cracklib 2.9.0 gerektirir ve paylaşılan kütüphanesi derlenebildiği sistemlerde MariaDB paketlerine dahildir; kurulumu yine INSTALL SONAME 'cracklib_password_check'; ile yapılır. Bir parola reddedildiğinde CrackLib'in asıl gerekçesi SHOW WARNINGS ile görülebilir; belgelerdeki örnekte uyarı satırında parolanın kullanıcı adına dayandığı yazar. SELinux zorlayıcı kipte çalışan sistemlerde mariadbd sözlük dizinine erişemeyebilir ve güçlü parolalar da aynı hatayla reddedilebilir; bu bilinen sorun eklentinin sayfasında anlatılıyor.
password_reuse_check ise kullanıcının eski bir parolayı yeniden kullanmasını engeller. Eski parolalar mysql.password_reuse_check_history tablosunda saklanır; ne kadar süre tutulacağını password_reuse_check_interval belirler ve varsayılan 0 sınırsız saklama demektir. Belgelerdeki örnekte aynı parola ikinci kez denendiğinde reddedilir:
INSTALL SONAME 'password_reuse_check';
GRANT SELECT ON *.* TO user1@localhost identified by 'pwd1';
Query OK, 0 rows affected (0.038 sec)
GRANT SELECT ON *.* TO user1@localhost identified by 'pwd1';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirementsÖzet olarak verilen parolalar ve strict_password_validation
Parola düz metin yerine özet olarak verildiğinde, örneğin IDENTIFIED BY PASSWORD '...' ile, eklentilerin denetleyebileceği bir şey kalmaz. strict_password_validation bu durumu yönetir: belgelere göre varsayılan olarak ON'dur ve en az bir doğrulama eklentisi yüklüyken doğrulanamayan, yani özet olarak verilen parolaları reddeder. Eklenti yüklü değilse etkisi yoktur. Bu değişkeni kapatmak, doğrulamayı özetle atlamanın kapısını açar.
Sık yapılan hatalar
- Hemen skip-grant-tables'a başvurmak: Çoğu durumda
sudo mariadbyeterlidir. - skip-grant-tables satırını dosyada unutmak: Bir sonraki yeniden başlatmada sunucu yine yetki denetimi olmadan açılır.
- Bu modda sunucuyu ağa açık bırakmak: Yetki denetimi kapalıyken TCP dinlemesini
skip-networkingile kapatmayı düşünün. - FLUSH PRIVILEGES olmadan kimlik doğrulama yöntemini değiştirmeye çalışmak: Belgelerdeki sıra önce
FLUSH PRIVILEGES, sonraSET PASSWORDşeklindedir. - unix_socket hesabında SET PASSWORD beklemek: Bu eklenti parola saklamaz; hesaba parolalı bir yöntem eklemek için
ALTER USER ... IDENTIFIED VIAgerekir. - Parola süresini secure_timestamp olmadan güvenilir sanmak: Oturum zaman damgası değiştirilerek sınır atlatılabilir.
- Doğrulama eklentisini kurup özet parolaları unutmak:
strict_password_validationkapalıysa özetle verilen parolalar denetlenmez.
Sık Sorulan Sorular
Yeni kurulumda root parolası nedir?
Belgelere göre kurulumda root için geçerli bir parola yoktur; saklanan değer 'invalid' olduğundan parolayla giriş kapalıdır ve giriş sudo mariadb ile yapılır. Parola isterseniz SET PASSWORD ile atarsınız. İlk güvenlik adımları için mariadb-secure-installation yazısına bakın.
skip-grant-tables açıkken kimler bağlanabilir?
Belgelere göre bu modda tüm kullanıcılar tüm tablolara tam erişime sahiptir. Bu yüzden süreyi kısa tutun, mümkünse TCP dinlemesini kapatın ve işlem biter bitmez seçeneği kaldırıp sunucuyu yeniden başlatın.
Uygulama kullanıcısının parolasını değiştirdim, site çalışmıyor. Neden?
Uygulamanın yapılandırma dosyasındaki parola hâlâ eskisidir. Parolayı uygulamada da güncelleyin. WordPress için veritabanı bağlantı hatası yazısına bakabilirsiniz.
Kullanıcıların zayıf parola seçmesini nasıl engellerim?
simple_password_check ya da cracklib_password_check eklentisini kurun, gerekirse password_reuse_check ile eski parolaların tekrarını da engelleyin ve strict_password_validation değişkenini açık bırakın.
Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: MariaDB öğrenme rehberi · MariaDB kimlik doğrulama · MariaDB CREATE USER · mariadb-secure-installation · MariaDB systemd · MariaDB my.cnf · WordPress veritabanı bağlantı hatası