我们在不同的服务器上有大约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
我是在打一场失败的战斗吗?
答案 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用户帐户,这可能是一个好处或损害,具体取决于您的配置。