インストール¶
phpMyAdmin は MySQL データベースサーバに特別なセキュリティをほどこすものではありません。phpMyAdmin を使ったとしても、MySQL データベースに適切なパーミッションを付与するのはやはりシステム管理者の仕事です。ただし、その目的で phpMyAdmin の 特権 ページを使うことはできます。
Linux ディストリビューション¶
phpMyAdmin は多くの Linux ディストリビューションに含まれています。できればディストリビューションのパッケージを使用することをお勧めします。そちらはふつう、ディストリビューションとの統合が提供され、ディストリビューションからのセキュリティ更新を自動的に受けることができるからです。
Debian と Ubuntu¶
Debian と Ubuntu のほとんどのバージョンは phpMyAdmin パッケージを含んでいますが、構成ファイルは /etc/phpmyadmin
の中で管理されており、公式の phpMyAdmin のドキュメントといくつかの点で異なることがあります。特に、以下のような点です。
- ウェブサーバの構成 (Apache および lighttpd で動作)。
- dbconfig-common を使用して phpMyAdmin 環境保管領域 を作成すること。
- セットアップスクリプトの保護。 Debian、Ubuntu とその派生製品のセットアップスクリプト を参照してください。
Debian または Ubuntu パッケージのインストールに関する詳細は `Wiki 内<https://github.com/phpmyadmin/phpmyadmin/wiki/DebianUbuntu>`にあります。
参考
More information can be found in README.Debian
(it is installed as /usr/share/doc/phpmyadmin/README.Debian
with the package).
OpenSUSE¶
OpenSUSE ではすでに phpMyAdmin パッケージがあり、 openSUSE Build Service <https://software.opensuse.org/package/phpMyAdmin> からパッケージをインストールするだけです。
Gentoo¶
Gentoo は、ストックに近い構成と webapp-config
構成の両方で phpMyAdmin パッケージを提供しています。インストールするには emerge dev-db/phpmyadmin
を使用してください。
Mandriva¶
Mandriva は phpMyAdmin パッケージを contrib
ブランチで提供しており、通常の Control Center からインストールすることができます。
Fedora¶
Fedora は phpMyAdmin パッケージを提供していますが、構成ファイルは /etc/phpMyAdmin/
に保持されており、公式の phpMyAdmin ドキュメントとは異なる場合があることに注意してください。
Red Hat Enterprise Linux¶
Red Hat Enterprise Linux 自身は、 CentOS のような派生物も phpMyAdmin を提供していませんが、 Fedora 手動のリポジトリである Extra Packages for Enterprise Linux (EPEL) が enabled になっている場合は利用できます。ただし、構成ファイルが /etc/phpMyAdmin/
に保持されていることと、公式の phpMyAdmin ドキュメントとは多少の違いがあることに注意してください。
Windows へのインストール¶
phpMyAdmin を Windows 上で利用できるようにするもっとも簡単な方法は、 XAMPP のような phpMyAdmin とデータベース、ウェブサーバを一緒に含むサードパーティ製品をインストールすることです。
それ以外の同様の選択肢は Wikipedia を参照してください。
Git からのインストール¶
Git からインストールするためには、いくつかのサポートアプリケーションが必要になります。
You can clone current phpMyAdmin source from
https://github.com/phpmyadmin/phpmyadmin.git
:
git clone https://github.com/phpmyadmin/phpmyadmin.git
加えて、 Composer を使用して依存するものをインストールする必要があります。
composer update
開発するためでなければ、次の呼び出しで開発者ツールのインストールをスキップすることができます。
composer update --no-dev
最後に、 Yarn を使用して JavaScript の依存モジュールをいくつかインストールする必要があります。
yarn install --production
Composer を使用したインストール¶
phpMyAdmin は Composer tool を用いてインストールすることもでき、 4.7.0 からはデフォルトの Packagist リポジトリに自動的に反映されます。
注釈
Composer のリポジトリの内容は、リリースとは独立して自動的に生成されるため、必ずしもダウンロード版と 100% 同じとは限りません。しかし、機能的な違いはないでしょう。
phpMyAdmin をインストールするには、次のように実行するだけです。
composer create-project phpmyadmin/phpmyadmin
他にもリリース版を含む独自の Composer リポジトリを使用することもできます。 <https://www.phpmyadmin.net/packages.json> から利用することができます。
composer create-project phpmyadmin/phpmyadmin --repository-url=https://www.phpmyadmin.net/packages.json --no-dev
Docker を使用したインストール¶
phpMyAdmin には簡単に配布することができる Docker official image が付属しており、次のようにダウンロードすることができます。
docker pull phpmyadmin
phpMyAdmin サーバはポート80を待ち受けします。データベースサーバへのリンクを設定する方法は複数あり、データベースコンテナを phpMyAdmin の `` db`` にリンクするDockerのリンク機能を使用したり (--link your_db_host:db
を指定)、環境変数で指定したりします (この場合、 phpMyAdmin コンテナがネットワーク経由でデータベースコンテナにアクセスできるように Docker でネットワークを設定する必要があります)。
Docker の環境変数¶
以下の環境変数を使用して phpMyAdmin のいくつかの機能を設定することができます。
-
PMA_ARBITRARY
¶ ログインフォームでデータベースサーバのホスト名を入力できるようにします。
-
PMA_HOST
¶ 使用するデータベースサーバのホスト名と IP アドレスです。
-
PMA_VERBOSE
¶ このデータベースサーバの詳細な名前です。
-
PMA_VERBOSES
¶ カンマ区切りのデータベースサーバの詳細な名前です。
注釈
PMA_VERBOSE
が空の場合のみ使用されます。
-
PMA_USER
¶ config 認証モード で使用するユーザ名です。
-
PMA_PASSWORD
¶ config 認証モード で使用するパスワードです。
-
PMA_PORT
¶ 使用するデータベースサーバのポート番号です。
-
PMA_ABSOLUTE_URI
¶ phpMyAdmin を利用できるようにするリバースプロキシの完全修飾パス (
https://pma.example.net/
) です。
-
HIDE_PHP_VERSION
¶ 定義すると、 PHP のバージョンを非表示にします (expose_php = Off)。任意の値を設定してください (HIDE_PHP_VERSION=true など)。
-
UPLOAD_LIMIT
¶ 設定されている場合、このオプションは apache および php-fpm のデフォルト値を上書きします (これにより、
upload_max_filesize
およびpost_max_size
の値が変更されます)。注釈
[0-9+](K,M,G) という書式で、デフォルト値は`2048K` です
-
PMA_CONFIG_BASE64
¶ 設定されている場合、このオプションは変数を base64 デコードした内容でデフォルトの config.inc.php を上書きします。
-
PMA_USER_CONFIG_BASE64
¶ 設定されている場合、このオプションは変数を base64 デコードした内容でデフォルトの config.user.inc.php を上書きします。
デフォルトでは クッキー認証モード が使用されますが、 PMA_USER
と PMA_PASSWORD
が設定された場合 config 認証モード に切り替わります。
注釈
ログインに必要な資格情報は MySQL サーバに保存されます。 Docker イメージの場合、さまざまな方法で設定できます (たとえば、 MySQL コンテナの起動時は MYSQL_ROOT_PASSWORD
)。 MariaDB コンテナ <https://hub.docker.com/_/mariadb> _または MySQL コンテナ <https://hub.docker.com/_/mysql> _のドキュメントを確認してください。
構成のカスタマイズ¶
さらに、構成は /etc/phpmyadmin/config.user.inc.php
によって調整できます。このファイルが存在する場合は、上記の環境変数から構成が生成された後に読み込まれるため、任意の構成変数を上書きできます。この構成は、 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php 引数を使用して docker を呼び出すときにボリュームとして追加できます。
なお、提供された構成ファイルは Docker の環境変数 の後で適用されますが、任意の値を上書きできます。
例えば、 CSV エクスポートのデフォルトの動作を変更する場合は、以下の構成ファイルを使用してください。
<?php
$cfg['Export']['csv_columns'] = true;
Docker の環境変数 に書かれている環境変数を使用する代わりに、サーバ構成を定義することで利用することもできます。
<?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',
],
];
参考
構成オプションの詳細な説明は 構成 を参照してください。
Docker ボリューム¶
以下のボリュームを使用して、イメージの動作をカスタマイズすることができます。
/etc/phpmyadmin/config.user.inc.php
追加の設定に使用することができます。詳しくは前の節を参照してください。
/sessions/
セッションが保存されるディレクトリです。例えば サインオン認証モード を使用するときに共有したくなるかもしれません。
/www/themes/
phpMyAdmin がテーマを検索するディレクトリです。デフォルトでは、 phpMyAdmin に付属しているものだけが含まれていますが、 Docker ボリュームを利用して、追加の phpMyAdmin テーマ (カスタムテーマ を参照) を入れることができます。
Docker の例¶
phpMyAdmin を指定されたサーバに接続させるには、以下を使用してください。
docker run --name myadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin/phpmyadmin
phpMyAdmin を他のサーバにも接続させるには、以下を使用してください。
docker run --name myadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin/phpmyadmin
任意のサーバーオプションを使用する場合です。
docker run --name myadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin/phpmyadmin
Docker を用いてデータベースコンテナをリンクすることもできます。
docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin/phpmyadmin
追加の構成で実行する方法です。
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/phpmyadmin
追加のテーマで実行します。
docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /custom/phpmyadmin/theme/:/www/themes/theme/ phpmyadmin/phpmyadmin
docker-compose の使用¶
または、 <https://github.com/phpmyadmin/docker> の docker-compose.yml で docker-compose を使用することもできます。これにより、 phpMyAdmin を任意のサーバで実行できます。ログインページで MySQL/MariaDB サーバを指定できます。
docker-compose up -d
docker-compose を使用した構成ファイルのカスタマイズ¶
外部ファイルを使用して phpMyAdmin の構成をカスタマイズし、 volumes 設定項目を使用して渡すことができます。
phpmyadmin:
image: phpmyadmin/phpmyadmin
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/
参考
サブディレクトリの haproxy の背後で実行¶
サブディレクトリの Docker コンテナで実行されている phpMyAdmin を公開する場合は、リクエストを中継するサーバのリクエストパスを書き換える必要があります。
たとえば、 haproxy を使用すると、次のように実行できます。
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 を使用する場合、次のようなものが機能するはずです。
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:/"
次に、 docker-compose 構成で PMA_ABSOLUTE_URI
を指定してください。
version: '2'
services:
phpmyadmin:
restart: always
image: phpmyadmin/phpmyadmin
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 クラウド¶
ユーザーの1人が、 phpMyAdmin を IBM Cloud プラットフォーム<https://github.com/KissConsult/phpmyadmin_tutorial#readme> _ にインストールするための役立つガイドを作成しました。
クイックインストール¶
- phpmyadmin.net のダウンロードページから、適切な配布キットを選択してください。キットによって英語のメッセージのみが含まれていたり、すべての言語が含まれていたりします。以後、 phpMyAdmin-x.x.x -all-languages.tar.gz` のような名前のキットを選んだと仮定して説明します。
- 正しいアーカイブをダウンロードしたことを確認してください。 phpMyAdmin リリースの検証 を参照してください。
- tar または zip の配布ファイルを展開します (unzip の場合はサブディレクトリ付きで)。ウェブサーバのドキュメントルートで
tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz
を実行します。ドキュメントルートへの直接アクセス権がない場合は、ローカルマシンのディレクトリにファイルを解凍し、ステップ 4 まで済んだらそのディレクトリを FTP などでウェブサーバに転送してください。 - 必ずすべてのスクリプトの所有者を適切に設定してください (PHP をセーフモードで実行している場合、スクリプトによって所有者が異なると問題が発生します)。解説については 4.2 phpMyAdmin を悪意のあるアクセスから守るようにするお勧めの方法はありますか? や 1.26 phpMyAdmin を IIS のドキュメントルートにインストールしたところなのですが、phpMyAdmin を実行しようとすると「No input file specified(入力ファイルが指定されていません)」というエラーが出ます。 を参照してください。
- まず最初に、インストールを設定する必要があります。やり方は 2 つあります。1 つは、ユーザが
config.inc.php
を手動で編集・コピーする伝統的な方法ですが、グラフィカルなインストールを好む人向けにウィザード形式のセットアップスクリプトも提供するようになりました。現在でもconfig.inc.php
を作成する方がすばやく始められる方法であり、一部の高度な機能にはこちらが必要です。
手動でのファイルの作成¶
手動でファイルを作成するには、単純にテキストエディタを使用して config.inc.php
ファイルを phpMyAdmin のメイン (トップレベル) ディレクトリ (index.php
があるところ) に作成します (その際、 config.sample.inc.php
をコピーすることで最小限の構成ファイルを作成することもできます)。最初に phpMyAdmin は libraries/config.default.php
を読み込み、それから config.inc.php
内で見つかった値でデフォルト値を上書きします。設定に問題がなければ、デフォルト値は config.inc.php
に含める必要はありません。稼動させるにはいくつかの設定項目が必要ですが、単純な構成では以下にようになります。
<?php
// use here a value of your choice at least 32 chars long
$cfg['blowfish_secret'] = '1{dd0`<Q),5XP_:R9UK%%8\"EEcyH#{o';
$i=0;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
// if you insist on "root" having no password:
// $cfg['Servers'][$i]['AllowNoPassword'] = true;
あるいは、ログインするたびにプロンプトを表示させたくないのであれば以下のようにします。
<?php
$i=0;
$i++;
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'changeme'; // use here your password
$cfg['Servers'][$i]['auth_type'] = 'config';
警告
構成にパスワードを保存すると、誰でもデータベースを操作できるようになるため安全ではありません。
使用可能な構成値の詳細な解説については、このドキュメントの 構成 を参照してください。
セットアップスクリプトの使用¶
config.inc.php
を手動で編集する代わりに、 phpMyAdmin のセットアップ機能を使用することができます。セットアップを使用してファイルを生成し、サーバにアップロードするためにダウンロードすることができます。
次にブラウザを開き、 phpMyAdmin をインストールした場所の最後に / setup
を付けてアクセスします。変更はサーバに保存されません。 ダウンロード ボタンを使用して変更をコンピュータに保存してから、サーバにアップロードする必要があります。
これで、ファイルを使用する準備ができました。セットアップスクリプトが提供していない一部の高度なオプションを設定したい場合は、好きなエディタでファイルを確認したり編集したりすることを選択できます。
auth_type
に ”config" を使用した場合は、phpMyAdmin をインストールしたディレクトリを保護することをお勧めします。なぜなら、config 認証を使用した場合、インストールされた phpMyAdmin にアクセスするのに、ユーザがパスワードの入力を必要としないからです。 a .htaccess ファイルで HTTP 認証を設定したり、auth_type
を cookie または http で使用するなど、その他の認証方法の使うことをお勧めします。詳細については :ref:`faqmultiuser`_、特に 4.4 phpMyAdmin always gives "Access denied" when using HTTP authentication. を参照してください。- ブラウザで phpMyAdmin のメインディレクトリを開きます。 HTTP 認証やクッキー認証モードを使用している場合、 phpMyAdmin はようこそ画面とデータベース、またはログインダイアログが表示されるようになりました。
Debian、Ubuntu とその派生製品のセットアップスクリプト¶
Debian と Ubuntu では、セットアップスクリプトを有効にしたり無効にしたりする方法が変更されました。これにより、それぞれのために単一のコマンドを実行する必要があります。
構成を編集できるようにするには、次のように呼び出してください。
/usr/sbin/pma-configure
構成の編集を阻止するには、次のように呼び出してください。
/usr/sbin/pma-secure
openSUSE のセットアップスクリプト¶
一部の openSUSE のリリースでは、パッケージにセットアップスクリプトが含まれていません。そのような環境の場合は、 <https://www.phpmyadmin.net/> から元のパッケージをダウンロードしたり、デモサーバ <https://demo.phpmyadmin.net/master/setup/> のセットアップスクリプトを使用したりすることで、構成を作成したいすることができます。
phpMyAdmin リリースの検証¶
2015年7月以降、すべての phpMyAdmin のリリースはリリース開発者によって暗号で署名されており、2016年1月までは MarcDelisle でした。彼のキーIDは 0xFEFC65D181AF644A であり、彼の PGP フィンガープリントは次のとおりです。
436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A
また、他の識別情報は <https://keybase.io/lem9> から入手できます。
2016年1月から、リリース管理者は Isaac Bennetch です。彼のキー ID は 0xCE752F178259BD92 であり、 PGP フィンガープリントは次の通りです。
3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92
また、他の識別情報は <https://keybase.io/ibennetch> から入手できます。
その他のいくつかのダウンロード (例えばテーマ) は、 Michal Čihař が署名していることがあります。彼のキー ID は 0x9C27B31342B7511D で、 PGP フィンガープリントは次の通りです。
63CB 1DF1 EF12 CF2A C0EE 5A32 9C27 B313 42B7 511D
また、他の識別情報は <https://keybase.io/nijel> から入手できます。
署名がダウンロードしたアーカイブと一致することを確認してください。この方法で、リリースされたものと同じコードを使用していることを確認できます。また、署名の日付を確認して、最新バージョンをダウンロードしたことを確認してください。
各アーカイブには、その PGP 署名を含む .asc
ファイルが付属しています。両方を同じフォルダに入れれば、署名を検証することができます。
$ 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
ご覧のとおり、 gpg は公開鍵を知らないと報告します。この時点で、次のいずれかの手順を実行する必要があります。
- ダウンロードサーバ からキーリングをダウンロードし、次のようにしてインポートしてください。
$ gpg --import phpmyadmin.keyring
- 鍵サーバのうちの 1 つから鍵をダウンロードしてインポートしてください。
$ 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)
これにより、状況が少し改善されます。この時点で、指定された鍵の署名が正しいことを確認できますが、鍵で使用されている名前を信頼することはできません。
$ 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
ここでの問題は、誰でもこの名前の鍵を発行できることです。実際に言及された人が鍵を所有していることを確認する必要があります。 GNU プライバシーハンドブックは、 Validating other keys on your public keyring の章でこのトピックを扱っています。最も信頼できる方法は、開発者に直接会ってキーフィンガープリントを交換することですが、信頼できるウェブに頼ることもできます。このようにして、開発者に直接会った他の人の署名を介して、キーを推移的に信頼することができます。
キーが信頼されると、警告は発生しません。
$ 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]
署名が無効な場合 (アーカイブが変更されている場合)、鍵が信頼されているかどうかに関係なく、明確なエラーが発生します。
$ 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 環境保管領域¶
バージョン 3.4.0 で変更: phpMyAdmin 3.4.0 より前は、これは Linked Tables Infrastructure と呼ばれていましたが、ストレージのスコープが拡張されたため、名前が変更されました。
一連の追加機能 (ブックマーク、コメント、 SQL 履歴、コマンド追跡機能、 PDF 生成、カラム内容の変換等) を使うには専用のテーブル群を作成する必要があります。これらのテーブル群はお使いのデータベースに格納することもできますし、マルチユーザのインストールの場合はセントラルデータベースに格納することもできます (このセントラルデータベースは制御ユーザがアクセスするものです。ほかのユーザに権限を持たせないでください)。
ゼロ構成¶
多くの場合、このデータベース構造は自動的に作成および構成されます。これは「ゼロ構成」モードと呼ばれ、共有ホスティングの場合に特に役立ちます。 "Zeroconf" モードはデフォルトでオンになっており、無効にするには $cfg['ZeroConf']
を false に設定してください。
ゼロ構成モードは、以下の3種類のシナリオに対応しています。
- 構成ストレージテーブルが存在しないデータベースに入ると、 phpMyAdmin は操作タブから作成することを提案します。
- テーブルがすでに存在するデータベースに入ると、ソフトウェアはこれを自動的に検出して使用を開始します。これは最も一般的な状況です。テーブルが最初に自動的に作成された後、ユーザーの邪魔をすることなく継続的に使用されます。これは、共有ホスティングでユーザが
config.inc.php
を編集できず、通常、ユーザが1つのデータベースにしかアクセスしない場面で最も有用です。 - 複数のデータベースにアクセスする場合、ユーザが最初に構成ストレージテーブルを含むデータベースに入り、次に別のデータベースに切り替えると、 phpMyAdmin は最初のデータベースのテーブルを引き続き使用します。ユーザは、新しいデータベースにさらにテーブルを作成するよう求められることはありません。
手動構成¶
./sql/
ディレクトリを確認してください。 create_tables.sql というファイルがあるはずです (Windows サーバを使用している場合は、 1.23 MySQL を Win32 マシンで稼動させているのですが、新規テーブルを作成するたびにテーブル名とカラム名が小文字に変わってしまいます! を注意深く読んでください)。
すでにこのアプリを使用している場合は、追加で次のことを実行してください。
- MySQL 4.1.2 以降にアップグレードする場合は、
sql/upgrade_tables_mysql_4_1_2+.sql
を使用してください。 - phpMyAdmin 2.5.0 以降 (4.2.x 以前) から 4.3.0 以降にアップグレードした場合は、
sql/upgrade_column_info_4_3_0+.sql
を使用してください。 - phpMyAdmin 4.3.0 以降から 4.7.0 以降にアップグレードした場合は、
sql/upgrade_tables_4_7_0+.sql
を使用してください。
それから sql/create_tables.sql
をインポートして新しいテーブルを作成してください。
phpMyAdmin を使ってテーブル群を作成することもできますが、いくつか注意することがあります。データベースやテーブルを作成する際には特別な(管理者の)特権が必要になるかもしれません。また、データベース名によってはスクリプトに多少の修正を加える必要があるかもしれません。
sql/create_tables.sql
ファイルをインポートしたら、 config.inc.php
ファイルでテーブル名を指定してください。このとき使う設定項目の説明は 構成 にあります。
これらのテーブルに対して正しい権限を持った制御ユーザ ($cfg['Servers'][$i]['controluser']
および $cfg['Servers'][$i]['controlpass']
設定) が必要です。例えば、次の文を使用して作成することができます。
任意のバージョンの MariaDB の場合:
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 以降の場合:
CREATE USER 'pma'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';
MySQL 8.0 以前の場合:
CREATE USER 'pma'@'localhost' IDENTIFIED WITH mysql_native_password AS 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';
なお、 PHP 7.4 より前と MySQL 8.0 より後の MySQL インストールでは、回避のために mysql_native_password 認証を使用する必要があるかもしれません。詳しくは 1.45 ログインしようとすると、 caching_sha2_password が不明な認証方法であることに関するエラーメッセージが表示されます を参照してください。
旧版からのアップグレード¶
警告
既にインストールされた phpMyAdmin の上に新しいバージョンを展開することは**絶対にしないでください**。常に最初に古いファイルを削除し、構成のみを保持してください。
このようにして、セキュリティに深刻な影響を及ぼしたり、さまざまな破損を引き起こしたりする可能性がある古いファイルをディレクトリに残さないようにします。
以前インストールされたものから config.inc.php
を新しく展開した先にコピーするだけです。古いバージョンにあった構成ファイルは、一部のオプションを変更したり削除したりする若干の調整が必要な場合があります。構成ファイルの末尾付近に set_magic_quotes_runtime(0);
文が見つかった場合は、 PHP 5.3 以降との互換性のために削除してください。
デフォルトの構成ファイルはバージョンに依存するので、 libraries/config.default.php
を config.inc.php
に上書き**しない**でください。
完全なアップグレードはいくつかの単純な手順で行うことができます。
- 最新版の phpMyAdmin を <https://www.phpmyadmin.net/downloads/> からダウンロードしてください。
- 既存の phpMyAdmin のフォルダの名前を変更します (例えば
phpmyadmin-old
などへ)。 - 新しくダウンロードした phpMyAdmin を必要な場所 (例えば
phpmyadmin
) に展開してください。 config.inc.php`
を古い場所 (phpmyadmin-old
) から新しい場所 (phpmyadmin
) へコピーします。- すべてが正しく動作することをテストします。
- 以前のバージョンのバックアップ (
phpmyadmin-old
) を削除します。
MySQL サーバをバージョン 4.1.2 以前から 5.x 以降へアップグレードして、かつ、 phpMyAdmin 環境保管領域を使用している場合、 sql/upgrade_tables_mysql_4_1_2+.sql
にある SQL スクリプトを実行する必要があります。
phpMyAdmin 2.5.0 以降 (4.2.x 以前) を 4.3.0 以降にアップグレードした場合で、 phpMyAdmin 環境保管領域を使用している場合は、 sql/upgrade_column_info_4_3_0+.sql
にある SQL スクリプトを実行してください。
ブラウザのキャッシュをクリアすることと、ログアウトして古いセッションを空にし、ログインし直すことを忘れないでください。
認証モードの使い方¶
HTTP 認証モードとクッキー認証モードは、ユーザに自分のデータベースへのアクセスを許可し、他のデータベースにアクセスしてほしくない**マルチユーザー環境**にお勧めです。それでも、 MS Internet Explorer の少なくともバージョン 6 までは、クッキーについて実にバグが多いことに注意してください。**シングルユーザー環境**でも、ユーザ名とパスワードの組が構成ファイルで明らかにならないので、 HTTP 認証モードやクッキー認証モードを使用することをお勧めします。
HTTP 認証モードやクッキー認証モードの方がより安全です。 MySQL のログイン情報を phpMyAdmin の設定ファイルに書く必要がないからです ($cfg['Servers'][$i]['controluser'])。しかし、 HTTPS プロトコルを使用しない限り、パスワードはプレーンテキストで送信されることに気を付けてください。クッキーモードでは、パスワードは一時的なクッキーに AES アルゴリズムで暗号化した上で保存されます。
それから、それぞれの 本当の のユーザには、特定のデータベースのセットに対する一連の権限を与えなければなりません。通常、権限の影響を理解しているユーザでない限り(例えばスーパーユーザを作成している場合など)、通常のユーザにグローバル権限を与えるべきではありません。例えば、 real_user にデータベース user_base 上のすべての権限を付与するには、以下のようにしてください。
GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost IDENTIFIED BY 'real_password';
ユーザが実行できることは、完全に MySQL のユーザー管理システムによって制御されます。 HTTP またはクッキー認証モードでは、 $cfg['Servers']
のユーザー/パスワードフィールドに記入する必要はありません。
参考
1.32 IIS で HTTP 認証を利用できますか?、 1.35 Apache の CGI で HTTP 認証が使用できますか?、 4.1 当方は ISP です。 phpMyAdmin のセントラルコピーを一つだけセットアップするようにできますか?それとも顧客ごとにインストールする必要がありますか?、 4.2 phpMyAdmin を悪意のあるアクセスから守るようにするお勧めの方法はありますか?、 4.3 /lang や /libraries の中のファイルをインクルードできないというエラーが出ます。
HTTP 認証モード¶
HTTP の Basic 認証を使用して、有効な MySQL ユーザとしてログインできるようになります。
ほとんどの PHP 構成が対応しています。 CGI PHP を使用した IIS (ISAPI) の対応については、 1.32 IIS で HTTP 認証を利用できますか?1.32 IIS で HTTP 認証を利用できますか? を参照し、 Apache CGI の場合は 1.35 Apache の CGI で HTTP 認証が使用できますか? を参照してください。
PHP が Apache の mod_proxy_fcgi の下で (例えば PHP-FPM で) 実行されている場合、
Authorization
ヘッダが配下の FCGI アプリケーションに渡されず、 FCGI アプリケーションに渡されないため、資格情報がアプリケーションに到達しません。この場合、次の設定項目を追加できます。SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
'HTTP' 認証モードで .htaccess メカニズムを使用しない方法については、 4.4 phpMyAdmin always gives "Access denied" when using HTTP authentication. も参照してください。
注釈
HTTP 認証で適切なログアウトを行う方法はありません。ほとんどのブラウザでは、他の認証が成功しない限り、資格情報を保持します。このため、この方法ではログアウト後に同じユーザーでログインできないという制限があります。
クッキー認証モード¶
- ユーザ名とパスワードはセッション中はクッキーに保存され、パスワードは終了時に削除されます。
- このモードでは、ユーザは phpMyAdmin のログアウトが確実に行え、同じユーザ名でログインし直すことができます (これは HTTP 認証モード ではできません)。
- 接続先に (
config.inc.php
で設定したサーバのみでなく) ユーザが任意のホスト名を入力できるようにしたいのであれば、$cfg['AllowArbitraryServer']
の設定項目を参照してください。 - 要件 の章にある通り、
openssl
拡張機能を利用するとアクセスが顕著に高速化されますが、必須ではありません。
サインオン認証モード¶
- このモードは、別のアプリケーションからの資格情報を使用して phpMyAdmin に認証を行い、シングルサインオンのソリューションを実装するのに便利な方法です。
- 別なアプリケーションがセッションデータにログイン情報を格納するか (
$cfg['Servers'][$i]['SignonSession']
および$cfg['Servers'][$i]['SignonCookieParams']
を参照)、こちらで資格情報を返すスクリプトを実装する必要があります ($cfg['Servers'][$i]['SignonScript']
を参照)。 - 資格情報が利用できない場合は、ユーザがログインプロセスを行う
$cfg['Servers'][$i]['SignonURL']
にリダイレクトされます。
資格情報をセッションに保存するとても基本的な例が examples/signon.php
にあります。
<?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 */
$secure_cookie = false;
/* Need to have cookie visible from parent directory */
session_set_cookie_params(0, '/', '', $secure_cookie, true);
/* Create signon session */
$session_name = 'SignonSession';
session_name($session_name);
// 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(rand()), 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"><br>
Password: <input type="password" name="password" autocomplete="current-password"><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>';
}
または、 examples/openid.php
にあるように、この方法を使用して OpenID と統合することもできます。
<?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 */
$secure_cookie = false;
/**
* Map of authenticated users to MySQL user/password pairs.
*/
$AUTH_MAP = [
'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
*
* @return void
*/
function Show_page($contents)
{
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
*
* @return void
*/
function Die_error($e)
{
$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, '/', '', $secure_cookie, true);
/* Create signon session */
$session_name = 'SignonSession';
session_name($session_name);
@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 */
if (isset($_POST['identifier']) && is_string($_POST['identifier'])) {
$identifier = $_POST['identifier'];
} elseif (isset($_SESSION['identifier']) && is_string($_SESSION['identifier'])) {
$identifier = $_SESSION['identifier'];
} else {
$identifier = null;
}
/* 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 {
// I hate php sometimes
$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($AUTH_MAP[$id])) {
Show_page('<p>User not allowed!</p>');
exit;
}
$_SESSION['PMA_single_signon_user'] = $AUTH_MAP[$id]['user'];
$_SESSION['PMA_single_signon_password'] = $AUTH_MAP[$id]['password'];
$_SESSION['PMA_single_signon_HMAC_secret'] = hash('sha1', uniqid(strval(rand()), true));
session_write_close();
/* Redirect to phpMyAdmin (should use absolute URL here!) */
header('Location: ../index.php');
If you intend to pass the credentials using some other means than, you have to
implement wrapper in PHP to get that data and set it to
$cfg['Servers'][$i]['SignonScript']
. There is a very minimal example
in examples/signon-script.php
:
<?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
*/
function get_login_credentials($user)
{
/* Optionally we can use passed username */
if (! empty($user)) {
return [
$user,
'password',
];
}
/* Here we would retrieve the credentials */
return [
'root',
'',
];
}
config 認証モード¶
- このモードはあまり安全ではありません。設定項目の
$cfg['Servers'][$i]['user']
と$cfg['Servers'][$i]['password']
を記入する必要があるからです (そのため、config.inc.php
を読める人なら誰でもユーザ名とパスワードを見ることができてしまいます)。 - ISP やマルチユーザのインストール 節の中で、構成ファイルを保護する方法を説明している項目があります。
- このモードのセキュリティを向上させるには、
$cfg['Servers'][$i]['AllowDeny']['order']
と$cfg['Servers'][$i]['AllowDeny']['rules']
の設定項目でホスト認証することを検討してみてください。 - クッキー認証や HTTP 認証とは異なり、最初に phpMyAdmin サイトを読み込んだときに、ユーザがログインする必要がありません。これは仕様によるものですが、インストール先へのアクセスをどのユーザにも許可しているということです。いくつかの制約をかけることを推奨します。 .htaccess ファイルで HTTP 認証を設定したり、ルータやファイアウォールで入ってくる HTTP リクエストを拒否したりすればおそらく十分でしょう (どちらもこのマニュアルの範疇を超えていますが、Google で容易に検索できます)。
phpMyAdmin のインストールを安全にする¶
phpMyAdmin チームは、アプリケーションを安全にするために一生懸命努力していますが、インストールをより安全にする方法は常にあります。
Follow our Security announcements and upgrade phpMyAdmin whenever new vulnerability is published.
Serve phpMyAdmin on HTTPS only. Preferably, you should use HSTS as well, so that you're protected from protocol downgrade attacks.
Ensure your PHP setup follows recommendations for production sites, for example display_errors should be disabled.
Remove the
test
directory from phpMyAdmin, unless you are developing and need a test suite.Remove the
setup
directory from phpMyAdmin, you will probably not use it after the initial setup.Properly choose an authentication method - クッキー認証モード is probably the best choice for shared hosting.
Deny access to auxiliary files in
./libraries/
or./templates/
subfolders in your webserver configuration. Such configuration prevents from possible path exposure and cross side scripting vulnerabilities that might happen to be found in that code. For the Apache webserver, this is often accomplished with a .htaccess file in those directories.Deny access to temporary files, see
$cfg['TempDir']
(if that is placed inside your web root, see also ウェブサーバのアップロード/保存/インポートディレクトリ.It is generally a good idea to protect a public phpMyAdmin installation against access by robots as they usually can not do anything good there. You can do this using
robots.txt
file in the root of your webserver or limit access by web server configuration, see 1.42 ロボットから phpMyAdmin へのアクセスを防ぐにはどうすればいいのでしょうか?.In case you don't want all MySQL users to be able to access phpMyAdmin, you can use
$cfg['Servers'][$i]['AllowDeny']['rules']
to limit them or$cfg['Servers'][$i]['AllowRoot']
to deny root user access.Enable 二要素認証 for your account.
Consider hiding phpMyAdmin behind an authentication proxy, so that users need to authenticate prior to providing MySQL credentials to phpMyAdmin. You can achieve this by configuring your web server to request HTTP authentication. For example in Apache this can be done with:
AuthType Basic AuthName "Restricted Access" AuthUserFile /usr/share/phpmyadmin/passwd Require valid-user
Once you have changed the configuration, you need to create a list of users which can authenticate. This can be done using the htpasswd utility:
htpasswd -c /usr/share/phpmyadmin/passwd username
If you are afraid of automated attacks, enabling Captcha by
$cfg['CaptchaLoginPublicKey']
and$cfg['CaptchaLoginPrivateKey']
might be an option.Failed login attemps are logged to syslog (if available, see
$cfg['AuthLog']
). This can allow using a tool such as fail2ban to block brute-force attempts. Note that the log file used by syslog is not the same as the Apache error or access log files.In case you're running phpMyAdmin together with other PHP applications, it is generally advised to use separate session storage for phpMyAdmin to avoid possible session-based attacks against it. You can use
$cfg['SessionSavePath']
to achieve this.
データベースサーバへの接続において SSL を使用します¶
It is recommended to use SSL when connecting to remote database server. There are several configuration options involved in the SSL setup:
$cfg['Servers'][$i]['ssl']
- Defines whether to use SSL at all. If you enable only this, the connection will be encrypted, but there is not authentication of the connection - you can not verify that you are talking to the right server.
$cfg['Servers'][$i]['ssl_key']
と$cfg['Servers'][$i]['ssl_cert']
- これはクライアントからサーバの認証に使用されます。
$cfg['Servers'][$i]['ssl_ca']
と$cfg['Servers'][$i]['ssl_ca_path']
- The certificate authorities you trust for server certificates. This is used to ensure that you are talking to a trusted server.
$cfg['Servers'][$i]['ssl_verify']
- This configuration disables server certificate verification. Use with caution.
既知の問題¶
カラム固有の特権を持ったユーザが「表示」を利用できない¶
ユーザーがテーブルの一部の (すべてではない) カラムに特有の特権しか持っていない場合、「表示」は失敗してエラーメッセージを表示します。
回避策として、テーブルと同じ名前のブックマーククエリを作成することができ、そうすれば「表示」リンクを使用したときに代わりに実行されます。 課題 11922。
Trouble logging back in after logging out using 'http' authentication¶
When using the 'http' auth_type
, it can be impossible to log back in (when the logout comes
manually or after a period of inactivity). Issue 11898.