Kurulum

phpMyAdmin MySQL veritabanı sunucusuna herhangi bir özel güvenlik yöntemi uygulamaz. Bu hala MySQL veritabanı sunucusu üzerinde doğru olarak izinleri veren sistem yöneticisinin işidir. phpMyAdmin’in Kullanıcılar sayfası bunun için kullanılabilir.

Linux dağıtımları

phpMyAdmin çoğu Linux dağıtımlarına dahildir. Mümkün olduğunca dağıtım paketlerinin kullanılması önerilir - genellikle dağıtımınıza bütünleştirme sağlarlar ve dağıtımınızdan güvenlik güncellemelerini otomatik olarak alırsınız.

Debian ve Ubuntu

Çoğu Debian ve Ubuntu sürümü bir phpMyAdmin paketi içerir, ancak yapılandırma dosyasının /etc/phpmyadmin içinde korunduğundan haberiniz olsun ve bir şekilde resmi phpMyAdmin belgelerindekinden farklı olabilir. Özellikle, yaptığı:

Debian veya Ubuntu paketlerinin yüklenmesiyle ilgili daha belirli ayrıntılar viki’mizde mevcuttur.

Ayrıca bkz.

Daha fazla bilgi README.Debian içinde bulanabilir (Paket ile /usr/share/doc/phpmyadmin/README.Debian olarak yüklenir).

OpenSUSE

OpenSUSE her zaman phpMyAdmin paketiyle gelir, sadece paketleri openSUSE Yapım Hizmetinden yükleyin.

Gentoo

Gentoo, phpMyAdmin paketini yollar, hem near-stock yapılandırmasında hem de webapp-config yapılandırmasında. Yüklemek için emerge dev-db/phpmyadmin kullanın.

Mandriva

Mandriva, contrib dalının içinde phpMyAdmin paketini yollar ve herzamanki Denetim Merkezi aracılığıyla yüklenebilir.

Fedora

Fedora, phpMyAdmin paketini yollar, ancak yapılandırma dosyasının /etc/phpMyAdmin/ içinde korunduğundan haberiniz olsun ve bir şekilde resmi phpMyAdmin belgelerindekinden farklı olabilir.

Red Hat Enterprise Linux

Red Hat Enterprise Linux kendisi ve bu yüzden de CentOS gibi türevleri phpMyAdmin’i yollamaz, ama eğer etkinleştirilirse, Fedora-driven deposu Enterprise Linux için Fazladan Paketler (EPEL) yapar böylece. Ancak yapılandırma dosyasının /etc/phpMyAdmin/ içinde korunduğundan haberiniz olsun ve bir şekilde resmi phpMyAdmin belgelerindekinden farklı olabilir.

Windows’a yükleme

Windows’a phpMyAdmin’i yüklemenin en kolay yolu XAMPP gibi bir veritabanı ve web sunucusu ile birlikte olan phpMyAdmin’in dahil olduğu üçüncü taraf ürünleri kullanmaktır.

Buna benzer daha fazla seçenekleri Vikipedi’de bulabilirsiniz.

Git üzerinden yükleme

Git’ten yüklemek için birkaç desteklenen uygulamaya ihtiyacınız olacak:

  • Kaynağı indirmek için Git ya da doğrudan Github’dan en son kaynağı indirebilirsiniz
  • Composer
  • Node.js (sürüm 14 veya daha yükseği)
  • Yarn

phpMyAdmin kaynağını https://github.com/phpmyadmin/phpmyadmin.git adresinden kopyalayabilirsiniz:

git clone https://github.com/phpmyadmin/phpmyadmin.git

İlave olarak Composer kullanarak şu bağımlıları yüklemeniz gerekir:

composer update

Eğer geliştirme niyetinde değilseniz, geliştirici araçlarını yüklemesini şunu çağırarak atlayabilirsiniz:

composer update --no-dev

Son olarak, bazı JavaScript bağımlılıklarını yüklemek için Yarn kullanmanız gerekecek:

yarn install --production

Composer kullanarak yükleme

Composer aracı kullanarak phpMyAdmin’i yükleyebilirsiniz, 4.7.0 sürümünden bu yana yayımlar otomatik olarak varsayılan Packagist deposuna yansıtılır.

Not

Composer deposu içeriği otomatik olarak yayımlardan ayrı olarak oluşturulur, bu yüzden tarball olarak indirdiğiniz ile içerik %100 aynı olmak zorunda değildir. Yine de hiçbir işlevsel farklılık olmamalıdır.

phpMyAdmin’i yüklemek için basitçe çalıştırın:

composer create-project phpmyadmin/phpmyadmin

Alternatif olarak <https://www.phpmyadmin.net/packages.json> adresinde mevcut olan ve yayımlanan tarball’ları içeren kendi composer depomuzu kullanabilirsiniz:

composer create-project phpmyadmin/phpmyadmin --repository-url=https://www.phpmyadmin.net/packages.json --no-dev

Docker kullanarak yükleme

phpMyAdmin, kolayca dağıtabileceğiniz bir Docker resmi imajı ile gelir. Şunu kullanarak indirebilirsiniz:

docker pull phpmyadmin

phpMyAdmin sunucusu 80 nolu bağlantı noktası üzerinde dinlenecek. Bu, ya phpMyAdmin için veritabanı kalıbınızı db ye bağlayarak (--link your_db_host:db belirterek) Docker’ın bağlantı özelliği ile ya da ortam değişkenleri ile veritabanı sunucusuna bağlantıyı yapılandırmanın birkaç yolunu destekler (bu durumda phpMyAdmin kalıbının ağ üzerinden veritabanı kalıbına erişmesine izin vermek için Docker’da ağ kurulumu size kalmış).

Docker ortam değişkenleri

Ortam değişkenlerini kullanarak birkaç phpMyAdmin özelliklerini yapılandırabilirsiniz:

PMA_ARBITRARY

Oturum açma formunda bir veritabanı sunucu anamakine adını girmenize izin verir.

PMA_HOST

Kullanılacak veritabanı sunucusunun anamakine adı veya IP adresi.

PMA_HOSTS

Kullanılacak veritabanı sunucularının virgülle ayrılmış anamakine adları veya IP adresleri.

Not

Sadece eğer PMA_HOST boş ise kullanılır.

PMA_VERBOSE

Veritabanı sunucusunun ayrıntılı adı.

PMA_VERBOSES

Virgülle ayrılmış veritabanı sunucularının ayrıntılı adı.

Not

Sadece eğer PMA_VERBOSE boş ise kullanılır.

PMA_USER

Yapılandırma kimlik doğrulaması kipi için kullanılmak üzere kullanıcı adı.

PMA_PASSWORD

Yapılandırma kimlik doğrulaması kipi için kullanılmak üzere parola.

PMA_PORT

Kullanılacak veritabanı sunucusunun bağlantı noktası.

PMA_PORTS

Kullanmak için virgülle ayrılmış veritabanı sunucularının bağlantı noktaları.

Not

Sadece eğer PMA_PORT boş ise kullanılır.

PMA_SOCKET

Veritabanı bağlantısı için soket dosyası.

PMA_SOCKETS

