Tarayıcıdan veritabanına bakmak isteyen herkesin karşısına iki isim çıkar: phpMyAdmin ve Adminer. Birincisi yıllardır neredeyse her hosting paketinde hazır gelir, ikincisi ise tek bir PHP dosyasından ibarettir ve sunucuya kopyaladığınız anda çalışır. İkisi de aynı işi yapıyormuş gibi görünür ama kurulum biçimleri, kaynak tüketimleri ve özellikle güvenlik yüzeyleri birbirinden ciddi biçimde ayrılır.
Bu yazıda Adminer ile phpMyAdmin arasındaki farkları pazarlama diliyle değil, sunucuda gerçekten hissettiğiniz noktalardan karşılaştıracağım: dosya sayısı ve güncelleme yükü, desteklenen veritabanı motorları, büyük SQL dosyası içe aktarma davranışı, bellek kullanımı, kimlik doğrulama modeli ve saldırı yüzeyi. Sonunda "hangisini seçmeliyim?" sorusuna senaryo bazlı net bir cevap ve ikisini de güvenli konumlandırmanın somut adımlarını bulacaksınız.
İki Aracın Temel Felsefesi#
phpMyAdmin, bir web uygulamasıdır: yüzlerce dosyadan oluşur, kendi yapılandırma dosyası vardır, isteğe bağlı olarak kendi meta veri veritabanını (yer imleri, ilişki tanımları, sorgu geçmişi, tasarımcı görünümleri) kullanır ve MySQL ile MariaDB dünyasına derinlemesine odaklanır. Uzun ömürlü, çok özellikli, çok kullanıcılı ortamlar için tasarlanmıştır ve bu tasarımın doğal sonucu olarak büyüktür.
Adminer ise tam tersi bir tercihle yola çıkar: tek bir .php dosyası. Sunucuya kopyalarsınız, tarayıcıdan açarsınız, giriş ekranında sunucu adresi, kullanıcı ve parolayı yazarsınız, iş biter. Kaldırmak istediğinizde de tek bir dosyayı silersiniz. Ayrıca MySQL ile sınırlı değildir; PostgreSQL, SQLite, MS SQL gibi motorlara aynı arayüzden bağlanabilir. Bu minimalizm hem en büyük avantajı hem de bazı senaryolarda en büyük sınırıdır.
| Boyut | phpMyAdmin | Adminer |
|---|---|---|
| Dağıtım biçimi | Çok dosyalı paket, ayrı dizin | Tek PHP dosyası |
| Yaklaşık disk alanı | Onlarca MB | Bir MB'ın altı |
| Desteklenen motorlar | MySQL, MariaDB | MySQL, MariaDB, PostgreSQL, SQLite, MS SQL ve dahası |
| Yapılandırma dosyası | config.inc.php zorunlu | Yok (isteğe bağlı eklenti dosyası) |
| Kendi meta veritabanı | İsteğe bağlı, özellikleri açar | Yok |
| Çoklu dil arayüzü | Çok geniş | Geniş |
| Tema desteği | Yerleşik tema sistemi | Tek adminer.css dosyası |
Kurulum ve Güncelleme Yükü#
Adminer'ın kurulumu gerçekten tek satırdır. Web kök dizininizde tahmin edilmesi zor bir isim vermek, ilerideki güvenlik bölümünde göreceğiniz gibi ilk savunma katmanıdır:
# Web köküne indir, tahmin edilemez bir isim ver
cd /var/www/firmaniz.com/public_html
curl -L -o db-yonetim-7fa2.php https://www.adminer.org/latest.php
chown www-data:www-data db-yonetim-7fa2.php
chmod 640 db-yonetim-7fa2.php
Güncelleme de aynı komutu tekrar çalıştırmaktan ibarettir; eski dosyanın üstüne yazarsınız, taşınacak yapılandırma yoktur. phpMyAdmin'de ise arşivi açmak, config.inc.php dosyasını taşımak ve sürüm geçişlerinde yapılandırma anahtarlarının değişip değişmediğini kontrol etmek gerekir:
# phpMyAdmin'i elle kurma (paket yöneticisi sürümleri genelde geride kalır)
# SURUM degerini phpmyadmin.net'teki güncel sürümle doldurun
SURUM="5.x.y"
cd /var/www/firmaniz.com
curl -LO "https://files.phpmyadmin.net/phpMyAdmin/${SURUM}/phpMyAdmin-${SURUM}-all-languages.tar.gz"
tar xzf "phpMyAdmin-${SURUM}-all-languages.tar.gz"
mv "phpMyAdmin-${SURUM}-all-languages" pma-7fa2
cp pma-7fa2/config.sample.inc.php pma-7fa2/config.inc.php
config.inc.php içinde en kritik satır blowfish_secret değeridir; 32 karakterlik rastgele bir dize olmalıdır, yoksa çerez tabanlı oturum düzgün şifrelenmez:
$cfg['blowfish_secret'] = 'buraya-32-karakterlik-rastgele-deger';
$cfg['Servers'][1]['auth_type'] = 'cookie';
$cfg['Servers'][1]['host'] = '127.0.0.1';
$cfg['Servers'][1]['AllowNoPassword'] = false;
Rastgele bir değer üretmek için şifre üretici aracımızı kullanabilirsiniz. Paket yöneticisiyle gelen phpMyAdmin sürümlerinin dağıtım depolarında sıkça geride kaldığını unutmayın; güvenlik yamaları açısından elle kurup elle güncellemek genellikle daha sağlıklıdır. Paylaşımlı hosting kullanıyorsanız zaten cPanel'in sağladığı phpMyAdmin sürümünü kullanırsınız ve güncellemesi barındırma sağlayıcısının işidir; phpMyAdmin kullanımı yazısında bu arayüzün temel işlemlerini adım adım anlattım.
Günlük İşlerde Özellik Farkları#
Kullanım açısından ikisi de tablo listeleme, satır düzenleme, SQL çalıştırma, dışa/içe aktarma gibi temel işleri yapar. Fark, işin ucundaki ayrıntılarda ortaya çıkar. phpMyAdmin'in ilişki tasarımcısı, yer imleri, sorgu geçmişi, çok adımlı içe aktarma sihirbazı ve kullanıcı yönetimi ekranları çok daha zengindir. Adminer daha hızlı ve daha az tıklamalıdır; şema gezinmesi ve hızlı SELECT işleri için pratikte daha akıcıdır.
| Görev | phpMyAdmin | Adminer |
|---|---|---|
| Tablo yapısı düzenleme | Ayrıntılı form, indeks yönetimi zengin | Sade ve hızlı form |
| SQL çalıştırma | Sözdizimi vurgulu editör, geçmiş kaydı | Sade editör, geçmiş yok |
| Dışa aktarma biçimleri | SQL, CSV, JSON, XML, PDF ve daha fazlası | SQL, CSV, TSV |
| Büyük dosya içe aktarma | Kesintiye dayanıklı kısmi içe aktarma | PHP sınırlarına doğrudan bağlı |
| Kullanıcı ve yetki yönetimi | Kapsamlı arayüz | Temel düzeyde |
| Görsel ilişki şeması | Var (Designer) | Yok |
| Çoklu motor desteği | Yok | Var |
Büyük bir .sql dosyasını tarayıcıdan yüklemeye çalıştığınızda ikisi de aynı duvara toslar: PHP'nin upload_max_filesize, post_max_size ve max_execution_time sınırları. phpMyAdmin bu duvarı kısmi içe aktarma özelliğiyle biraz esnetebilir ama gerçek çözüm hiçbir zaman tarayıcı değildir. Bu konuda ayrıntılı senaryoları phpMyAdmin büyük SQL import hatası yazısında topladım; kısacası 50 MB'ı geçen dosyalarda doğru araç komut satırıdır:
# Tarayıcı yerine doğrudan istemciden yükle (boyut sınırı yok)
mysql -u kullanici -p uygulama_db < /yedek/buyuk-dosya.sql
# Sıkıştırılmış dosyayı açmadan aktarma
gunzip -c /yedek/buyuk-dosya.sql.gz | mysql -u kullanici -p uygulama_db
Kaynak Tüketimi ve Hız#
Adminer tek dosya olduğu için PHP tarafında yüklenen kod miktarı çok daha azdır; sayfa başına daha az bellek ayırır ve opcache olmayan ortamlarda fark hissedilir düzeydedir. phpMyAdmin ise büyük tablolarda daha fazla meta veri sorgusu yapar; özellikle binlerce tablosu olan bir veritabanında tablo listesi ekranı gözle görülür biçimde yavaşlar.
Pratikte şu gözlemi paylaşayım: kısıtlı bellekli küçük bir VDS'te, memory_limit 128 MB olan bir PHP-FPM havuzunda phpMyAdmin'in bazı ekranları sınırı zorlarken Adminer rahat çalışır. Buna karşılık phpMyAdmin, tablo listesindeki satır sayısı tahminleri için yaptığı sorguları kapatmanıza izin verir:
// Büyük veritabanlarında tablo listesini hızlandırır
$cfg['MaxExactCount'] = 0;
$cfg['MaxExactCountViews'] = 0;
Hız farkının bir kısmı da mimarîden değil ağdan gelir: her iki araç da sunucu tarafında çalışır, yani veritabanına yerel bağlanır ve yalnızca HTML tarayıcıya gider. Uzaktan bir masaüstü istemcisi kullansaydınız her sorgunun sonucu ağ üzerinden akacaktı. Uzak bağlantı senaryolarında bu ayrımı DBeaver ile uzak veritabanı yönetimi yazısında ayrıntılandırdım.
Güvenlik Yüzeyi: Asıl Ayrım Burada#
Her iki araç da internetten erişilebilir bir veritabanı yönetim paneli demektir ve bu, saldırganların ilk taradığı şeylerden biridir. Botlar /phpmyadmin, /pma, /adminer.php gibi onlarca yolu sürekli dener. İki aracın risk profili farklıdır: phpMyAdmin geniş kod tabanı nedeniyle tarihsel olarak daha çok güvenlik bülteni yayımlamıştır; Adminer'ın yüzeyi küçüktür ama o da geçmişte ciddi açıklar yaşadı ve tek dosya olması onu otomatik olarak güvenli yapmaz.
Asıl fark kimlik doğrulama modelidir. Adminer'da varsayılan olarak sunucuda saklanan bir kimlik bilgisi yoktur; her girişte veritabanı kullanıcı adı ve parolası istenir. phpMyAdmin'de ise auth_type yanlış yapılandırılırsa (config modu) kimlik bilgileri dosyada durur ve panele erişen herkes doğrudan içeri girer. Ne kullanırsanız kullanın, aşağıdaki katmanları uygulayın:
- Tahmin edilemez yol. Aracı
adminer.phpya da/phpmyadmingibi standart adlarda bırakmayın. - IP kısıtı. Yalnızca ofis ya da VPN adresinden erişime izin verin.
- Ek HTTP kimlik doğrulaması. Veritabanı girişinden önce bir katman daha koyun.
- Yalnızca HTTPS. Parolalar düz metin gitmesin; SSL sertifikası zaten olmalı.
- Kullanmadığınızda kaldırın. Bir kerelik iş için yüklediyseniz iş bitince silin.
# Adminer/phpMyAdmin dizinini IP ile sınırla ve ikinci bir parola katmanı ekle
location ^~ /db-yonetim-7fa2.php {
allow 185.12.34.56; # ofis sabit IP
allow 10.8.0.0/24; # VPN ağı
deny all;
auth_basic "Yetkili erisim";
auth_basic_user_file /etc/nginx/.htpasswd-db;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
Apache tarafında aynı işi .htaccess ile yaparsınız:
# Basic auth kullanıcısı oluştur
htpasswd -c /etc/apache2/.htpasswd-db yonetici
Veritabanı kullanıcı tarafında da tembellik etmeyin: panelden bağlandığınız hesap root olmak zorunda değildir. Yalnızca ilgili veritabanına yetkili ayrı bir kullanıcı açmak, panel ele geçse bile hasarı sınırlar. Yetki modeli için MySQL kullanıcı yetkileri yazısına bakabilirsiniz. Panelin önüne bir WAF koymak da otomatik tarama trafiğinin büyük kısmını daha kapıda keser.
Hangi Senaryoda Hangisini Seçmeli#
Karar aslında birkaç somut soruya iniyor. Tek bir veritabanına ara sıra bakacaksanız, sunucu kaynağınız kısıtlıysa ya da MySQL dışında bir motorla da çalışıyorsanız Adminer daha doğru tercihtir. Ekipçe kullanılan, ilişki şeması çizilen, sık sık büyük dışa aktarma yapılan bir ortamdaysanız phpMyAdmin'in zengin arayüzü zaman kazandırır.
| Senaryo | Önerilen | Gerekçe |
|---|---|---|
| Paylaşımlı hostingte tek site | phpMyAdmin (hazır gelir) | Kurulum ve güncelleme sizde değil |
| Kısıtlı bellekli küçük VDS | Adminer | Düşük bellek, tek dosya |
| PostgreSQL + MySQL birlikte | Adminer | Tek arayüzden iki motor |
| Ekip halinde şema tasarımı | phpMyAdmin | Designer, yer imleri, geçmiş |
| Tek seferlik acil müdahale | Adminer | Kopyala, kullan, sil |
| Günlük geliştirme işi | Masaüstü istemci | SSH tüneli, otomatik tamamlama |
Üçüncü bir yol daha var ve çoğu geliştirici için en sağlıklısı odur: web tabanlı panel yerine masaüstü istemcisini SSH tüneliyle kullanmak. Böylece internete açık hiçbir yönetim paneli bırakmazsınız. Bunu tercih ederseniz doğrudan komut satırında da rahat olmanız gerekir; MySQL veritabanı yönetimi yazısı bu temeli sağlar.
Sık Yapılan Hatalar#
Aracı varsayılan adında bırakmak. adminer.php ya da /phpmyadmin yolları saniyeler içinde taranır. Tahmin edilemez bir isim, tek başına saldırıların büyük çoğunluğunu keser.
İş bittikten sonra dosyayı silmemek. "Bir kere kullanacağım" diye yüklenen Adminer dosyaları, aylar sonra sunucularda güncellenmemiş halde bulunur. Tek dosya olması silmeyi de kolaylaştırır; kullanmadığınızda bırakmayın.
root hesabıyla bağlanmak. Panel üzerinden root kullanmak, panelin ele geçirilmesi durumunda tüm sunucunun veritabanını teslim etmek demektir. Uygulama başına ayrı kullanıcı açın.
phpMyAdmin'de AllowNoPassword açık bırakmak. Bazı örnek yapılandırmalarda bu değer true gelir ve parolasız girişe izin verir. Üretimde mutlaka false olmalıdır.
Büyük içe aktarmayı tarayıcıdan denemek. 500 MB'lık bir dump'ı web arayüzünden yüklemeye çalışmak zaman kaybıdır; yarıda kesilen bir içe aktarma veritabanını tutarsız bırakabilir. Komut satırı ya da source komutu kullanın.
Sıkça Sorulan Sorular#
Adminer ücretsiz mi#
Evet, Adminer açık kaynaklıdır ve ücretsiz kullanılır. Tek yapmanız gereken PHP dosyasını indirip web sunucunuza koymaktır; lisans ya da abonelik gerektirmez. Topluluk tarafından sürdürülen çatalları da mevcuttur ve onlar da aynı şekilde ücretsizdir. Ticari kullanımda da bir kısıt yoktur.
Adminer phpMyAdmin'den daha mı güvenli#
Kod tabanı küçük olduğu için saldırı yüzeyi daha dardır, ancak bu otomatik bir güvenlik garantisi değildir; Adminer da geçmişte ciddi açıklar yaşadı. Asıl belirleyici, aracın nasıl konumlandırıldığıdır: tahmin edilemez bir yol, IP kısıtı, ek HTTP kimlik doğrulaması ve güncel sürüm kullanmak, hangi aracı seçtiğinizden daha çok fark yaratır.
Adminer PostgreSQL ile çalışır mı#
Evet. Adminer'ın en belirgin üstünlüklerinden biri budur: aynı dosyayla MySQL, MariaDB, PostgreSQL, SQLite ve MS SQL gibi motorlara bağlanabilirsiniz. Giriş ekranında sistem seçimi çıkması için sunucuda ilgili PHP eklentisinin kurulu olması gerekir; PostgreSQL için php-pgsql, SQLite için php-sqlite3 paketleri yeterlidir.
phpMyAdmin'i cPanel'de kaldırabilir miyim#
Paylaşımlı hosting hesabında phpMyAdmin barındırma sağlayıcısı tarafından yönetilir ve kullanıcı tarafından kaldırılmaz; erişimi zaten cPanel oturumunuza bağlıdır, yani internete açık ayrı bir panel değildir. Kendi sunucunuzda cPanel/WHM yönetiyorsanız hizmet ayarlarından erişimi kısıtlayabilirsiniz. Bağımsız kurduğunuz bir kopyayı ise dizinini silerek kaldırırsınız.
Büyük SQL dosyasını hangisiyle daha kolay aktarırım#
İkisi de PHP'nin yükleme ve çalışma süresi sınırlarına takılır, ama phpMyAdmin'in kesintiye dayanıklı kısmi içe aktarma özelliği orta boy dosyalarda avantaj sağlar. Yine de 50 MB üzerindeki dosyalarda doğru cevap her iki araç da değildir: SSH erişiminiz varsa mysql < dosya.sql komutu, yoksa dosyayı sunucuya yükleyip SQL sekmesinden source /yol/dosya.sql çalıştırmak çok daha güvenilirdir.
İkisini aynı sunucuda birlikte kullanabilir miyim#
Teknik olarak evet, birbirlerine karışmazlar. Ancak internete açık her yönetim paneli ayrı bir risktir; ikisini birden bırakmak saldırı yüzeyini iki katına çıkarır. Gerçekten ikisine de ihtiyacınız varsa en azından ikisini de IP kısıtı ve ek kimlik doğrulama arkasına alın, kullanmadığınız dönemlerde erişimi kapatın.
Kapanış#
Özetle: Adminer küçük, hızlı ve çok motorlu; phpMyAdmin zengin, ekip dostu ve MySQL dünyasına derin. Seçim büyük ölçüde ihtiyacınıza bağlı ve iki araç arasındaki fark, ikisini de nasıl konumlandırdığınız kadar önemli değil. Aklınızda kalması gereken dört alışkanlık şu: varsayılan yolu değiştirin, IP ve ek parola katmanı koyun, panelden root ile bağlanmayın ve büyük içe aktarmaları komut satırına bırakın.
Hazır ve güncel bir phpMyAdmin ile uğraşmadan çalışmak istiyorsanız cPanel'li web hosting ve WordPress hosting paketlerimizde bu araç kurulu gelir ve güncellemesi bizde. Kendi aracınızı kendi kurallarınızla konumlandırmak isterseniz tam root erişimli VDS sunucularımız uygundur; paneli internete açık bırakmak zorunda kaldığınız durumlarda WAF ve SSL katmanlarını da eklemenizi öneririm.