安装

PHPMyAdmin不会向MySQL应用任何特殊的安全方法 数据库服务器。它仍然是系统管理员的工作 正确上的MySQL数据库的权限。 phpmyadmin 用户 页面可用于此。

Linux发行版

PHPMyAdmin包含在大多数Linux发行版中。建议使用 有可能的分销包 - 他们通常为您提供集成 分发,您将自动从您的分发中获取安全更新。

Debian和Ubuntu.

大多数Debian和Ubuntu版本包括PHPMyAdmin包,但要注意 the configuration file is maintained in /etc/phpmyadmin 和 may differ in 来自官方phpmyadmin文件的某种方式。具体来说,它确实如下:

有关安装Debian或Ubuntu包的更具体的详细信息 在我们的Wiki..

也可以看看

可以找到更多信息 Readme.debian. (it is installed as /usr/share/doc/phpmyadmin/README.Debian with the package).

opensuse.

opensuse已经配备了phpmyadmin包,只需安装packages the opensuse.构建服务.

Gentoo

Gentoo也在近股票配置中填补了PhpMyadmin包装 as in a webapp-config 配置。 Use emerge dev-db/phpmyadmin to install.

曼加拉夫

曼加拉夫 ships the phpMyAdmin package in their contrib branch and can be 通过通常的控制中心安装。

Fedora.

Fedora.填写PHPMyAdmin包,但请注意配置文件 is maintained in /etc/phpMyAdmin/ 并且可能以某种方式不同 官方phpmyadmin文件。

Red Hat Enterprise Linux

Red Hat Enterprise Linux本身,因此等衍生品等CentOS没有 船舶phpmyadmin,但是fedora驱动的存储库 Enterprise Linux的额外软件包(epel)如果是这样,如果是的话 启用. 但请注意,配置文件是维护的 /etc/phpMyAdmin/ 并且可能以某种方式不同 官方phpmyadmin文件。

在Windows上安装

在Windows上获取PHPMyAdmin的最简单方法是使用第三方产品 其中包含phpmyadmin与数据库和Web服务器一起如 XAMPP..

您可以找到更多此类选项 维基百科.

从git安装

要从Git安装,您需要一些支持应用程序:

您可以克隆当前phpmyadmin来源 //github.com/phpmyadmin/phpmyadmin.git:

git clone //github.com/phpmyadmin/phpmyadmin.git

此外,您需要安装依赖项 作曲家:

composer update

如果您不打算开发,您可以跳过开发人员工具的安装 by invoking:

composer update --no-dev

最后,你需要使用 安装一些JavaScript依赖项:

yarn install --production

使用Composer进行安装

您可以使用使用phpmyadmin 作曲家工具,自4.7.0自发布以来 自动镜像到默认值 包装商 repository.

笔记

自动生成编写器存储库的内容 与释放分开,所以内容不一定是 100%与您下载tarball时相同。应该没有 功能差异。

要安装phpmyadmin,只需运行:

composer create-project phpmyadmin/phpmyadmin

或者,您可以使用自己的作曲家存储库,其中包含 释放Tarballs并提供 <//www.phpmyadmin.net/packages.json>:

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

使用Docker安装

phpmyadmin附带一个 Docker官方形象,您可以轻松地部署。你可以 download it using:

docker pull phpmyadmin

PHPMyAdmin Server将收听端口80.它支持多种方式 将链接配置为数据库服务器,由Docker的链接功能配置 by linking your database container to db for phpMyAdmin (by specifying --link your_db_host:db)或环境变量(在这种情况下,它是 您可以在Docker中设置网络以允许PHPMyAdmin容器访问 网络上的数据库容器)。

Docker环境变量

您可以使用环境变量配置多个PHPMyAdmin功能:

PMA_ARBITRARY

允许您在登录表单上输入数据库服务器主机名。

PMA_HOST

要使用的数据库服务器的主机名或IP地址。

也可以看看

$cfg['Servers'][$i]['host']

PMA_HOSTS

逗号分隔的主机名或用于使用的数据库服务器的IP地址。

笔记

只使用if. PMA_HOST is empty.

PMA_VERBOSE

详细介绍数据库服务器的名称。