Veritabanı bağlantıları için soket dosyalarının virgülle ayrılmış listesi.

Not

Sadece PMA_SOCKET boş ise kullanılır.

PMA_ABSOLUTE_URI

Ters proksinin phpMyAdmin’i kullanılır yaptığı tam tanımlanmış yol (https://pma.ornek.net/).

Ayrıca bkz.

$cfg['PmaAbsoluteUri']

PMA_QUERYHISTORYDB

true olarak ayarlandığında, SQL geçmişinin $cfg['Servers'][$i]['pmadb'] konumuna depolanmasını sağlar. false olduğunda, geçmiş tarayıcıda saklanır ve oturum kapatıldığında temizlenir.

Ayrıca bkz.

$cfg['QueryHistoryDB']

PMA_QUERYHISTORYMAX

Bir tamsayıya ayarlandığında, geçmiş öğelerinin sayısını denetler.

PMA_CONTROLHOST

Ayarlandığında, bu, “phpMyAdmin yapılandırma depolaması” veritabanını depolamak için kullanılan alternatif bir veritabanı anamakinesini işaret eder.

PMA_CONTROLUSER

phpMyAdmin yapılandırma depolaması” veritabanı için kullanılacak phpMyAdmin’in kullanıcı adını tanımlar.

PMA_CONTROLPASS

phpMyAdmin yapılandırma depolaması” veritabanı için kullanılacak phpMyAdmin parolasını tanımlar.

PMA_CONTROLPORT

Ayarlandığında, denetim anamakinesine bağlanmak için varsayılan bağlantı noktasını (3306) geçersiz kılacak.

PMA_PMADB

Ayarlandığında, “phpMyAdmin yapılandırma depolaması” veritabanı için kullanılacak veritabanının adını tanımlayın. Ayarlanmadığında, gelişmiş özellikler varsayılan olarak etkinleştirilmez: bunlar kullanıcı tarafından Sıfır yapılandırma özelliği ile oturum açıldığında hala potansiyel olarak etkinleştirilebilir.

Not

Önerilen değerler: phpmyadmin veya pmadb

HIDE_PHP_VERSION

Tanımlanırsa, bu seçenek PHP sürümünü gizleyecektir (expose_php = Off). Herhangi bir değere ayarlayın (HIDE_PHP_VERSION=true gibi).

UPLOAD_LIMIT

Ayarlanırsa, bu seçenek apache ve php-fpm için varsayılan değeri geçersiz kılacaktır (bu upload_max_filesize ve post_max_size değerlerini değiştirecektir).

Not

[0-9+](K,M,G) olarak biçimlendirin. Varsayılan değer 2048K’dır

MEMORY_LIMIT

Eğer ayarlanırsa, bu seçenek phpMyAdmin bellek sınırını $cfg['MemoryLimit'] ve PHP’nin memory_limit değerini geçersiz kılacak.

Not

[0-9+](K,M,G) olarak biçimlendirin; burada K Kilobayt, M Megabayt, G Gigabayt ve 1K = 1024 bayt’tır. Varsayılan değer 512M’dir.

MAX_EXECUTION_TIME

Eğer ayarlanırsa, bu seçenek phpMyAdmin $cfg['ExecTimeLimit'] ve PHP’nin max_execution_time değeri için saniye olarak en fazla yürütme süresini geçersiz kılacak.

Not

[0-9+] olarak biçimlendirin. Varsayılan değer 600’dür.

PMA_CONFIG_BASE64

Ayarlanırsa, bu seçenek değişkenin base64 kodu çözülmüş içeriği ile varsayılan config.inc.php dosyasının üzerine yazacaktır.

PMA_USER_CONFIG_BASE64

Ayarlanırsa, bu seçenek değişkenin base64 kodu çözülmüş içeriği ile varsayılan config.user.inc.php dosyasının üzerine yazacaktır.

PMA_UPLOADDIR

Ayarlanırsa, bu seçenek dosyaların içe aktarılmak üzere kaydedilebileceği yolu ayarlayacaktır ($cfg['UploadDir'])

PMA_SAVEDIR

Ayarlanırsa, bu seçenek dışa aktarılan dosyaların kaydedilebileceği yolu ayarlayacaktır ($cfg['SaveDir'])

APACHE_PORT

Ayarlanırsa, bu seçenek ayrıcalıksız bir bağlantı noktası gibi farklı bir bağlantı noktasında çalışmasını istemeniz durumunda, varsayılan Apache bağlantı noktasını (80) değiştirir. Herhangi bir bağlantı noktası değerine ayarlayın (APACHE_PORT=8090 gibi).

Varsayılan olarak, Tanımlama bilgisi kimlik doğrulaması kipi kullanılır, ancak eğer PMA_USER ve PMA_PASSWORD ayarlanırsa, Yapılandırma kimlik doğrulaması kipi olarak değiştirilir.

Not

Oturum açmak için ihtiyacınız olan kimlik bilgileri MySQL sunucusu içinde saklanır, Docker imajı durumunda, ayarlamak için çeşitli yollar vardır (örneğin MySQL kalıbını başlatma sırasında MYSQL_ROOT_PASSWORD). Lütfen MariaDB kalıbı veya MySQL kalıbı için belgeleri kontrol edin.

Yapılandırmayı özelleştirme

İlave olarak yapılandırma /etc/phpmyadmin/config.user.inc.php ile ayarlanabilir. Eğer bu dosya mevcutsa, yapılandırma yukarıdaki ortam değişkenlerinden oluşturulduktan sonra yüklenecektir, böylece herhangi bir yapılandırma değişkenini geçersiz kılabilirsiniz. Bu yapılandırma, -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php parametreleri kullanılarak docker çağrıldığında bir birim olarak eklenebilir.

Sağlanan yapılandırma dosyasının Docker ortam değişkenleri’inden sonra uygulandığını unutmayın, ancak değerlerden herhangi birini geçersiz kılabilirsiniz.

Örneğin CSV dosyasının dışa aktarımının varsayılan davranışını değiştirmek için aşağıdaki yapılandırma dosyasını kullanabilirsiniz:

<?php
$cfg['Export']['csv_columns'] = true;

Docker ortam değişkenleri içinde listelenen ortam değişkenlerini kullanmak yerine ayrıca bunu sunucu yapılandırmasını tanımlamak için kullanabilirsiniz:

<?php
/* Override Servers array */
$cfg['Servers'] = [
    1 => [
        'auth_type' => 'cookie',
        'host' => 'mydb1',
        'port' => 3306,
        'verbose' => 'Verbose name 1',
    ],
    2 => [
        'auth_type' => 'cookie',
        'host' => 'mydb2',
        'port' => 3306,
        'verbose' => 'Verbose name 2',
    ],
];

Ayrıca bkz.

Yapılandırma seçeneklerinin ayrıntılı açıklaması için Yapılandırma’ya bakın.

Docker Birimleri

Görüntü davranışını özelleştirmek için aşağıdaki birimleri kullanabilirsiniz:

/etc/phpmyadmin/config.user.inc.php

Ek ayarlar için kullanılabilir, daha fazla ayrıntı için önceki bölüme bakın.

/sessions/

PHP oturumlarının depolandığı dizin. Bunu paylaşmak isteyebilirsiniz örneğin Oturumu Açma kimlik doğrulaması kipi kullanırken.

/www/themes/

phpMyAdmin’in temaları arayacağı dizin. Varsayılan olarak sadece phpMyAdmin ile gelen bunlar dahildir, ancak Docker birimlerini kullanarak ilave phpMyAdmin temaları (bakınız Özel Temalar) ekleyebilirsiniz.

Docker Örnekleri

Verilen bir sunucuyu kullanmak üzere phpMyAdmin’i bağlamak için:

docker run --name phpmyadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin:latest

Daha fazla sunucuyu kullanmak üzere phpMyAdmin’i bağlamak için:

docker run --name phpmyadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin:latest

Gelişigüzel sunucu seçeneğini kullanmak için:

docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin:latest

Ayrıca Docker kullanarak veritabanı kalıbını bağlayabilirsiniz:

docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin:latest

İlave yapılandırma ile çalışma:

docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php phpmyadmin:latest

İlave temalar ile çalışma:

docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/custom/phpmyadmin/themeName/:/var/www/html/themes/themeName/ phpmyadmin:latest

Docker-compose kullanma

Alternatif olarak, ayrıca <https://github.com/phpmyadmin/docker> adresinden docker-compose.yml dosyası ile docker-compose kullanabilirsiniz. Bu, oturum açma sayfasında MySQL/MariaDB sunucusunu belirlemenize izin veren - gelişigüzel bir sunucu ile phpMyAdmin’i çalıştıracak.

docker compose up -d

Docker-compose kullanarak yapılandırma dosyasını özelleştirme

phpMyAdmin yapılandırmasını özelleştirmek için harici bir dosya kullanabilir ve birimler yönergesini kullanarak bunu geçebilirsiniz:

phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    environment:
     - PMA_ARBITRARY=1
    restart: always
    ports:
     - 8080:80
    volumes:
     - /sessions
     - ~/docker/phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php
     - /custom/phpmyadmin/theme/:/www/themes/theme/

Bir alt dizinde haproksi arkasında çalışma

Bir alt dizinde bir Docker kalıbı içinde phpMyAdmin’i çalışır bırakmak istediğinizde, sunucu proksi isteklerindeki istek yolunu yeniden yazmanız gerekir.

Örneğin, haproksi kullanarak aşağıdaki gibi yapılabilir:

frontend http
    bind *:80
    option forwardfor
    option http-server-close

    ### NETWORK restriction
    acl LOCALNET  src 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12

    # /phpmyadmin
    acl phpmyadmin  path_dir /phpmyadmin
    use_backend phpmyadmin if phpmyadmin LOCALNET

backend phpmyadmin
    mode http

    reqirep  ^(GET|POST|HEAD)\ /phpmyadmin/(.*)     \1\ /\2

    # phpMyAdmin container IP
    server localhost     172.30.21.21:80

Traefik kullanırken, aşağıdaki gibi bir şeyin çalışması gerekir:

defaultEntryPoints = ["http"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
      regex = "(http:\\/\\/[^\\/]+\\/([^\\?\\.]+)[^\\/])$"
      replacement = "$1/"

[backends]
  [backends.myadmin]
    [backends.myadmin.servers.myadmin]
    url="http://internal.address.to.pma"

[frontends]
   [frontends.myadmin]
   backend = "myadmin"
   passHostHeader = true
     [frontends.myadmin.routes.default]
     rule="PathPrefixStrip:/phpmyadmin/;AddPrefix:/"

O zaman sizde docker-compose yapılandırması içinde PMA_ABSOLUTE_URI parametresini belirlemelisiniz:

version: '2'

services:
  phpmyadmin:
    restart: always
    image: phpmyadmin:latest
    container_name: phpmyadmin
    hostname: phpmyadmin
    domainname: example.com
    ports:
      - 8000:80
    environment:
      - PMA_HOSTS=172.26.36.7,172.26.36.8,172.26.36.9,172.26.36.10
      - PMA_VERBOSES=production-db1,production-db2,dev-db1,dev-db2
      - PMA_USER=root
      - PMA_PASSWORD=
      - PMA_ABSOLUTE_URI=http://example.com/phpmyadmin/

IBM Bulut

Kullanıcılarımızdan biri, phpMyAdmin’i IBM Bulut platformuna yüklemek için yararlı bir rehber oluşturdu.

Hızlı Yükleme

  1. Phpmyadmin.net İndirme sayfasından uygun dağıtım malzemesini seçin. Bazı malzemeler sadece İngilizce iletileri içerir, diğerleri tüm dilleri içerir. Adı phpMyAdmin-x.x.x-all-languages.tar.gz gibi görünen bir malzeme seçtiğinizi varsayacağız.
  2. Hakiki bir arşiv indirdiğinizden emin olun, bakınız phpMyAdmin yayımlarını doğrulama.
  3. Dağıtımı untar veya unzip ile çıkartın (altdizinleri çıkarttığınızdan emin olun): web sunucunuzun belge kök dizini içinde tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz. Eğer belge kök dizininize doğrudan erişiminiz yoksa, dosyaları yerel makinenizdeki dizine koyun ve sonra adım 4’te, örneğin FTP kullanarak dizini web sunucunuza aktarın.
  4. Tüm betiklerin kendine özgü sahibi olduğundan emin olun (eğer PHP güvenli kipte çalışıyorsa, sahibi diğer betiklerin sahibinden farklı olan bazı betikler sorun olacaktır). Öneriler için bakınız 4.2 phpMyAdmin’ni kötü niyetli erişime karşı güvenli yapmanın tercih edilen yolu nedir? ve 1.26 phpMyAdmin’i henüz IIS’nin belge kök klasörü içine kurdum ama phpMyAdmin’i çalıştırmayı denediğimde “Belirtilmiş girdi dosyası yok” hatası alıyorum..
  5. Şimdi kurulumunuzu yapılandırmalısınız. Bunun kullanılabileceği iki yöntem vardır. Geleneksel olarak kullanıcılar config.inc.php dosyasını elle düzenlerler, ama artık grafiksel kurulumu tercih edenler için sihirbaz stilinde kur betiği sağlanmıştır. config.inc.php dosyası oluşturmak, başlamak için gereken hala hızlı bir yoldur ve bazı gelişmiş özellikler için gereklidir.

Dosyayı el ile oluşturma

El ile dosya oluşturmak için basitçe ana (en üst seviyede) phpMyAdmin dizini (index.php dosyasını içeren yerde) içinde config.inc.php (küçük bir yapılandırma dosyasına sahip olmak için config.sample.inc.php dosyasını kopyalayabilirsiniz) dosyası oluşturmak için metin düzenleyicinizi kullanın. phpMyAdmin ilk varsayılan yapılandırma değerlerini yükler ve ondan sonra config.inc.php dosyasında bulduğu herşeyle birlikte bu değerleri geçersiz kılar. Eğer varsayılan değer belirli ayar için tamamsa, config.inc.php dosyası içine dahil etmeye gerek yoktur. İlerlemek için mutemelen sadece birkaç yönergeye ihtiyacınız olacaktır; bunun gibi görünen basit bir yapılandırma:

<?php
// The string is a hexadecimal representation of a 32-bytes long string of random bytes.
$cfg['blowfish_secret'] = sodium_hex2bin('f16ce59f45714194371b48fe362072dc3b019da7861558cd4ad29e4d6fb13851');

$i=0;
$i++;
$cfg['Servers'][$i]['auth_type']     = 'cookie';
// if you insist on "root" having no password:
// $cfg['Servers'][$i]['AllowNoPassword'] = true;

Veya oturum açtığınız her seferde sormamasını tercih ediyorsanız:

<?php

$i=0;
$i++;
$cfg['Servers'][$i]['user']          = 'root';
$cfg['Servers'][$i]['password']      = 'changeme'; // use here your password
$cfg['Servers'][$i]['auth_type']     = 'config';

Uyarı

Herkesin veritabanınızı işleyebildiğinden yapılandırmada saklanan parolalar güvenli değildir.

Olası yapılandırma değerlerinin tam açıklaması için bu belgenin Yapılandırma bölümüne bakın.

Kur betiği kullanımı

config.inc.php dosyasını el ile düzenlemek yerine phpMyAdmin’in kur özelliğini kullanabilirsiniz. Kuru kullanarak dosya oluşturulabilir ve sunucuya göndermek için indirebilirsiniz.

Sonra, tarayıcınızı açın ve /setup soneki ile, phpMyAdmin’i yüklediğiniz yerdeki konumu ziyaret edin. Değişiklikler sunucuya kaydedilmez, bilgisayarınıza kaydetmek için İndir düğmesini kullanmanız gerekir ondan sonra sunucuya gönderin.

Artık dosya kullanıma hazır. Eğer kur betiğinin sağlamadığı bazı gelişmiş seçenekleri ayarlamayı tercih ederseniz, beğendiğiniz düzenleyicinizle dosyayı gözden geçirebilir ya da düzenleyebilirsiniz.

  1. Eğer auth_type “yapılandırması” kullanıyorsanız, phpMyAdmin kurulum dizinini korumanız önerilir çünkü kullanılan yapılandırma kullanıcının phpMyAdmin kurulumuna erişmesi için parola girmesini gerektirmez. Alternatif kimlik doğrulaması yönteminin kullanılması önerilir, örneğin .htaccess dosyasındaki HTTP–AUTH ile ya da auth_type tanımlama bilgisi veya http kullanımına geçmek. İlave bilgiler için bakınız ISP’ler, çoklu kullanıcı kurulumları, özellikle 4.4 HTTP kimlik doğrulaması kullanırken phpMyAdmin sürekli “Erişim reddedildi” uyarısı veriyor..
  2. Tarayıcınızda ana phpMyAdmin dizinini açın. phpMyAdmin artık karşılama ekranını ve veritabanınızı ya da HTTP veya tanımlama bilgisi kimlik doğrulaması kipi kullanılıyorsa oturum açma iletisi görüntülemelidir.

Debian, Ubuntu ve türevleri üzerinde kur betiği

Debian ve Ubuntu, kur betiğinin etkinleştirilmesi ve etkisizleştirilmesi yolunu değiştirdi, bir bakıma bunlardan biri için tek komut çalıştırılmak zorundadır.

Yapılandırmayı düzenlemeye izin veren çalıştırma:

/usr/sbin/pma-configure

Yapılandırmayı düzenlemeyi engelleyen çalıştırma:

/usr/sbin/pma-secure

openSUSE üzerinde kur betiği

Bazı openSUSE yayımları kur betiğini pakete dahil etmez. Bunlar üzerinde yapılandırma oluşturmak istediğiniz takdirde orijinal paketi <https://www.phpmyadmin.net/> adresinden ya indirebilir ya da tanıtım sunucumuzdaki kur betiğini kullanabilirsiniz: <https://demo.phpmyadmin.net/master/setup/>.

phpMyAdmin yayımlarını doğrulama

Temmuz 2015 yılından bu yana tüm phpMyAdmin yayımlarını şifreli olarak Ocak 2016’ya kadar imzalayan yayımlama geliştiricisi Marc Delisle’di. Anahtar kimliği 0xFEFC65D181AF644A, PGP parmak izi:

436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A

ve daha fazla kimlik bilgisini <https://keybase.io/lem9> adresinden alabilirsiniz.

Ocak 2016 başından itibaren, yayım yöneticisi Isaac Bennetch’dir. Anahtar kimliği 0xCE752F178259BD92, ve PGP parmak izi:

3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92

ve daha fazla kimlik bilgisini <https://keybase.io/ibennetch> adresinden alabilirsiniz.

Bazı ilave indirmeler (örneğin temalar) Michal Čihař tarafından imzalanmış olabilir. Anahtar kimliği 0x9C27B31342B7511D, ve PGP parmak izi:

63CB 1DF1 EF12 CF2A C0EE 5A32 9C27 B313 42B7 511D

ve daha fazla kimlik bilgisini <https://keybase.io/nijel> adresinden alabilirsiniz.

İndirdiğiniz arşiv ile eşleşen imzayı doğrulamalısınız. Bu yolla yayımlanmış aynı kodu kullandığınızdan emin olabilirsiniz. Ayrıca en son sürümü indirdiğinizden emin olmak için imzalanma tarihini doğrulamalısınız.

Her arşiv, PGP imzası içeren .asc dosyaları ile eşlik eder. İkisine birden aynı klasörde sahip oldunuz mu, imzayı doğrulayabilirsiniz:

$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
gpg: Can't check signature: public key not found

Gördüğünüz gibi gpg, ortak anahtarı bilmediğinden yakınır. Bu noktada, aşağıdaki adımlardan birini yapmalısınız:

$ gpg --import phpmyadmin.keyring
  • Anahtar sunucularımızın birinden anahtarı indirin ve içe aktarın:
$ gpg --keyserver hkp://pgp.mit.edu --recv-keys 3D06A59ECE730EB71B511C17CE752F178259BD92
gpg: requesting key 8259BD92 from hkp server pgp.mit.edu
gpg: key 8259BD92: public key "Isaac Bennetch <bennetch@gmail.com>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Bu durumu biraz iyileştirecek - bu noktada, verilen anahtardan gelen imzanın doğru olduğunu doğrulayabilirsiniz ancak hala anahtar içinde kullanılan ada güvenemezsiniz:

$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
gpg: Good signature from "Isaac Bennetch <bennetch@gmail.com>"
gpg:                 aka "Isaac Bennetch <isaac@bennetch.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 3D06 A59E CE73 0EB7 1B51  1C17 CE75 2F17 8259 BD92

Buradaki sorun herhangi bir kimsenin bu isimde olan anahtarla sorunu olabilir. Aslında anahtarın söz konusu kişi tarafından sahiplenildiğinden emin olmanız gerekir. GNU Gizlilik El Kitabı Validating other keys on your public keyring (Ortak anahtar demetinizdeki diğer anahtarları doğrulama) bölümünde bu konuyu kapsar. En güvenilir yöntem geliştirici ile bizzat tanışmak ve anahtar parmak izlerini takas etmektir, ancak, aynı zamanda güvenli web’e güvenebilirsiniz. Bu yolla başkalarının imzaları aracılığıyla geçişli olarak anahtara güvenebilirsiniz.

Anahtar güvenilir olduğunda, uyarı görülmeyecek:

$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
gpg: Good signature from "Isaac Bennetch <bennetch@gmail.com>" [full]

İmza geçersiz olmalıdır (arşiv değiştirildi), anahtarın güvenilir olması ya da olmaması gerçeğine bakılmaksızın açık bir hata alırsınız:

$ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc
gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92
gpg: BAD signature from "Isaac Bennetch <bennetch@gmail.com>" [unknown]

phpMyAdmin yapılandırma depolaması

3.4.0 sürümünde değişti: phpMyAdmin 3.4.0 öncesinde bu Bağlantılı Tablolar Altyapısı olarak adlandırılırdı, ancak adı genişletilmiş depolama kapsamından dolayı değiştirildi.

İlave özelliklerin (Yer işaretleri, açıklamalar, SQL-geçmişi, izleme mekanizması, PDF-üretme, Dönüşümler, İlişkiler vb.) bütün grubu için özel tablo grubu oluşturmanız gerekir. Bu tablolar kendi veritabanınıza veya çoklu kullanıcılı kurulumlar (bu veritabanına, denetim kullanıcısı tarafından erişilebilecektir bu yüzden diğer hiçbir kullanıcı bu hakka sahip olmamalıdır) için merkezi veritabanına yerleştirilebilir.

Sıfır yapılandırma

Çoğu durumda, bu veritbanı yapısı otomatik olarak oluşturulabilir ya da yapılandırılabilir. Buna “Sıfır Yapılandırma” kipi denir ve özellikle paylaşılan barındırma durumlarında faydalı olabilir. “ZeroConf” kipi varsayılan olarak açıktır, etkisizleştirmek için $cfg['ZeroConf'] parametresini false olarak ayarlayın.

Aşağıdaki üç senaryo Sıfır Yapılandırma kipi tarafından ele alınmaktadır:

  • Yapılandırma depolama tablolarının mevcut olmadığı bir veritabanına girerken, phpMyAdmin bunları İşlemler sekmesinden oluşturmanıza olanak sunar.
  • Tabloları zaten mevcut olan bir veritabanına girildiğinde, yazılım otomatik olarak bunu algılar ve bunları kullanmaya başlar. Bu en yaygın bir durumdur; tablolar otomatik olarak başlangıçta oluşturulduktan sonra sürekli olarak kullanıcıyı rahatsız etmeden kullanılır; bu ayrıca, kullanıcının config.inc.php dosyasını düzenlemesi mümkün olmayan paylaşılan barındırmada çok faydalıdır ve genellikle kullanıcının sadece bir veritabanına erişimi vardır.
  • Çoklu veritabanlarına erişilirken, eğer kullanıcı yapılandırma depolaması tablolarını içeren veritabanına ilk defa giriyorsa ondan sonra başka bir veritabanına geçerse, phpMyAdmin ilk veritabanından tabloları kullanmaya devam eder; kullanıcıya yeni veritabanında daha fazla tablo oluşturması için sorulmaz.

Elle yapılandırma

Lütfen ./sql/ dizininize bakın, create_tables.sql adındaki dosyayı burada bulmalısınız. (Eğer Windows sunucusu kullanıyorsanız, 1.23 Win32 makinede MySQL çalıştırıyorum. Her defasında yeni bir tablo oluşturduğumda tablo ve sütun adları küçük harfe değiştiriliyor! konusuna özellikle dikkat edin).

Eğer zaten bu altyapıya sahipseniz ve:

  • MySQL 4.1.2 veya yenisine yükseltmişseniz, lütfen sql/upgrade_tables_mysql_4_1_2+.sql dosyasını kullanın.
  • 2.5.0 veya yenisinden, phpMyAdmin 4.3.0 veya yenisine (<= 4.2.x) yükseltmişseniz, lütfen sql/upgrade_column_info_4_3_0+.sql dosyasını kullanın.
  • 4.3.0 veya yenisinden, phpMyAdmin 4.7.0 veya yenisine yükseltmişseniz, lütfen sql/upgrade_tables_4_7_0+.sql dosyasını kullanın.

ve ondan sonra sql/create_tables.sql dosyasını içe aktararak yeni tabloları oluşturun.

phpMyAdmin’ninizi sizin için tablo oluşturmada kullanabilirsiniz. Lütfen veritabanları ve tablolar oluşturmak için özel (yönetici) yetkilere ihtiyacınız olduğunun farkında olun ve bu betiğin veritabanının adına bağlı olarak bazı ayarlamalara ihtiyacı olabilir.

sql/create_tables.sql dosyası içe aktarıldıktan sonra config.inc.php dosyanız içindeki tablo adlarını belirlemelisiniz. Bunun için kullanılan yönergeler Yapılandırma içinde bulunabilir.

Ayrıca bu tablolar için uygun hakları olan bir denetim kullancısına ($cfg['Servers'][$i]['controluser'] ve $cfg['Servers'][$i]['controlpass'] ayarları) ihtiyacınız olacak. Örneğin aşağıdaki ifadeyi kullanarak oluşturabilirsiniz:

Ve herhangi bir MariaDB sürümü için:

CREATE USER 'pma'@'localhost' IDENTIFIED VIA mysql_native_password USING 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON `<pma_db>`.* TO 'pma'@'localhost';

MySQL 8.0 ve daha yenisi için:

CREATE USER 'pma'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';

8.0’dan daha eski MySQL için:

CREATE USER 'pma'@'localhost' IDENTIFIED WITH mysql_native_password AS 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';

7.4’ten daha eski PHP ve 8.0’dan daha yeni MySQL kurulumlarının mysql_native_password kimlik doğrulamasını geçici çözüm olarak kullanmayı gerektirebileceğini unutmayın, ayrıntılar için bakınız 1.45 Oturum açmaya çalışırken bilinmeyen kimlik doğrulama yöntemi caching_sha2_password hakkında bir hata iletisi alıyorum .

Eski sürümden yükseltme

Uyarı

Yeni sürüm paketini asla phpMyAdmin’in varolan bir kurulumu üzerine çıkartmayın, her zaman önce sadece yapılandırma dosyalarını tutarak eski dosyaları silin.

Bu şekilde, ciddi güvenlik çıkarımlarına veya çeşitli kırılmalara neden olabilen, dizinde herhangi bir eski veya güncel olmayan dosya bırakmayacaksınız.

Yeni açılmış olan paket içine önceki kurulumunuzdan config.inc.php dosyasını basitçe kopyalayın. Eski sürümden alınan yapılandırma dosyası, bazı değişmiş veya kaldırılmış seçeneklerinden dolayı bazı ince ayarlar gerektirebilir. PHP 5.3 ve sonrası ile uyumluluk için yapılandırma dosyanızın en sonunda bulabileceğiniz set_magic_quotes_runtime(0); ifadesini kaldırın.

Tam yükseltme birkaç basit adımda gerçekleştirilebilir:

  1. En son phpMyAdmin sürümünü <https://www.phpmyadmin.net/downloads/> adresinden indirin.
  2. Varolan phpMyAdmin klasörünü yeniden adlandırın (örneğin phpmyadmin-eski).
  3. Yeni indirilmiş phpMyAdmin paketini istenen konuma açın (örneğin phpmyadmin).
  4. config.inc.php` dosyasını eski konumundan (phpmyadmin-eski) yeni olan konumuna (phpmyadmin) kopyalayın.
  5. Her şeyin düzgün çalışıp çalışmadığını deneyin.
  6. Bir önceki sürümün yedeğini kaldırın (phpmyadmin-eski).

Eğer önceki 4.1.2 sürümünden 5.x veya daha yeni sürümüne MySQL sunucunuzu yükselttiyseniz ve phpMyAdmin yapılandırma depolaması kullanıyorsanız, sql/upgrade_tables_mysql_4_1_2+.sql içinde bulunan SQL betiğini çalıştırmalısınız.

Eğer phpMyAdmin’inizi 2.5.0 veya yenisinden 4.3.0 veya yenisine (<= 4.2.x) yükselttiyseniz ve phpMyAdmin yapılandırma depolaması kullanıyorsanız, sql/upgrade_column_info_4_3_0+.sql içinde bulunan SQL betiğini çalıştırmalısınız.

Tarayıcı önbelleğini temizlemeyi ve oturumu kapatıp ve tekrar oturum açarak eski oturumu boşaltmayı unutmayın.

Kimlik doğrulaması kipleri kullanımı

Kullanıcılara kendi veritabanlarına erişim vermek istediğiniz ve diğerleri ile oynamalarını istemediğiniz çoklu kullanıcılı ortam içinde HTTP ve tanımlama bilgisi kimlik doğrulaması kipleri önerilir. Yine de, MS Internet Explorer’ın tanımlama bilgileri ile ilgili olarak gerçekten hatalı göründüğünün farkında olun, en azından sürüm 6’ya kadar. Hatta tekli kullanıcılı ortam içinde bile, HTTP veya tanımlama bilgisi kimlik doğrulaması kipini kullanmayı tercih edebilirsiniz böylece kullanıcı adı/parola eşlemeniz yapılandırma dosyasında açıkta olmaz.

HTTP ve tanımlama bilgisi kimlik doğrulaması kipleri daha güvenlidir: MySQL oturum açma bilgisinin phpMyAdmin yapılandırma dosyasında (mümkünse $cfg['Servers'][$i]['controluser'] için hariç) ayarlanmasına ihtiyacı yoktur. Ancak, aklınızda olsun HTTPS protokolü kullanmadığınız sürece, parola düz metin içinde yolculuk eder. Tanımlama bilgisi kipinde, parola geçici tanımlama bilgisi içinde AES algoritması ile şifrelenip saklanır.

Ondan sonra her gerçek kullanıcıya belli bir takım veritabanlarında bir takım yetkiler verilmelidir. Bu yetkilerin etkisini anlamadıkça normal olarak sıradan kullanıcıya genel yetkileri vermemelisiniz (örneğin, süper kullanıcı oluşturuyorsunuz). Örneğin, kullanıcı_tabanlı veritabanındaki tüm yetkiler ile gerçek_kullanıcı kullanıcısını vermek için:

GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost IDENTIFIED BY 'real_password';

Kullanıcının burada hemen yapabildiği MySQL kullanıcı yönetimi sistemi tarafından tamamen kontrol etmektir. HTTP veya tanımlama bilgisi kimlik doğrulaması kipi ile $cfg['Servers'] dizilimi içindeki kullanıcı/parola alanlarını doldurmanıza gerek yok.

HTTP kimlik doğrulaması kipi

Not

HTTP kimlik doğrulaması’nda uygun oturum kapatmanın bir yolu yoktur, çoğu tarayıcı farklı başarılı kimlik doğrulaması olana kadar kimlik bilgilerini hatırlar. Bu nedenle, bu yöntem, oturumu kapattıkan sonra aynı kullanıcı ile oturum açamayacağınız bir sınırlamaya sahiptir.

Oturumu Açma kimlik doğrulaması kipi

Bir oturumda kimlik bilgilerini kaydetmenin en temel örneği examples/signon.php olarak mevcuttur:

<?php
/**
 * Single signon for phpMyAdmin
 *
 * This is just example how to use session based single signon with
 * phpMyAdmin, it is not intended to be perfect code and look, only
 * shows how you can integrate this functionality in your application.
 */

declare(strict_types=1);

/* Use cookies for session */
ini_set('session.use_cookies', 'true');
/* Change this to true if using phpMyAdmin over https */
$secureCookie = false;
/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secureCookie, true);
/* Create signon session */
$sessionName = 'SignonSession';
session_name($sessionName);
// Uncomment and change the following line to match your $cfg['SessionSavePath']
//session_save_path('/foobar');
@session_start();

/* Was data posted? */
if (isset($_POST['user'])) {
    /* Store there credentials */
    $_SESSION['PMA_single_signon_user'] = $_POST['user'];
    $_SESSION['PMA_single_signon_password'] = $_POST['password'];
    $_SESSION['PMA_single_signon_host'] = $_POST['host'];
    $_SESSION['PMA_single_signon_port'] = $_POST['port'];
    /* Update another field of server configuration */
    $_SESSION['PMA_single_signon_cfgupdate'] = ['verbose' => 'Signon test'];
    $_SESSION['PMA_single_signon_HMAC_secret'] = hash('sha1', uniqid(strval(random_int(0, mt_getrandmax())), true));
    $id = session_id();
    /* Close that session */
    @session_write_close();
    /* Redirect to phpMyAdmin (should use absolute URL here!) */
    header('Location: ../index.php');
} else {
    /* Show simple form */
    header('Content-Type: text/html; charset=utf-8');

    echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
    echo '<!DOCTYPE HTML>
<html lang="en" dir="ltr">
<head>
<link rel="icon" href="../favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="../favicon.ico" type="image/x-icon">
<meta charset="utf-8">
<title>phpMyAdmin single signon example</title>
</head>
<body>';

    if (isset($_SESSION['PMA_single_signon_error_message'])) {
        echo '<p class="error">';
        echo $_SESSION['PMA_single_signon_error_message'];
        echo '</p>';
    }

    echo '<form action="signon.php" method="post">
Username: <input type="text" name="user" autocomplete="username" spellcheck="false"><br>
Password: <input type="password" name="password" autocomplete="current-password" spellcheck="false"><br>
Host: (will use the one from config.inc.php by default)
<input type="text" name="host"><br>
Port: (will use the one from config.inc.php by default)
<input type="text" name="port"><br>
<input type="submit">
</form>
</body>
</html>';
}

Alternatif olarak, ayrıca bu yolu OpenID ile bütünleştirerek examples/openid.php dosyasında gösterildiği gibi kullanabilirsiniz:

<?php
/**
 * Single signon for phpMyAdmin using OpenID
 *
 * This is just example how to use single signon with phpMyAdmin, it is
 * not intended to be perfect code and look, only shows how you can
 * integrate this functionality in your application.
 *
 * It uses OpenID pear package, see https://pear.php.net/package/OpenID
 *
 * User first authenticates using OpenID and based on content of $AUTH_MAP
 * the login information is passed to phpMyAdmin in session data.
 */

declare(strict_types=1);

if (false === @include_once 'OpenID/RelyingParty.php') {
    exit;
}

/* Change this to true if using phpMyAdmin over https */
$secureCookie = false;

/**
 * Map of authenticated users to MySQL user/password pairs.
 */
$authMap = ['https://launchpad.net/~username' => ['user' => 'root', 'password' => '']];

// phpcs:disable PSR1.Files.SideEffects,Squiz.Functions.GlobalFunction

/**
 * Simple function to show HTML page with given content.
 *
 * @param string $contents Content to include in page
 */
function Show_page(string $contents): void
{
    header('Content-Type: text/html; charset=utf-8');

    echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
    echo '<!DOCTYPE HTML>
<html lang="en" dir="ltr">
<head>
<link rel="icon" href="../favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="../favicon.ico" type="image/x-icon">
<meta charset="utf-8">
<title>phpMyAdmin OpenID signon example</title>
</head>
<body>';

    if (isset($_SESSION['PMA_single_signon_error_message'])) {
        echo '<p class="error">' . $_SESSION['PMA_single_signon_message'] . '</p>';
        unset($_SESSION['PMA_single_signon_message']);
    }

    echo $contents;
    echo '</body></html>';
}

/**
 * Display error and exit
 *
 * @param Exception $e Exception object
 */
function Die_error(Throwable $e): void
{
    $contents = "<div class='relyingparty_results'>\n";
    $contents .= '<pre>' . htmlspecialchars($e->getMessage()) . "</pre>\n";
    $contents .= "</div class='relyingparty_results'>";
    Show_page($contents);
    exit;
}

// phpcs:enable

/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secureCookie, true);
/* Create signon session */
$sessionName = 'SignonSession';
session_name($sessionName);
@session_start();

// Determine realm and return_to
$base = 'http';
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') {
    $base .= 's';
}

$base .= '://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'];

$realm = $base . '/';
$returnTo = $base . dirname($_SERVER['PHP_SELF']);
if ($returnTo[strlen($returnTo) - 1] !== '/') {
    $returnTo .= '/';
}

$returnTo .= 'openid.php';

/* Display form */
if ((! count($_GET) && ! count($_POST)) || isset($_GET['phpMyAdmin'])) {
    /* Show simple form */
    $content = '<form action="openid.php" method="post">
OpenID: <input type="text" name="identifier"><br>
<input type="submit" name="start">
</form>';
    Show_page($content);
    exit;
}

/* Grab identifier */
$identifier = null;
if (isset($_POST['identifier']) && is_string($_POST['identifier'])) {
    $identifier = $_POST['identifier'];
} elseif (isset($_SESSION['identifier']) && is_string($_SESSION['identifier'])) {
    $identifier = $_SESSION['identifier'];
}

/* Create OpenID object */
try {
    $o = new OpenID_RelyingParty($returnTo, $realm, $identifier);
} catch (Throwable $e) {
    Die_error($e);
}

/* Redirect to OpenID provider */
if (isset($_POST['start'])) {
    try {
        $authRequest = $o->prepare();
    } catch (Throwable $e) {
        Die_error($e);
    }

    $url = $authRequest->getAuthorizeURL();

    header('Location: ' . $url);
    exit;
}

/* Grab query string */
if (! count($_POST)) {
    [, $queryString] = explode('?', $_SERVER['REQUEST_URI']);
} else {
    // Fetch the raw query body
    $queryString = file_get_contents('php://input');
}

/* Check reply */
try {
    $message = new OpenID_Message($queryString, OpenID_Message::FORMAT_HTTP);
} catch (Throwable $e) {
    Die_error($e);
}

$id = $message->get('openid.claimed_id');

if (empty($id) || ! isset($authMap[$id])) {
    Show_page('<p>User not allowed!</p>');
    exit;
}

$_SESSION['PMA_single_signon_user'] = $authMap[$id]['user'];
$_SESSION['PMA_single_signon_password'] = $authMap[$id]['password'];
$_SESSION['PMA_single_signon_HMAC_secret'] = hash('sha1', uniqid(strval(random_int(0, mt_getrandmax())), true));
session_write_close();
/* Redirect to phpMyAdmin (should use absolute URL here!) */
header('Location: ../index.php');

Daha başka bir şekilde kullanarak kimlik bilgilerini geçmek istiyorsanız, verileri almak ve $cfg['Servers'][$i]['SignonScript'] olarak ayarlamak için PHP içinde sarmalayıcı uygulamak zorundasınız. Çok küçük bir örneği examples/signon-script.php içinde var:

<?php
/**
 * Single signon for phpMyAdmin
 *
 * This is just example how to use script based single signon with
 * phpMyAdmin, it is not intended to be perfect code and look, only
 * shows how you can integrate this functionality in your application.
 */

declare(strict_types=1);

// phpcs:disable Squiz.Functions.GlobalFunction

/**
 * This function returns username and password.
 *
 * It can optionally use configured username as parameter.
 *
 * @param string $user User name
 *
 * @return array<int,string>
 */
function get_login_credentials(string $user): array
{
    /* Optionally we can use passed username */
    if (! empty($user)) {
        return [$user, 'password'];
    }

    /* Here we would retrieve the credentials */
    return ['root', ''];
}

Yapılandırma kimlik doğrulaması kipi

  • Bu kip bazen daha az güvenli olandır çünkü $cfg['Servers'][$i]['user'] ve $cfg['Servers'][$i]['password'] alanlarını doldurmanızı gerektirir (ve sonuç olarak config.inc.php dosyanızı okuyabilen her kim olursa kullanıcı adı ve parolanızı keşfedebilir).
  • ISP’ler, çoklu kullanıcı kurulumları bölümü içinde yapılandırma dosyanızı nasıl koruyacağınızı anlatan bir giriş vardır.
  • Bu kipte ilave güvenlik için Anamakine kimlik doğrulaması $cfg['Servers'][$i]['AllowDeny']['order'] ve $cfg['Servers'][$i]['AllowDeny']['rules'] yapılandırma yönergelerini dikkate almak isteyebilirsiniz.
  • Tanımlama bilgisi ve http’den farklı olarak, phpMyAdmin sitesinin ilk yüklenmesinde oturum açmak için kullanıcı gerekmez. Bu tasarımındandır ama herhangi bir kullanıcının kurulumunuza erişmesine izin verebilir. Bazı kısıtlama yöntemlerini kullanmak önerilmektedir, belki HTTP-AUTH yönergesiyle .htaccess dosyası veya birinin yönlendiricisinde gelen HTTP isteklerine izin vermemek ya da güvenlik duvarı yetecektir (her ikiside bu kılavuzun kapsamı dışında ama kolaylıkla Google ile aranabilir).

phpMyAdmin kurulumunuzun güvenliğini sağlama

phpMyAdmin takımı uygulamayı güvenli yapmak için zorlamaya çalışır, ancak daima kurulumunuzu daha güvenli yapan yollar vardır:

  • Güvenlik duyurularımızı takip edin ve yeni güvenlik açığı yayımlanır yayımlanmaz phpMyAdmin’i yükseltin.

  • phpMyAdmin’in sadece HTTPS üzerinden hizmet etmesi. Tercihen, HSTS bile kullanmalısınız, öyle ki protokol düşürme saldırılarından korunursunuz.

  • PHP kurulumunuzun üretim siteleri için önerileri takip ettiğinden emin olun, örneğin display_errors etkisizleştirilmelidir.

  • Geliştirme yapmıyorsanız ve bir deneme paketine ihtiyaç duymuyorsanız, phpMyAdmin’den test dizinini kaldırın.

  • phpMyAdmin’den setup dizinini kaldırın, muhtemelen baştaki kurulumdan sonra kullanmayacaksınız.

  • Kimlik doğrulaması yöntemini uygun şekilde seçin - Tanımlama bilgisi kimlik doğrulaması kipi paylaşılan barındırma için muhtemelen en iyi seçimdir.

  • Web sunucusu yapılandırmanızda ./libraries/ veya ./templates/ altklasörlerindeki yardımcı dosyalara erişimi engeller. Bu gibi yapılandırma, olası yolu açıkta bırakmaya ve bu kodda bulunabilmesine olanak veren çapraz taraflı betik yazımı savunmasızlığına engel olur. Apache web sunucusu için genellikle bu dizinlerdeki .htaccess dosyasıyla bu başarı sağlanır.

  • Geçici dosyalara erişimi engeller, bakınız $cfg['TempDir'] (eğer bu web kök klasörünüz içinde bulunuyorsa, ayrıca bakınız Web sunucusu gönderme/kaydetme/içe aktarma dizinleri.

  • Bu genelde, herkese açık bir phpMyAdmin kurulumunu, çoğunlukla iyi hiçbir şey yapamayan robotların erişimine karşı korumak için iyi bir fikirdir. Bunu web sunucunuzun kök dizininde robots.txt dosyasını kullanarak veya web sunucusu yapılandırması sayesinde erişimi sınırlandırarak yapabilirsiniz, bakınız 1.42 Robot’ları phpMyAdmin’e erişimini nasıl önleyebilirim?.

  • MySQL kullanıcılarının phpMyAdmin’e erişebilmesini istemediğiniz durumda, onları sınırlandırmak için $cfg['Servers'][$i]['AllowDeny']['rules'] veya root kullanıcısı erişimini reddetmek için $cfg['Servers'][$i]['AllowRoot'] kullanabilirsiniz.

  • Hesabınız için İki etkenli kimlik doğrulaması ‘ni etkinleştirme.

  • phpMyAdmin’i kimlik doğrulamalı proksi arkasında gizlemeyi düşünün, böylece kullanıcıların MySQL kimlik bilgilerini phpMyAdmin’e vermeden önce kimlik doğrulaması yapmaları gerekir. Web sunucunuzu HTTP kimlik doğrulaması istemesi için yapılandırarak bunu elde edebilirsiniz. Örneğin Apache’de bu şöyle yapılabilir:

    AuthType Basic
    AuthName "Restricted Access"
    AuthUserFile /usr/share/phpmyadmin/passwd
    Require valid-user
    

    Bir kez yapılandırmayı değiştirdiniz mi, kimliğini doğrulayabilen kullanıcıların bir listesini oluşturmanız gerekir. Bu, htpasswd yardımcı uygulaması kullanılarak yapılabilir:

    htpasswd -c /usr/share/phpmyadmin/passwd username
    
  • Eğer otomatikleştirilmiş saldırılardan korkuyorsanız, $cfg['CaptchaLoginPublicKey'] ve $cfg['CaptchaLoginPrivateKey'] ile Captcha’yı etkinleştirmek bir seçenek olabilir.

  • Başarısız oturum açma girişimleri syslog’a (eğer mevcutsa, bakınız $cfg['AuthLog']) günlüklenir. Bu, deneme yanılma saldırısı girişimlerini engellemek için fail2ban gibi bir aracı kullanmaya izin verebilir. Syslog tarafından kullanılan günlük dosyasının Apache hata veya erişim günlük dosyaları ile aynı olmadığını unutmayın.

  • phpMyAdmin’i diğer PHP uygulamaları ile çalıştırmanız durumunda, olası oturum tabanlı saldırıları buna karşı önlemek için phpMyAdmin’in ayrı oturum depolaması kullanması genellikle tavsiye edilir. Bunu başarmak için $cfg['SessionSavePath'] kullanabilirsiniz.

Veritabanı sunucusuna bağlantı için SSL kullanımı

Uzak veritabanı sunucusuna bağlanırken SSL kullanılması önerilir. SSL kurulumunun yer aldığı birçok yapılandırma seçeneği vardır:

$cfg['Servers'][$i]['ssl']
Tümünde SSL kullanılıp kullanılmayacağını tanımlar. Eğer sadece bunu etkinleştirirseniz, bağlantı şifrelenecektir, ancak bağlantının kimlik doğrulaması olmaz - doğru sunucuyla konuştuğunuzu doğrulayamazsınız.
$cfg['Servers'][$i]['ssl_key'] ve $cfg['Servers'][$i]['ssl_cert']
Bu, istemcinin sunucuya kimliğini doğrulaması için kullanılır.
$cfg['Servers'][$i]['ssl_ca'] ve $cfg['Servers'][$i]['ssl_ca_path']
Sunucu sertifikaları için güvendiğiniz sertifika yetkilileri. Bu, bir güvenilen sunucuyla konuştuğunuzdan emin olmak için kullanılır.
$cfg['Servers'][$i]['ssl_verify']
Bu yapılandırma, sunucu sertifika doğrulamasını etkisizleştirir. Dikkatli kullanın.

Veritabanı sunucusu yerel bir bağlantı veya özel ağ kullanırken ve SSL yapılandırılamadığında, güvenli olduğu düşünülen anamakine adlarını açıkça listelemek için $cfg['MysqlSslWarningSafeHosts'] seçeneğini kullanabilirsiniz.

Bilinen sorunlar

Sütuna özel yetkileri olan kullanıcılar “Gözat” işlemi yapamazlar

Eğer bir kullanıcı bir tablodaki bazı (ama tümü değil) sütunlarda sadece sütuna özel yetkilere sahipse, “Gözat” işlemi bir hata iletisi ile başarısız olacaktır.

Geçici bir çözüm olarak, tablo olarak aynı isimde yer işaretli bir sorgu oluşturulabilir, bunun yerine “Gözat” bağlantısı kullanarak bu çalışacaktır. Sorun 11922.

‘Http’ kimlik doğrulaması kullanarak oturumu kapattıktan sonra tekrar oturum açma sorunu

‘Http’ auth_type kullanıldığında, tekrar oturum açma imkansız olabilir (oturum kapatma el ile olduğunda ya da bir süre işlem yapılmamasından sonra). Sorun 11898.