【问题标题】:How do I add username/password access to phpMyAdmin, independent of 'linked' servers?如何添加用户名/密码访问 phpMyAdmin,独立于“链接”服务器?
【发布时间】:2015-05-15 16:48:18
【问题描述】:

我们在不同的服务器上大约有 10 个数据库(并且还在增加),我们必须非常快速地管理和跳转,而且每次访问每台服务器时都连续输入每个服务器的密码变得非常低效。

我想实现对 phpMyAdmin 的全局用户名/密码访问。我已经尝试使用我们的 Intranet 现有的用户身份验证过程,它使用 PHP 会话,但这会干扰 phpMyAdmin 对会话的使用。

有没有办法可以做到这一点?插件? PMA 代码中是否有我需要注意的协议?

基本上,我已经尝试在config.inc.php 中插入它,但它只是被忽略了:

if ( isset ( $_SESSION["myIntranetAuth"] ) and $_SESSION["myIntranetAuth"] == true)
{
    $cfg['Servers'][$i]['host'] = 'remote.database.server.net';
    $cfg['Servers'][$i]['user'] = 'database1';
    $cfg['Servers'][$i]['password'] = 'Password123';
    // etc - for all servers/databases
}

我也尝试在 phpMyAdmin 的 index.php 顶部插入它,但它也被忽略了:

if ( ! isset ( $_SESSION["myIntranetAuth"] ) or $_SESSION["myIntranetAuth"] != TRUE )
{
    exit ( header( "Location: https://myintranet.com/login" ) );
}

我什至在这两种情况下都包含了if( session_id() == "" ) session_start();,但它告诉我:

致命错误:main():脚本试图执行方法或访问不完整对象的属性。请确保您尝试操作的对象的类定义“PMA_Theme_Manager”已加载 unserialize() 被调用或提供 __autoload() 函数以在 /usr/www 中加载类定义/users/me/myintranet.com/pma/libraries/common.inc.php 在第 686 行

我在打一场失败的战斗吗?

【问题讨论】:

  • wiki.phpmyadmin.net/pma/Auth_types 猜你需要像单点登录这样的东西
  • 就个人而言,我根本不会使用 phpMyAdmin。有几个很好的数据库管理产品,比如 Navicat/TOAD/HEIDI,当然还有 MySQL Workbench 本身mysql.com/products/workbench。使用其中之一来管理您的服务器和数据库。所有这些都允许您存储每个连接的登录信息并打开多个服务器的连接。
  • @DavidSoussan:不幸的是,目前成本是我们的一个因素。我一直在使用 Active Database Software 的一款名为 FlySpeed SQL Query 的优秀产品,但试用/免费版本有很多限制。所以它现在必须是一个免费的选择。
  • mysql 工作台是免费的,TOAD 和 HEIDI 也是免费的。检查出来。

标签: php mysql phpmyadmin


【解决方案1】:

我不确定这个解决方案的稳健性或安全性,但到目前为止它已经奏效。欢迎任何警告。

我在config.inc.php中使用了以下内容:

if( session_id() == "" ) session_start();

if ( isset ( $_SESSION["myIntranetAuth"] ) and $_SESSION["myIntranetAuth"] == true)
{
    $cfg['Servers'][$i]['host'] = 'remote.database.server.net';
    $cfg['Servers'][$i]['user'] = 'database1';
    $cfg['Servers'][$i]['password'] = 'Password123';
    // etc - for all servers/databases
}

并注释掉 session.inc.php 中的 session_start()(第 101 行,版本 4.3.8,否则未修改)以删除持久的“会话已开始”消息。

【讨论】:

    【解决方案2】:

    正如 Blaatpraat 在评论中提到的,在 phpMyAdmin 中正确执行此操作的理想方法是使用“signon”auth_type。

    另一种稍微麻烦但工作量少得多的替代方法是将每个服务器设置为 auth_type 配置并通过其他方式保护您的 phpMyAdmin 安装(例如强制 HTTP BASIC 身份验证的.htaccess 文件 - 或现有的身份验证过程你提到)。这样,不会提示您的用户单独登录每个服务器,并且您的网络服务器提供身份验证以保护 phpMyAdmin 安装。这里的缺点是每个用户都使用相同的 MySQL 用户帐户,这取决于您的配置是有利还是不利。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多