如何添加用户名/密码访问phpMyAdmin,独立于'链接'服务器?

时间:2015-03-13 08:58:14

标签: php mysql phpmyadmin

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

我想实现对phpMyAdmin的全局用户名/密码访问。我已尝试使用我们内部网的现有用户身份验证过程,该过程使用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/中的类定义第686行的pma / libraries / common.inc.php

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

2 个答案:

答案 0 :(得分:0)

我不确定这个解决方案有多强大或安全,但到目前为止还有效。欢迎任何警告。

我在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_start()中注释session.inc.php(第101行,版本4.3.8,否则未经修改)以删除持久的“会话已启动”消息。

答案 1 :(得分:0)

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

一个稍微麻烦但工作量少得多的替代方法是将每个服务器设置为auth_type配置并通过其他方式(例如强制执行HTTP BASIC身份验证的.htaccess文件)或现有安全来保护您的phpMyAdmin安装您提到的身份验证过程)。这样,系统不会提示您的用户单独登录每个服务器,并且您的Web服务器提供身份验证以保护phpMyAdmin安装。这里的缺点是每个用户然后使用相同的MySQL用户帐户,这可能是一个好处或损害,具体取决于您的配置。