WordPress, WooCommerce, Joomla ya da kendi yazdığınız bir PHP uygulamasını paylaşımlı bir hosting hesabında çalıştırırken karşınıza çıkan ilk kurulum adımı neredeyse her zaman bir veritabanı ve o veritabanına erişecek bir kullanıcı oluşturmaktır. cPanel bu işi terminal komutları yazmadan, tıklayarak yapabileceğiniz MySQL® Veritabanları (MySQL Databases) aracıyla sunar. Ancak bu aracın tehlikeli yanı, "hızlı olsun" diye her kullanıcıya tüm yetkileri verme alışkanlığıdır; oysa doğru yetkilendirme, bir güvenlik açığı yaşandığında saldırganın verebileceği zararı ciddi ölçüde sınırlar.
Bu rehberde cPanel MySQL Veritabanları aracıyla adım adım bir veritabanı oluşturmayı, ona ayrı bir kullanıcı tanımlamayı, kullanıcıyı veritabanına atarken karşınıza çıkan ayrıntılı ayrıcalık ekranını (SELECT, INSERT, UPDATE, DELETE gibi) doğru kullanmayı ve en az yetki (least privilege) prensibini pratik örneklerle göreceğiz. Ayrıca cpanel_ kullanıcı adı önekinin neden zorunlu olduğunu, ALL PRIVILEGES vermenin gerçek risklerini ve oluşturduğunuz bağlantı bilgilerini uygulamanızın yapılandırma dosyasında nasıl kullanacağınızı açıklayacağız.
MySQL Veritabanları Aracı Ne İşe Yarar#
cPanel'in Veritabanları bölümünde iki ayrı simge görürsünüz: MySQL® Veritabanları ve phpMyAdmin. İkisini karıştırmamak önemlidir. phpMyAdmin, veritabanının içeriğiyle (tablolar, satırlar, SQL sorguları) çalıştığınız görsel bir araçtır; ayrıntılarını phpMyAdmin ile veritabanı yönetimi rehberinde bulabilirsiniz. MySQL Veritabanları aracı ise bir katman altında, yönetimsel işleri yapar: yeni veritabanı yaratmak, veritabanı kullanıcısı tanımlamak, kullanıcıyı veritabanına bağlamak ve yetki atamak.
Kavramları netleştirelim çünkü çoğu karışıklık bu üç şeyin birbirine karıştırılmasından doğar:
| Kavram | Ne demektir | Örnek |
|---|---|---|
| Veritabanı | Tabloların, verinin fiziksel olarak durduğu kap | cpanel_wp01 |
| Kullanıcı | Veritabanına bağlanan kimlik (ad + parola) | cpanel_wpuser |
| Yetki (privilege) | Kullanıcının o veritabanında ne yapabileceği | SELECT, INSERT... |
Bir kullanıcı tek başına işe yaramaz; mutlaka bir veritabanına atanmalı ve o atama sırasında hangi yetkilere sahip olacağı belirlenmelidir. Aynı kullanıcı birden fazla veritabanına atanabilir, aynı veritabanına birden fazla kullanıcı bağlanabilir. Bu esneklik, farklı uygulamalara farklı yetki seviyeleri tanımlamanıza olanak verir. Bu araç paylaşımlı hosting, WordPress hosting ve reseller hosting paketlerinin hepsinde aynı şekilde çalışır.
Yeni Bir Veritabanı Oluşturma#
İlk adım veritabanının kendisini yaratmaktır. cPanel'e girip MySQL® Veritabanları simgesine tıkladığınızda en üstte Yeni Veritabanı Oluştur (Create New Database) kutusu gelir.
- Yeni Veritabanı alanına kısa, anlamlı bir ad yazın; örneğin WordPress için
wp01, mağaza içinshop. - Alanın solunda gri renkte sabit bir önek göreceksiniz:
cpanel_. Bu, hesabınızın cPanel kullanıcı adıdır ve otomatik olarak başa eklenir. - Veritabanı Oluştur düğmesine basın. Gerçek veritabanı adınız artık
cpanel_wp01olur.
Bu önek tesadüf değildir. Bir hosting sunucusunda yüzlerce müşterinin veritabanı aynı MySQL motorunda yan yana durur. Önek olmasaydı iki farklı müşteri aynı anda wordpress adında bir veritabanı yaratmaya çalışır ve çakışırdı. cpanel_ öneki her hesaba benzersiz bir ad alanı (namespace) verir; böylece sizin cpanel_wp01'iniz ile komşu hesabın baskacp_wp01'i asla karışmaz. Kendi VDS veya sanal sunucunuzda doğrudan komut satırıyla çalışıyorsanız bu önek zorunlu değildir; orada adları siz belirlersiniz. cPanel ortamında ise önek sistem tarafından dayatılır ve değiştirilemez.
Önek dahil toplam ad uzunluğunun MySQL'in 64 karakter sınırını aştığı durumlarda hata alırsınız; bu yüzden veritabanı adlarını kısa tutmak iyi bir alışkanlıktır. Ada Türkçe karakter, boşluk veya nokta koymayın; harf, rakam ve alt çizgi (_) en güvenli seçimdir.
Ayrı Bir Veritabanı Kullanıcısı Oluşturma#
Veritabanı hazır ama henüz ona bağlanacak bir kimlik yok. Aynı sayfada aşağı inince MySQL Kullanıcıları (MySQL Users) başlığı altında Yeni Kullanıcı Ekle (Add New User) bölümünü görürsünüz.
- Kullanıcı Adı alanına bir ad yazın; örneğin
wpuser. Burada da başacpanel_öneki otomatik eklenir, yani gerçek kullanıcı adınızcpanel_wpuserolur. - Parola alanına güçlü bir parola girin. Yanındaki Parola Oluşturucu (Password Generator) düğmesi rastgele, güçlü bir parola üretir — kullanmanızı şiddetle öneririm.
- Kullanıcı Oluştur düğmesine basın.
Kullanıcı adı önekinin kural olarak, veritabanı adı önekiyle aynı gerekçesi vardır: sunucu genelinde benzersizlik. Parola konusunda ise gevşeklik yapmayın. Bu kullanıcı adı ve parola, uygulamanızın yapılandırma dosyasında düz metin olarak durur (wp-config.php gibi). Bir saldırgan dosya okuma açığı bulursa doğrudan veritabanınıza bağlanmayı dener. Bu yüzden en az 16 karakterli, rastgele bir parola tercih edin; parola üretmek için şifre üretici aracımızdan yararlanabilirsiniz.
Önemli bir alışkanlık: her uygulama için ayrı bir kullanıcı oluşturun. WordPress siteniz için cpanel_wpuser, e-ticaret siteniz için cpanel_shopuser. Böylece bir uygulamanın kullanıcısı ele geçirilse bile saldırgan yalnızca o uygulamanın veritabanına erişebilir, diğerlerine dokunamaz. Tek bir "her şeye yetkili" kullanıcıyı bütün sitelerde paylaşmak, en yaygın ve en pahalıya patlayan hatalardan biridir.
Kullanıcıyı Veritabanına Atama#
Şimdi kimliği veritabanına bağlayacağız. Sayfanın en altındaki Kullanıcıyı Veritabanına Ekle (Add User to Database) bölümünde iki açılır liste bulunur.
- Kullanıcı listesinden az önce oluşturduğunuz
cpanel_wpuserkaydını seçin. - Veritabanı listesinden
cpanel_wp01kaydını seçin. - Ekle düğmesine basın.
Düğmeye bastığınız anda cPanel sizi Yetkileri Yönet (Manage User Privileges) ekranına götürür. İşin en kritik kısmı burasıdır; çünkü bu ekranda kullanıcının veritabanında tam olarak ne yapabileceğini işaretlersiniz. Karşınızda onlarca onay kutusu ve en üstte iri harflerle bir ALL PRIVILEGES seçeneği vardır. Çoğu kişi işi kısa kesmek için doğrudan ALL PRIVILEGES'ı işaretler; bir sonraki bölümde neden bunun her zaman doğru olmadığını göreceğiz.
Bir kullanıcının atandığı veritabanını daha sonra kaldırmak isterseniz, kullanıcı listesindeki kaydın yanından atamayı silebilir veya yetkileri yeniden düzenleyebilirsiniz. Atamayı silmek kullanıcıyı veya veritabanını yok etmez; yalnızca aralarındaki bağı ve yetkileri kaldırır.
Ayrıntılı Yetki Seçimi: SELECT, INSERT, UPDATE, DELETE#
Yetki ekranındaki her onay kutusu, MySQL'in tanıdığı bir izne karşılık gelir. En sık kullanılan dördü, günlük bir uygulamanın "okuma-yazma" ihtiyacını karşılayan izinlerdir:
| Yetki | İşlevi | SQL karşılığı |
|---|---|---|
| SELECT | Veri okuma (satır listeleme, sorgu) | SELECT * FROM ... |
| INSERT | Yeni satır ekleme | INSERT INTO ... |
| UPDATE | Var olan satırı güncelleme | UPDATE ... SET ... |
| DELETE | Satır silme | DELETE FROM ... |
Bu dört izin, tipik bir CMS'in gündelik çalışması için gereken minimumdur. Bir ziyaretçi yorum bıraktığında INSERT, bir yazı düzenlediğinizde UPDATE, spam yorum sildiğinizde DELETE, sayfa görüntülendiğinde SELECT devreye girer. Bunların yanında sık karşılaşacağınız diğer izinler ise veritabanının yapısıyla ilgilenir:
- CREATE — yeni tablo oluşturma. Bir eklenti ilk kez kurulurken kendi tablolarını yaratmak için buna ihtiyaç duyar.
- ALTER — var olan tablonun yapısını değiştirme (sütun ekleme, tip değiştirme). Sürüm güncellemelerinde kullanılır.
- DROP — tabloyu tamamen silme. Güçlü ve tehlikeli bir izindir.
- INDEX — tabloya indeks ekleme/kaldırma; performans için.
- CREATE TEMPORARY TABLES — geçici tablolar; bazı raporlama sorgularında gerekir.
cPanel'de her yetki bir kutudur; ilgili kutuları işaretleyip Değişiklikleri Kaydet (Make Changes) düğmesine bastığınızda cPanel arka planda size şuna benzer bir GRANT komutu çalıştırır:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP
ON `cpanel_wp01`.*
TO 'cpanel_wpuser'@'localhost';
Buradaki `cpanel_wp01`.* ifadesi "bu veritabanındaki tüm tablolar" demektir ve @'localhost' kullanıcının yalnızca aynı sunucudan (yani sitenizin çalıştığı yerden) bağlanabileceğini belirtir. Paylaşımlı hostingde bağlantılar zaten localhost üzerinden yapıldığı için bu güvenli varsayılandır. WordPress ve benzeri CMS'ler için pratik öneri: kurulum ve güncellemelerin sorunsuz ilerlemesi adına SELECT, INSERT, UPDATE, DELETE'e ek olarak CREATE, ALTER, INDEX ve DROP izinlerini de verin; bunlar tablo yapısı değişiklikleri için gerçekten gereklidir. Buna karşılık FILE, PROCESS, SUPER, GRANT OPTION gibi sunucu düzeyindeki izinlere bir web uygulamasının asla ihtiyacı olmaz — bunları işaretlemeyin.
En Az Yetki Prensibi ve ALL PRIVILEGES Riski#
Güvenlik dünyasında "en az yetki" (least privilege) ilkesi şunu söyler: her kimliğe, işini görebilmesi için gereken en düşük yetkiyi ver, bir fazlasını değil. cPanel'in ALL PRIVILEGES kutusu bu ilkenin tam tersidir; kullanıcıya o veritabanı üzerindeki her izni birden verir.
Sorun şudur: veritabanı kullanıcı bilgileri, uygulamanızın yapılandırma dosyasında açık metin olarak durur. Sitenizde bir SQL injection açığı, güvenliği zayıf bir eklenti ya da sunucudan dosya okumaya izin veren başka bir zafiyet ortaya çıkarsa, saldırganın eline geçen ilk şey bu kullanıcı adı ve parola olur. Kullanıcı ne kadar yetkiliyse verilebilecek zarar da o kadar büyür.
| Senaryo | Kullanıcı yetkisi | Saldırgan ne yapabilir |
|---|---|---|
| Aşırı yetki | ALL PRIVILEGES | Tabloları düşürebilir (DROP), yapıyı bozabilir, veriyi topluca siler |
| Dengeli | SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP | Veriyi okur/değiştirir; sunucu düzeyine geçemez |
| Salt okuma (rapor) | Yalnızca SELECT | Yalnızca veri okur; hiçbir şeyi değiştiremez |
ALL PRIVILEGES'ın somut riski, içerdiği yıkıcı izinlerdir. Örneğin bu kutu, çoğu web uygulamasının çalışırken hiç kullanmadığı DROP iznini de içerir. Bir saldırgan tek bir DROP TABLE ya da DROP DATABASE komutuyla saatler süren emeğinizi saniyeler içinde silebilir. Oysa uygulamanız günlük çalışmasında bu izne dokunmaz bile; yalnızca sürüm güncellemesi sırasında geçici olarak ihtiyaç duyar.
Pratik bir yaklaşım şudur: kurulum ve güncelleme anlarında CREATE, ALTER, DROP dahil geniş izinlerle çalışın; işlem bittikten sonra, güvenliğe önem veren ortamlarda kullanıcının yalnızca SELECT, INSERT, UPDATE, DELETE izinlerini bırakacak şekilde yetkileri daraltın. Bir sonraki güncellemede yapısal izinleri geçici olarak yeniden açarsınız. Bu biraz daha çaba ister ama sitenizin en değerli varlığı olan veritabanını ciddi biçimde korur. Bir raporlama paneli veya yalnızca veri gösteren bir mikro servis için ise sadece SELECT vermek çoğu zaman yeterlidir; yazma iznini hiç açmayarak o kimliği neredeyse zararsız hâle getirirsiniz.
Bağlantı Bilgilerini Uygulamada Kullanma#
Veritabanı, kullanıcı ve yetkiler hazır olduğunda elinizde dört bilgi olur ve uygulamanız veritabanına bunlarla bağlanır:
| Bilgi | Değer (örnek) | Açıklama |
|---|---|---|
| Sunucu (host) | localhost | Paylaşımlı hostingde neredeyse her zaman böyledir |
| Veritabanı adı | cpanel_wp01 | Önek dahil tam ad |
| Kullanıcı adı | cpanel_wpuser | Önek dahil tam ad |
| Parola | (oluşturduğunuz) | Parola oluşturucudan gelen değer |
Dikkat edilecek en yaygın hata, host değerine localhost yerine sitenizin alan adını yazmaktır. Paylaşımlı hosting ortamında uygulama ile veritabanı aynı sunucuda olduğundan doğru değer localhost'tur; alan adı yazmak çoğu zaman bağlantı hatasına yol açar. WordPress kurulumunda bu bilgiler wp-config.php dosyasına şöyle yazılır:
define( 'DB_NAME', 'cpanel_wp01' );
define( 'DB_USER', 'cpanel_wpuser' );
define( 'DB_PASSWORD', 'buraya-guclu-parola' );
define( 'DB_HOST', 'localhost' );
Kendi uygulamanızda ortam değişkenleriyle çalışıyorsanız aynı değerleri bir .env dosyasında tutabilirsiniz:
DB_HOST=localhost
DB_DATABASE=cpanel_wp01
DB_USERNAME=cpanel_wpuser
DB_PASSWORD=buraya-guclu-parola
Bu dosyalar veritabanı parolanızı düz metin olarak barındırdığı için erişimlerini kısıtlamak kritiktir. wp-config.php veya .env dosyasının web'den okunamadığından emin olun; genellikle sunucu yapılandırması bunu engeller ama bir WAF katmanı ek güvence sağlar. Parolayı değiştirdiğinizde cPanel MySQL Veritabanları aracındaki Parolayı Değiştir bağlantısını kullanın ve hemen ardından yapılandırma dosyasındaki değeri de güncelleyin; aksi hâlde uygulamanız "veritabanı bağlantı hatası" verir. Bağlantının içeriğini test etmek, tabloları görmek veya küçük düzeltmeler yapmak için ise phpMyAdmin aracını, komut satırı ve mysqldump tabanlı ileri yönetim için MySQL/MariaDB temelleri rehberini kullanabilirsiniz. Düzenli yedekleme alışkanlığı için de yedekleme çözümlerimize göz atmanızı öneririm.
Sık Karşılaşılan Yönetim İpuçları#
Günlük yönetimde işinizi kolaylaştıracak birkaç pratik nokta vardır. Bir kullanıcının parolasını unuttuğunuzda kurtarma diye bir şey yoktur; parolalar tek yönlü saklandığı için Parolayı Değiştir ile yeni bir parola atar, sonra uygulama yapılandırmasını güncellersiniz. Bir siteyi tamamen silerken hem veritabanını hem de ona bağlı kullanıcıyı kaldırmayı unutmayın; kullanmadığınız kullanıcılar, atıl birer erişim noktası olarak durup gereksiz saldırı yüzeyi oluşturur.
Bir veritabanına birden fazla kimlik bağlamanız gereken durumlar da olur: örneğin bir kullanıcıya tam yetki verip uygulamanın çalışması için kullanır, aynı veritabanına yalnızca SELECT yetkili ikinci bir kullanıcı tanımlayıp bunu bir raporlama veya yedekleme betiğinde kullanırsınız. Böylece yedek alan betik, yanlışlıkla veya bir açık nedeniyle veriyi değiştiremez. Kaç veritabanı ve kullanıcı oluşturabileceğiniz hosting paketinizin limitlerine bağlıdır; sınıra dayandığınızda kullanmadığınız eski veritabanlarını temizlemek ya da daha yüksek kaynaklı bir pakete geçmek gerekebilir.
Sıkça Sorulan Sorular#
Neden kullanıcı adımın ve veritabanı adımın başında cpanel_ öneki var?#
Bu önek, hesabınızın cPanel kullanıcı adıdır ve sistem tarafından otomatik olarak eklenir. Bir hosting sunucusunda yüzlerce hesabın veritabanı aynı MySQL motorunda yan yana durduğu için, önek her hesaba benzersiz bir ad alanı sağlar ve iki farklı müşterinin aynı adı kullanmasından doğacak çakışmaları önler. Önek zorunludur ve cPanel ortamında değiştirilemez; yalnızca kendi sunucunuzda komut satırıyla çalışırken böyle bir kısıtlama olmaz.
Bir kullanıcıya ALL PRIVILEGES vermek zararlı mı?#
Doğrudan zararlı değildir ve uygulama çalışır, ama gereksiz risk taşır. ALL PRIVILEGES, uygulamanın günlük çalışmasında hiç kullanmadığı DROP gibi yıkıcı izinleri de içerir; sitenizde bir güvenlik açığı ortaya çıkarsa saldırgan bu geniş yetkiyle tabloları silebilir ya da veriyi topluca bozabilir. En güvenli yaklaşım, kurulum ve güncelleme dışındaki normal çalışmada kullanıcıyı yalnızca SELECT, INSERT, UPDATE, DELETE izinleriyle bırakmaktır.
WordPress için hangi MySQL yetkilerini vermeliyim?#
WordPress'in sorunsuz çalışması ve güncellenebilmesi için SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX ve DROP izinleri yeterlidir. Bu izinler hem gündelik okuma-yazmayı hem de sürüm ve eklenti güncellemelerindeki tablo yapısı değişikliklerini karşılar. FILE, SUPER, PROCESS gibi sunucu düzeyindeki izinlere WordPress'in asla ihtiyacı yoktur ve bunları vermemelisiniz.
Aynı veritabanına birden fazla kullanıcı ekleyebilir miyim?#
Evet, cPanel bir veritabanına istediğiniz kadar kullanıcı atamanıza izin verir ve her kullanıcı için ayrı yetki seti tanımlayabilirsiniz. Bu yaklaşım özellikle güvenlik için kullanışlıdır: uygulamanın kendisi tam yetkili bir kullanıcıyla bağlanırken, yalnızca SELECT yetkili ikinci bir kullanıcıyı raporlama ya da yedekleme betiklerinde kullanabilirsiniz. Böylece yardımcı işlemler veriyi değiştiremez.
Veritabanı kullanıcısının parolasını unuttum, nasıl kurtarırım?#
Kullanıcı parolaları geri döndürülemez biçimde saklandığından unutulan bir parolayı öğrenmek mümkün değildir; yapabileceğiniz tek şey yeni bir parola atamaktır. cPanel MySQL Veritabanları aracında ilgili kullanıcının yanındaki Parolayı Değiştir bağlantısına tıklayıp güçlü, yeni bir parola belirleyin. Ardından bu yeni parolayı uygulamanızın yapılandırma dosyasına (örneğin wp-config.php) da yazmayı unutmayın, aksi hâlde bağlantı hatası alırsınız.
DB_HOST alanına localhost mu yoksa alan adımı mı yazmalıyım?#
Paylaşımlı hosting hesaplarında uygulamanız ile veritabanı sunucusu aynı makinede çalıştığı için doğru değer neredeyse her zaman localhost'tur. Alan adınızı yazmak çoğu durumda bağlantının kurulamamasına yol açar. Yalnızca özel bir kurulumda veritabanı ayrı bir sunucuda barındırılıyorsa host değeri farklı olur; bu tür bir yapıyı genellikle kendi yönetilen sunucularınızda kurarsınız.
Kapanış#
cPanel'in MySQL Veritabanları aracı, birkaç dakikada bir veritabanı ve kullanıcı oluşturmanızı sağlayacak kadar basittir; ama işin kalitesini belirleyen kısım, atama sırasında verdiğiniz yetkilerdir. Her uygulamaya ayrı bir kullanıcı tanımlamak, güçlü ve rastgele parolalar kullanmak ve en az yetki prensibiyle yalnızca gereken izinleri açmak; bir güvenlik olayı yaşandığında zararı en aza indiren, çoğu zaman görünmez ama son derece değerli alışkanlıklardır.
Sağlam bir altyapı üzerinde bu iyi alışkanlıkları uygulamak istiyorsanız Clou.TR'nin cPanel destekli web hosting, performans odaklı WordPress hosting ve büyüyen projeler için VDS sunucu paketlerine göz atabilirsiniz. Kurulum, veri taşıma veya yetkilendirme konusunda takıldığınız her noktada destek ekibimiz yanınızda; verinizi doğru yapılandırmak, onu güvende tutmanın ilk adımıdır.