安装¶
PHPMyAdmin不会向MySQL应用任何特殊的安全方法 数据库服务器。它仍然是系统管理员的工作 正确上的MySQL数据库的权限。 phpmyadmin 用户 页面可用于此。
Linux发行版¶
PHPMyAdmin包含在大多数Linux发行版中。建议使用 有可能的分销包 - 他们通常为您提供集成 分发,您将自动从您的分发中获取安全更新。
Debian和Ubuntu.¶
大多数Debian和Ubuntu版本包括PHPMyAdmin包,但要注意
the configuration file is maintained in /etc/phpmyadmin
和 may differ in
来自官方phpmyadmin文件的某种方式。具体来说,它确实如下:
- Web服务器的配置(适用于Apache和LightTPD)。
- 创造 phpmyadmin配置存储 使用dbconfig-common。
- 保护设置脚本,请参阅 Debian,Ubuntu和衍生品的设置脚本.
有关安装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地址。
-
PMA_VERBOSE
¶ 详细介绍数据库服务器的名称。
-
PMA_VERBOSES
¶ 逗号分隔的数据库服务器的详细名称。
笔记
只使用if.
PMA_VERBOSE
is empty.
-
PMA_PORT
¶ 要使用的数据库服务器的端口。
-
PMA_ABSOLUTE_URI
¶ The fully-qualified path (
//pma.example.net/
) where the reverse 代理使PHPMyAdmin可用。也可以看看
-
HIDE_PHP_VERSION
¶ 如果已定义,此选项将隐藏PHP版本(expose_php =关闭)。 设置为任何值(例如 hide_php_version = true)。
-
UPLOAD_LIMIT
¶ 如果设置,则此选项将覆盖默认值 value for apache and php-fpm (this will change
upload_max_filesize
和post_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
设置,它切换到 配置身份验证模式.
自定义配置¶
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/
快速安装¶
- 从phpmyadmin.net中选择合适的分发套件
下载页面。一些套件仅包含英文消息,其他套件
包含所有语言。我们假设你选择了一个名字的套件
looks like
phpMyAdmin-x.x.x -all-languages.tar.gz
. - 确保您已下载了正版档案,请参阅 验证phpmyadmin发布.
- Untar或解压缩分发(务必解压缩子目录):
tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz
in your Web服务器的文档根。如果您没有直接访问您的 文档根,将文件放在本地计算机上的目录中, 并且,在步骤4之后,使用Web服务器上的目录使用, for example, FTP. - 确保所有脚本都有适当的所有者(如果PHP是 以安全模式运行,具有与所有者不同的脚本 其他脚本的所有者将是一个问题)。看 4.2制作PHPMYADMIN防止邪恶的访问的首选方法是什么? and 1.26我刚刚在我的文档根目录中安装了phpmyadmin,但在尝试运行phpmyadmin时,我会收到错误“未指定的输入文件”。 for suggestions.
- 现在,您必须配置安装。有两种方法
可以使用。传统上,用户手工编辑副本
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.
现在,该文件已准备好使用。您可以选择查看或编辑 文件与您最喜欢的编辑器,如果您愿意设置一些高级 安装脚本未提供的选项。
- 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身份验证时始终提供“访问被拒绝”。. - 在浏览器中打开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.
可以在几个简单的步骤中执行完整升级:
- 下载最新的PHPMYADMIN版本<//www.phpmyadmin.net/downloads/>.
- Rename existing phpMyAdmin folder (for example to
phpmyadmin-old
)。 - Unpack freshly downloaded phpMyAdmin to the desired location (for example
phpmyadmin
)。 - Copy
config.inc.php.`
from old location (phpmyadmin-old
) to the new one (phpmyadmin
)。 - 测试一切正常工作。
- 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']
.
也可以看看
1.32我可以使用IIS使用HTTP身份验证吗? , 1.35我可以使用Apache CGI的HTTP身份验证吗?, 4.1我是一个ISP。我可以设置phpmyadmin的一个中央副本,还是我需要为每个客户安装它吗?, 4.2制作PHPMYADMIN防止邪恶的访问的首选方法是什么?, 4.3我收到错误,无法在/ lang或/库中包含文件。
http.身份验证模式¶
用途 http. Basic authentication 方法并允许您以任何有效的MySQL用户身份登录。
支持大多数PHP配置。为了 IIS. (isapi.) support using CGI. PHP参见 1.32我可以使用IIS使用HTTP身份验证吗? ,使用apache CGI. 看 1.35我可以使用Apache CGI的HTTP身份验证吗?.
当PHP在Apache下运行时 mod_proxy_fcgi. (e.g. with PHP-FPM),
Authorization
标题未传递给底层FCGI应用程序, 这样您的凭据不会到达申请。在这种情况下,您可以 添加以下配置指令:SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
也可以看看 4.4 PHPMyAdmin使用HTTP身份验证时始终提供“访问被拒绝”。 关于没有使用 .htaccess. mechanism along with ‘http.'身份验证模式。
笔记
没有办法在HTTP身份验证中进行适当的注销,大多数浏览器 将记住凭据,直到没有不同的成功 验证。因此,这种方法有一个限制您不能 在注销后与同一用户登录。
签名身份验证模式¶
- 此模式是使用另一个凭证的便捷方式 应用程序对PHPMyAdmin进行身份验证以实现单个签名 solution.
- 其他应用程序必须将登录信息存储到会话中
data (see
$cfg['Servers'][$i]['SignonSession']
and$cfg['Servers'][$i]['SignonCookieParams']
) 或者你 需要实现脚本以返回凭据(请参阅$cfg['Servers'][$i]['SignonScript']
)。 - 没有可用凭据时,用户被重定向到
$cfg['Servers'][$i]['SignonURL']
,你应该处理的地方 the login process.
在会话中保存凭据的基本示例可用作
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.