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ığı:
- Web sunucusu yapılandırması (Apache ve lighttpd için çalışır).
- dbconfig-common kullanarak phpMyAdmin yapılandırma depolaması oluşturma.
- Kur betiğini güvene alma, bakınız Debian, Ubuntu ve türevleri üzerinde kur betiği.
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.
Ayrıca bkz.
-
PMA_HOST
¶ Kullanılacak veritabanı sunucusunun anamakine adı veya IP adresi.
Ayrıca bkz.
-
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ı.
Ayrıca bkz.
-
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.
-
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.
Ayrıca bkz.
-
PMA_QUERYHISTORYMAX
¶ Bir tamsayıya ayarlandığında, geçmiş öğelerinin sayısını denetler.
Ayrıca bkz.
-
PMA_CONTROLHOST
¶ Ayarlandığında, bu, “phpMyAdmin yapılandırma depolaması” veritabanını depolamak için kullanılan alternatif bir veritabanı anamakinesini işaret eder.
Ayrıca bkz.
-
PMA_CONTROLUSER
¶ “phpMyAdmin yapılandırma depolaması” veritabanı için kullanılacak phpMyAdmin’in kullanıcı adını tanımlar.
Ayrıca bkz.
-
PMA_CONTROLPASS
¶ “phpMyAdmin yapılandırma depolaması” veritabanı için kullanılacak phpMyAdmin parolasını tanımlar.
Ayrıca bkz.
-
PMA_CONTROLPORT
¶ Ayarlandığında, denetim anamakinesine bağlanmak için varsayılan bağlantı noktasını (3306) geçersiz kılacak.
Ayrıca bkz.
-
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
Ayrıca bkz.
-
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
vepost_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/
Ayrıca bkz.
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¶
- 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. - Hakiki bir arşiv indirdiğinizden emin olun, bakınız phpMyAdmin yayımlarını doğrulama.
- 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. - 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..
- Ş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.
- 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 daauth_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.. - 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:
- İndirme sunucumuzdan anahtar demetini indirin, ondan sonra şununla içe aktarın:
$ 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:
- En son phpMyAdmin sürümünü <https://www.phpmyadmin.net/downloads/> adresinden indirin.
- Varolan phpMyAdmin klasörünü yeniden adlandırın (örneğin
phpmyadmin-eski
). - Yeni indirilmiş phpMyAdmin paketini istenen konuma açın (örneğin
phpmyadmin
). config.inc.php`
dosyasını eski konumundan (phpmyadmin-eski
) yeni olan konumuna (phpmyadmin
) kopyalayın.- Her şeyin düzgün çalışıp çalışmadığını deneyin.
- 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.
Ayrıca bkz.
1.32 Apache IIS ile >HTTP kimlik doğrulaması kullanabilir miyim?, 1.35 Apache CGI ile HTTP kimlik doğrulaması kullanabilir miyim?, 4.1 Bir ISP’im var. Merkezi bir phpMyAdmin kopyasını kurabilir miyim veya her müşteri için yüklemem mi gerekir?, 4.2 phpMyAdmin’ni kötü niyetli erişime karşı güvenli yapmanın tercih edilen yolu nedir?, 4.3 /lang veya /libraries içinde bir dosya olmamasıyla ilgili hatalar alıyorum.
HTTP kimlik doğrulaması kipi¶
HTTP Basit kimlik doğrulaması yöntemini kullanır ve herhangi bir geçerli MySQL kullanıcısı olarak oturum açmanıza izin verir.
Pek çok PHP yapılandırmasıyla desteklenir. CGI PHP kullanarak IIS (ISAPI) desteği için bakınız 1.32 Apache IIS ile >HTTP kimlik doğrulaması kullanabilir miyim?, Apache CGI ile kullanım için bakınız 1.35 Apache CGI ile HTTP kimlik doğrulaması kullanabilir miyim?.
PHP, Apache’nin mod_proxy_fcgi’si (örn. PHP-FPM ile) altında çalışırken,
Authorization
üstbilgileri temeldeki FCGI uygulamasına geçmez, öyle ki kimlik bilgileriniz uygulamaya ulaşmayacaktır. Bu durumda, aşağıdaki yapılandırma yönergesini ekleyebilirsiniz:SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Aynı zamanda .htaccess mekanizmasını ‘HTTP’ kimlik doğrulaması kipi ile yalnız kullanmamakla ilgili bakınız 4.4 HTTP kimlik doğrulaması kullanırken phpMyAdmin sürekli “Erişim reddedildi” uyarısı veriyor..
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.
Tanımlama bilgisi kimlik doğrulaması kipi¶
- Kullanıcı adı ve parola oturum sırasında tanımlama bilgilerinde saklanır ve sona erdiğinde parola silinir.
- Bu kip ile kullanıcı tamamen phpMyAdmin’nin oturumunu kapatabilir ve aynı kullanıcı adıyla yeniden oturum açabilir (bu, HTTP kimlik doğrulaması kipi ile mümkün değildir).
- Eğer kullanıcılara herhangi bir anamakineye bağlanmaları (sadece
config.inc.php
içinde yapılandırılan sunucuların yerine) için izin vermek istiyorsanız,$cfg['AllowArbitraryServer']
yönergesine bakın. - Gereksinimler bölümünde adı geçtiği gibi,
openssl
uzantısına sahip olmak erişimi oldukça hızlandıracaktır, ancak gerekmez.
Oturumu Açma kimlik doğrulaması kipi¶
- Bu kip, tek bir giriş yapma çözümünü gerçekleştirmek için başka bir uygulamadan gelen kimlik bilgilerinin phpMyAdmin’de kimlik doğrulaması için kullanılmasının uygun bir yoludur.
- Diğer uygulama oturum açma bilgisini oturum verisinde saklamak zorndadır (
$cfg['Servers'][$i]['SignonSession']
ve$cfg['Servers'][$i]['SignonCookieParams']
yönergesine bakın) ya da kimlik bilgilerini vermek için betik uygulamanız gerekir ($cfg['Servers'][$i]['SignonScript']
yönergesine bakın). - Hiç kimlik bilgileri olmadığında, kullanıcı, oturum açma işlemiyle baş edebilmeniz için gereken şu yapılandırmaya yönlendirilir
$cfg['Servers'][$i]['SignonURL']
.
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ç olarakconfig.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.