インストール

phpMyAdmin は MySQL データベースサーバに特別なセキュリティをほどこすものではありません。phpMyAdmin を使ったとしても、MySQL データベースに適切なパーミッションを付与するのはやはりシステム管理者の仕事です。ただし、その目的で phpMyAdmin の 特権 ページを使うことはできます。

Linux ディストリビューション

phpMyAdmin は多くの Linux ディストリビューションに含まれています。できればディストリビューションのパッケージを使用することをお勧めします。そちらはふつう、ディストリビューションとの統合が提供され、ディストリビューションからのセキュリティ更新を自動的に受けることができるからです。

Debian と Ubuntu

Debian と Ubuntu のほとんどのバージョンは phpMyAdmin パッケージを含んでいますが、構成ファイルは /etc/phpmyadmin の中で管理されており、公式の phpMyAdmin のドキュメントといくつかの点で異なることがあります。特に、以下のような点です。

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 からインストールするためには、いくつかのサポートアプリケーションが必要になります。

  • Git でソースをダウンロードします。または最新のソースを Github から直接ダウンロードすることができます
  • Composer
  • Node.js (バージョン 10 以降)
  • Yarn

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_HOSTS

カンマ区切りの使用するデータベースサーバのホスト名と IP アドレスです。

注釈

PMA_HOST が空の場合のみ使用されます。

PMA_VERBOSE

このデータベースサーバの詳細な名前です。

PMA_VERBOSES

カンマ区切りのデータベースサーバの詳細な名前です。

注釈

PMA_VERBOSE が空の場合のみ使用されます。

PMA_USER

config 認証モード で使用するユーザ名です。

PMA_PASSWORD

config 認証モード で使用するパスワードです。

PMA_PORT

使用するデータベースサーバのポート番号です。

PMA_PORTS

カンマ区切りで使用するデータベースサーバのポート番号です。

注釈

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_USERPMA_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> _ にインストールするための役立つガイドを作成しました。

クイックインストール

  1. phpmyadmin.net のダウンロードページから、適切な配布キットを選択してください。キットによって英語のメッセージのみが含まれていたり、すべての言語が含まれていたりします。以後、 phpMyAdmin-x.x.x -all-languages.tar.gz` のような名前のキットを選んだと仮定して説明します。
  2. 正しいアーカイブをダウンロードしたことを確認してください。 phpMyAdmin リリースの検証 を参照してください。
  3. tar または zip の配布ファイルを展開します (unzip の場合はサブディレクトリ付きで)。ウェブサーバのドキュメントルートで tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz を実行します。ドキュメントルートへの直接アクセス権がない場合は、ローカルマシンのディレクトリにファイルを解凍し、ステップ 4 まで済んだらそのディレクトリを FTP などでウェブサーバに転送してください。
  4. 必ずすべてのスクリプトの所有者を適切に設定してください (PHP をセーフモードで実行している場合、スクリプトによって所有者が異なると問題が発生します)。解説については 4.2 phpMyAdmin を悪意のあるアクセスから守るようにするお勧めの方法はありますか?1.26 phpMyAdmin を IIS のドキュメントルートにインストールしたところなのですが、phpMyAdmin を実行しようとすると「No input file specified(入力ファイルが指定されていません)」というエラーが出ます。 を参照してください。
  5. まず最初に、インストールを設定する必要があります。やり方は 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 を付けてアクセスします。変更はサーバに保存されません。 ダウンロード ボタンを使用して変更をコンピュータに保存してから、サーバにアップロードする必要があります。

これで、ファイルを使用する準備ができました。セットアップスクリプトが提供していない一部の高度なオプションを設定したい場合は、好きなエディタでファイルを確認したり編集したりすることを選択できます。

  1. 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. を参照してください。
  2. ブラウザで 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.phpconfig.inc.php に上書き**しない**でください。

完全なアップグレードはいくつかの単純な手順で行うことができます。

  1. 最新版の phpMyAdmin を <https://www.phpmyadmin.net/downloads/> からダウンロードしてください。
  2. 既存の phpMyAdmin のフォルダの名前を変更します (例えば phpmyadmin-old などへ)。
  3. 新しくダウンロードした phpMyAdmin を必要な場所 (例えば phpmyadmin) に展開してください。
  4. config.inc.php` を古い場所 (phpmyadmin-old) から新しい場所 (phpmyadmin) へコピーします。
  5. すべてが正しく動作することをテストします。
  6. 以前のバージョンのバックアップ (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'] のユーザー/パスワードフィールドに記入する必要はありません。

HTTP 認証モード

注釈

HTTP 認証で適切なログアウトを行う方法はありません。ほとんどのブラウザでは、他の認証が成功しない限り、資格情報を保持します。このため、この方法ではログアウト後に同じユーザーでログインできないという制限があります。

サインオン認証モード

資格情報をセッションに保存するとても基本的な例が 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.