PMA_VERBOSES

逗号分隔的数据库服务器的详细名称。

笔记

只使用if. PMA_VERBOSE is empty.

PMA_USER

要用于用户名 配置身份验证模式.

PMA_PASSWORD

密码用于使用 配置身份验证模式.

PMA_PORT

要使用的数据库服务器的端口。

PMA_PORTS

要使用的数据库服务器的逗号分隔端口。

笔记

只使用if. PMA_PORT is empty.

PMA_ABSOLUTE_URI

The fully-qualified path (//pma.example.net/) where the reverse 代理使PHPMyAdmin可用。

也可以看看

$cfg['PmaAbsoluteUri']

HIDE_PHP_VERSION

如果已定义,此选项将隐藏PHP版本(expose_php =关闭)。 设置为任何值(例如 hide_php_version = true)。

UPLOAD_LIMIT

如果设置,则此选项将覆盖默认值 value for apache and php-fpm (this will change upload_max_filesizepost_max_size values).

笔记

格式为 [0-9 +](k,m,g) 默认值为 2048K

PMA_CONFIG_BASE64

如果设置,则此选项将覆盖默认值 config.inc.php. 使用Base64解码变量的内容。

PMA_USER_CONFIG_BASE64

如果设置,则此选项将覆盖默认值 config.user.inc.php. 使用Base64解码变量的内容。

默认, cookie身份验证模式 使用,但如果 PMA_USER and PMA_PASSWORD 设置,它切换到 配置身份验证模式.

笔记

登录的凭据存储在MySQL服务器中,以防万一 在Docker图像中,有各种方法来设置它(例如 MYSQL_ROOT_PASSWORD 启动MySQL容器时)。请检查 documentation for Mariadb容器或者 mysql容器.

自定义配置

Additionally configuration can be tweaked by /etc/phpmyadmin/config.user.inc.php. If 存在此文件,它将在从上面生成配置后加载 环境变量,因此您可以覆盖任何配置变量。这个 调用Docker使用时,可以将配置添加为卷 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php. parameters.

请注意,供应的配置文件是应用的 Docker环境变量, 但是您可以覆盖任何值。

例如要更改CSV导出的默认行为,您可以使用以下内容 configuration file:

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

您还可以使用它来定义服务器配置而不是使用 列出的环境变量 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/

存储PHP会话的目录。你可能想要分享这个 例如使用时 签名身份验证模式.

/www/themes/

phpmyadmin寻找主题的目录。默认情况下只有那些发货 使用phpmyadmin包含,但您可以包括其他phpmyadmin themes (see 自定义主题)使用Docker卷。

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撰写

或者,您还可以使用Docker撰写与Docker-Compose.yml <//github.com/phpmyadmin/docker>。这将使用phpmyadmin进行 任意服务器 - 允许您在登录页面上指定MySQL / MariaDB服务器。

docker-compose up -d

使用Docker-Compose自定义配置文件

您可以使用外部文件自定义PHPMyAdmin配置并通过它 使用Volumes指令:

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    环境:
     - 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时 子目录,您需要在代理的服务器中重写请求路径 requests.

例如,使用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:/"

然后应该指定 PMA_ABSOLUTE_URI 在Docker撰写 configuration:

version: '2'

services:
  phpmyadmin:
    restart: always
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    hostname: phpmyadmin
    domainname: example.com
    ports:
      - 8000:80
    环境:
      - 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云

我们的一个用户创建了一个有用的安装PhpMyAdmin指南 IBM云平台.

快速安装

  1. 从phpmyadmin.net中选择合适的分发套件 下载页面。一些套件仅包含英文消息,其他套件 包含所有语言。我们假设你选择了一个名字的套件 looks like phpMyAdmin-x.x.x -all-languages.tar.gz.
  2. 确保您已下载了正版档案,请参阅 验证phpmyadmin发布.
  3. Untar或解压缩分发(务必解压缩子目录): tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz in your Web服务器的文档根。如果您没有直接访问您的 文档根,将文件放在本地计算机上的目录中, 并且,在步骤4之后,使用Web服务器上的目录使用, for example, FTP.
  4. 确保所有脚本都有适当的所有者(如果PHP是 以安全模式运行,具有与所有者不同的脚本 其他脚本的所有者将是一个问题)。看 4.2制作PHPMYADMIN防止邪恶的访问的首选方法是什么? and 1.26我刚刚在我的文档根目录中安装了phpmyadmin,但在尝试运行phpmyadmin时,我会收到错误“未指定的输入文件”。 for suggestions.
  5. 现在,您必须配置安装。有两种方法 可以使用。传统上,用户手工编辑副本 config.inc.php.,但现在提供了一个向导样式设置脚本 对于喜欢图形安装​​的人。创造A. config.inc.php. 仍然是一个快速的入门方式,需要 一些高级功能。

手动创建文件

要手动创建文件,只需使用文本编辑器即可创建 file config.inc.php. (you can copy config.sample.inc.php to get 主要(顶级)phpmyadmin中的一个最小配置文件 directory (the one that contains 指数.php)。 phpMyAdmin first loads libraries/config.default.php 和 then overrides those values with anything found in config.inc.php.. If the default value is 好的,特定的环境,无需将其包含在内 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';

警告

在配置中存储密码是不安全的,因为任何人都可以 操纵您的数据库。

有关可能的配置值的完整说明,请参阅 配置 of this document.

使用设置脚本

Instead of manually editing config.inc.php., you can use phpMyAdmin’s 设置功能。可以使用设置生成文件,您可以下载它 要上传到服务器。

接下来,打开浏览器并访问您安装PHPMyAdmin的位置, with the /setup suffix. The changes are not saved to the server, you need to use the 下载 按钮将它们保存到您的计算机然后上传 to the server.

现在,该文件已准备好使用。您可以选择查看或编辑 文件与您最喜欢的编辑器,如果您愿意设置一些高级 安装脚本未提供的选项。

  1. If you are using the auth_type “config”, it is suggested that you 保护PHPMyAdmin安装目录,因为使用配置 不需要用户输入密码以访问PHPMyAdmin 安装。使用备用身份验证方法 推荐,例如使用http-auth .htaccess. 文件或切换到使用 auth_type cookie或http。看看 ISP,多用户安装 尤其是其他信息 4.4 PHPMyAdmin使用HTTP身份验证时始终提供“访问被拒绝”。.
  2. 在浏览器中打开main phpmyadmin目录。 PHPMyAdmin现在应该显示一个欢迎屏幕和数据库,或者 如果使用,请登录对话框 http. or cookie身份验证模式。

Debian,Ubuntu和衍生品的设置脚本

Debian和Ubuntu在某种程度上改变了设置脚本启用和禁用的方式 必须为其中任何一个执行单个命令。

要允许编辑配置调用:

/usr/sbin/pma-configure

要阻止编辑配置调用:

/usr/sbin/pma-secure

opensuse.上的设置脚本

某些opensuse版本不包括包中的安装脚本。如果你 想要在这些上生成配置,您可以下载原创 package from <//www.phpmyadmin.net/>或在我们的演示中使用设置脚本 server: <//demo.phpmyadmin.net/master/setup/>.

验证phpmyadmin发布

自2015年7月以来,所有PHPMYADMIN版本都被加密签署 释放开发商,2016年1月是Marc Delisle。他的关键身份证是 0xfefc65d181af644a,他的pgp指纹是:

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

您可以从中获取更多的身份证信息<//keybase.io/lem9>.

从2016年1月开始,发布经理是Isaac Bennetch。他的关键身份证是 0xCE752F178259BD92,他的PGP指纹是:

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

您可以从中获取更多的身份证信息<//keybase.io/ibennetch>.

一些额外的下载(例如主题)可能由MichalČihań签名。他的关键身份证是 0x9c27b31342b7511d,他的pgp指纹是:

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

您可以从中获取更多的身份证信息<//keybase.io/nijel>.

您应该验证签名是否与您下载的存档匹配。 这样,您可以确定您使用的是发布的相同代码。 您还应该验证签名日期,以确保您 下载了最新版本。

Each archive is accompanied by .asc files which contain the PGP signature 为了它。在同一文件夹中有两个它们,可以验证签名:

$ 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
  • 从其中一个关键服务器下载并导入密钥:
$ 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 <[email protected]>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

这将改善局势有点 - 此时,您可以验证 给定密钥的签名是正确的,但你仍然不能相信使用的名称 in the key:

$ 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 <[email protected]>"
gpg:                 aka "Isaac Bennetch <[email protected]>"
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隐私 手册涵盖了本章中的这一主题 在公众上验证其他键 keyring。最可靠的方法是亲自满足开发人员 但是,Exchange关键指纹,您也可以依靠信任的网络。这条路 您可以通过遇到的其他人的签名来相信关键 开发人员亲自。

密钥可信后,不会发生警告:

$ 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 <[email protected]>" [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 <[email protected]>" [unknown]

phpmyadmin配置存储

在3.4.0版中更改: phpmyadmin 3.4.0之前称为链接表基础架构,但 由于存储范围的扩展范围,该名称已更改。

对于一整套附加功能(书签, 注释, SQL.-历史, tracking mechanism, PDF.-一代, 转变, 关系 等)您需要创建一组特殊表。这些表可以位于 在您自己的数据库中,或者在中央数据库中进行多用户安装 (然后,控制器访问此数据库,因此没有其他用户 应该有权利)。

零配置

在许多情况下,可以自动创建此数据库结构 配置。这被称为“零配置”模式,可以特别是 适用于共享托管情况。默认情况下,“Zeroconf”模式是截止的 disable set $cfg['ZeroConf'] to false.

以下三种方案由零配置模式覆盖:

  • 进入数据库时​​,配置存储表不是 目前,PHPMYADMIN提供从“操作”选项卡创建它们。
  • 进入数据库时​​,该数据库已存在,软件 自动检测到此并开始使用它们。这是最常见的 情况;最初自动创建表后,它们是 不断使用而不会打扰用户;这也是最有用的 shared hosting where the user is not able to edit config.inc.php. and 通常,用户只能访问一个数据库。
  • 当用户访问多个数据库时,如果用户首先进入 包含配置存储表的数据库然后切换到 another database, phpmyadmin继续使用第一个数据库的表;用户是 没有提示在新数据库中创建更多表。

手动配置

Please look at your ./sql/ directory, where you should find a file called create_tables.sql.。 (如果您使用的是Windows Server, pay注意 1.23我在Win32机器上运行MySQL。每次我创建一个新表,表和列名称将更改为小写!)。

如果您已拥有此基础架构:

  • 升级到MySQL 4.1.2或更新,请使用 sql/upgrade_tables_mysql_4_1_2+.sql.
  • 升级到2.5.0或更新的PHPMYADMIN 4.3.0或更新(<= 4.2.x), please use sql/upgrade_column_info_4_3_0+.sql.
  • 从4.3.0或更新的升级到phpmyadmin 4.7.0或更新, please use sql/upgrade_tables_4_7_0+.sql.

和 then create new tables by importing sql/create_tables.sql.

您可以使用PHPMyAdmin为您创建表。请做 意识到您可能需要特殊(管理员)权限来创建 数据库和表格,脚本可能需要一些调整, 根据数据库名称。

After having imported the sql/create_tables.sql file, you should specify the table names in your config.inc.php. file. The 用于该指令可以在其中找到 配置.

您还需要有一个ControlUser ($cfg['Servers'][$i]['controluser'] and $cfg['Servers'][$i]['controlpass'] settings) 具有适当的权益。例如,您可以创建它 使用以下声明:

以及任何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和newer:

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

对于超过8.0的MySQL:

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

请注意,MySQL使用PHP的MySQL安装超过7.4和MySQL较新的8.0可能需要 使用mysql_native_password身份验证作为解决方法,请参阅 1.45我在尝试登录时收到有关未知身份验证方法CACHING_SHA2_PASSWORD的错误消息 for details.

从旧版本升级

警告

绝不 通过现有安装提取新版本 phpmyadmin,始终首先删除旧文件保持只是 configuration.

这样,您不会在目录中留下任何旧或过时的文件, 这可以具有严重的安全影响或可能导致各种破损。

Simply copy config.inc.php. from your previous installation into 新的未包装。旧版本的配置文件可能 随着某些选项已更改或删除,需要一些调整。 为了与PHP 5.3及更高版本的兼容性,删除a set_magic_quotes_runtime(0); 您可能在附近找到的声明 配置文件的结尾。

你应该 不是 copy libraries/config.default.php over config.inc.php. 因为默认配置文件是版本 - specific.

可以在几个简单的步骤中执行完整升级:

  1. 下载最新的PHPMYADMIN版本<//www.phpmyadmin.net/downloads/>.
  2. Rename existing phpMyAdmin folder (for example to phpmyadmin-old)。
  3. Unpack freshly downloaded phpMyAdmin to the desired location (for example phpmyadmin)。
  4. Copy config.inc.php.` from old location (phpmyadmin-old) to the new one (phpmyadmin)。
  5. 测试一切正常工作。
  6. Remove backup of a previous version (phpmyadmin-old)。

如果您已将MySQL Server从以前的版本升级到4.1.2至 版本5.x或更新,如果使用phpmyadmin配置存储,您 should run the SQL. script found in sql/upgrade_tables_mysql_4_1_2+.sql.

如果您从2.5.0或较新的PHPMyAdmin升级到2.5.0或更新 newer (<= 4.2.x),如果使用phpmyadmin配置存储,您 should run the SQL. script found in sql/upgrade_column_info_4_3_0+.sql.

不要忘记清除浏览器缓存并通过留空旧会话 注销和登录再次登录。

使用身份验证模式

http. 建议使用cookie身份验证模式 多用户 environment 您希望为用户提供自己的数据库和 不希望他们和他人一起玩。尽管如此,请注意MS Internet Explorer似乎真的是关于饼干的错误,至少直到版本 6. Even in a 单用户环境,您可能更愿意使用 http. 或cookie模式,以便您的用户/密码对在清除中 configuration file.

http. 和cookie身份验证 模式更安全:MySQL登录信息不需要 设置在PHPMyAdmin配置文件(除外) $cfg['Servers'][$i]['controluser'])。 但是,请记住密码在纯文本中旅行,除非 您正在使用HTTPS协议。在cookie模式下,密码是 存储,用AES算法加密,在临时cookie中。

然后每个人 真的 用户应该被授予一组权限 在一组特定数据库上。通常你不应该给全球 除非您了解这些影响,否则对普通用户的特权 权限(例如,您正在创建超级用户)。 例如,授予用户 real_user. 所有特权都有 the database user_base.:

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

现在可以通过MySQL用户管理完全控制用户 系统。使用HTTP或Cookie身份验证模式,您不需要填充 用户/密码字段 $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, 真的);
/* 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()), 真的));
    $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>';
}

或者,您也可以使用这种方式与OpenID集成,如图所示 in examples/openid.php:

<?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 //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 = [
    '//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, 真的);
/* 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()), 真的));
session_write_close();
/* Redirect to phpMyAdmin (should use absolute URL here!) */
header('Location: ../index.php');

如果您打算使用除,您必须使用其他一些方式传递凭据 在PHP中实现包装器以获取该数据并将其设置为 $cfg['Servers'][$i]['SignonScript']。有一个非常极少的例子 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',
        '',
    ];
}

配置身份验证模式

  • 这种模式有时是安全的,因为它需要你填补 $cfg['Servers'][$i]['user'] and $cfg['Servers'][$i]['password'] 字段(因此,任何可以阅读您的人 config.inc.php. 可以发现您的用户名和密码)。
  • 在里面 ISP,多用户安装 部分,有一个条目解释了如何 保护您的配置文件。
  • 有关此模式下的其他安全性,您可能希望考虑 Host authentication $cfg['Servers'][$i]['AllowDeny']['order']$cfg['Servers'][$i]['AllowDeny']['rules'] 配置指令。
  • 与cookie和http不同,不需要用户在第一个时登录 加载phpmyadmin站点。这是通过设计,但可以允许任何 用户访问您的安装。使用一些限制方法是 suggested, perhaps a .htaccess. 使用http-auth指令或禁止文件 在一个路由器或防火墙上传入的HTTP请求就足够了(两者 其中超出了本手册的范围,但很容易搜索 with Google).

保护您的PHPMyAdmin安装

PHPMYADMIN团队试图努力使申请安全,但是在那里 总是让您的安装更安全:

  • 跟随我们的 安全公告 和 upgrade 每当公布新漏洞时PHPMYADMIN。

  • 仅在HTTPS上为PHPMYADMIN提供服务。最好,您也应该使用HSTS,这样 您免于协议降级攻击的保护。

  • 例如,确保您的PHP设置遵循生产网站的建议,例如 display_errors.应该被禁用。

  • 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 在初始设置后使用它。

  • 正确选择身份验证方法 - cookie身份验证模式 可能是共享托管的最佳选择。

  • Deny access to auxiliary files in ./libraries/ or ./templates/ 您的Web服务器配置中的子文件夹。 这种配置可防止可能的路径曝光和横梁 在该代码中可能会发现可能遇到的脚本漏洞。为了 apache webserver,这通常是用的 .htaccess. file in those directories.

  • 拒绝访问临时文件,请参阅 $cfg['TempDir'] (if that 放在你的网络根内,另见 Web服务器上传/ save / import目录.

  • 保护公共PHPMYADMIN安装通常是一个好主意 反对机器人的访问,因为他们通常不能做任何事情。你 can do this using robots.txt 文件in. the root of your webserver or limit 访问Web服务器配置,请参阅 1.42如何防止机器人访问phpmyadmin?.

  • 如果您不希望所有MySQL用户能够访问 phpmyadmin,你可以使用 $cfg['Servers'][$i]['AllowDeny']['rules'] to limit them or $cfg['Servers'][$i]['AllowRoot'] 拒绝root用户访问权限。

  • 使能够 双因素身份验证 for your account.

  • 考虑在身份验证代理后面隐藏phpmyadmin,这样 用户需要在提供MySQL凭据之前进行身份验证 到phpmyadmin。您可以通过将Web服务器配置为请求来实现这一目标 HTTP身份验证。例如,在Apache中,可以使用:

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

    更改配置后,您需要创建一个用户列表 可以进行身份​​验证。这可以使用 htpasswd. utility:

    htpasswd. -c /usr/share/phpmyadmin/passwd username
    
  • 如果您害怕自动攻击,请启用CAPTCHA $cfg['CaptchaLoginPublicKey'] and $cfg['CaptchaLoginPrivateKey'] might be an option.

  • 登录尝试失败将记录到syslog(如果可用),请参阅 $cfg['AuthLog'])。这可以允许使用诸如 fail2ban阻止蛮力尝试。请注意Syslog使用的日志文件 与Apache错误或访问日志文件不同。

  • 如果您与其他PHP应用程序一起运行PHPMyAdmin,则是 通常建议使用单独的会话存储来避免phpmyadmin 可能的基于会话的攻击。您可以使用 $cfg['SessionSavePath'] to achieve this.

使用SSL进行连接到数据库服务器

连接到远程数据库服务器时建议使用SSL。那里 是SSL安装程序中涉及的几个配置选项:

$cfg['Servers'][$i]['ssl']
定义是否使用SSL。如果只能启用此,则连接 将被加密,但没有身份验证 - 您 无法验证您正在与正确的服务器交谈。
$cfg['Servers'][$i]['ssl_key']$cfg['Servers'][$i]['ssl_cert']
这用于对服务器的客户端进行身份验证。
$cfg['Servers'][$i]['ssl_ca']$cfg['Servers'][$i]['ssl_ca_path']
您信任服务器证书的证书机构。 这用于确保您正在与可信服务器交谈。
$cfg['Servers'][$i]['ssl_verify']
此配置禁用服务器证书验证。使用 caution.

已知的问题

具有列特定权限的用户无法“浏览”

如果用户在表中的某些(但不是全部)列中仅具有列特定的权限,则“浏览” 将失败错误消息。

作为解决方法,可以创建一个带有与表相同名称的书签查询,这将 使用“浏览”链接时运行。 问题11922.

使用'http'身份验证注销后,记录失败

When using the ‘http’ auth_type, it can be impossible to log back in (when the logout comes 手动或经过一段时间的不活动)。 发行11898..