我正在为我们的组织编写一个虚拟主机控制面板,并希望能够自动将用户登录到phpMyAdmin。
最好的方法是什么?
当然,我们不希望以纯文本格式将用户的控制面板帐户密码保存在我们的数据库中。
答案 0 :(得分:4)
您必须编辑配置文件才能执行此操作。使用文本编辑器
打开文件\ phpMyAdmin的\ config.inc.php文件
替换以下代码
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';
有了这个
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'Server Username';
$cfg['Servers'][$i]['password'] = 'Server Password';
将服务器用户名替换为数据库服务器的用户名。默认情况下,localhost为 root 。
将服务器密码替换为数据库服务器的密码。默认情况下,localhost保持空白。
现在,保存文件并尝试从浏览器打开MySQL Admin。现在,您应该自动重定向到phpMyAdmin。
请注意,现在每个想要的人都可以登录!
答案 1 :(得分:2)
我不认为有一种方法可以在不知道一组用户名和密码的情况下完成。最后,phpMyAdmin只是将会话连接到数据库的中间件。
据我所知,phpMyAdmin本身甚至没有自己的用户表。它基本上尝试使用您提供的凭据登录数据库。如果成功,它会将您的凭据存储在Cookie中,尽管它们已加密。这就是为什么phpMyAdmin在您的配置文件中要求Blowfish的秘密,以便安全地存储您的凭据 more 。
您可以获得所需的最接近的内容实际上是内置于phpMyAdmin,请参阅单点登录时的http://wiki.phpmyadmin.net/pma/Auth_types。
auth_type signon是一项允许phpMyAdmin与Single Sign-on(SSO)系统集成的功能。管理员可以配置他们的phpMyAdmin安装,以从现有的SSO会话中获取MySQL用户名和密码,例如,允许用户登录控制面板,然后在phpMyAdmin之类的应用程序之间切换,而无需再次登录。 / p>
对我来说,我会为您的每个用户帐户创建一个新用户,例如名为foo
的用户可能拥有一个名为foo_mysql
的仅限SSO的帐户。然后将foo_mysql
及其密码(加密)存储到您的数据库中。当您的用户尝试从您的管理门户访问phpMyAdmin时,您可以使用"登录"如http://wiki.phpmyadmin.net/pma/Auth_types#signon中所述的身份验证类型设置。
更安全的方式(但我仍然有自己的疑问)可能是您只在需要时才创建一个临时的仅限SSO的帐户。例如,每次用户请求从您的管理门户访问phpMyAdmin时,都会生成一个新的随机foo_4f65ca1d
。然后将新凭据发送到phpMyAdmin。
一旦你将它传递给phpMyAdmin,它将是phpMyAdmin,它以通常的phpMyAdmin方式管理凭据。当用户从门户网站注销时,删除临时用户。或者设置一个计划任务,在一段时间后删除它们(可能是与phpMyAdmin会话长度同步的一段时间)。
这样,帐户本身就像用户会话一样。您甚至不必在数据库中存储这些凭据,明文或加密。
我这里没有安全专家,但我希望这可能引发一些讨论或其他一些更安全的解决方案。
答案 2 :(得分:0)
如果我找到了你,那么你想要实现你的客户可以访问他们的"数据库之前无需提供任何凭据?我认为这可以在不添加一些自定义PHP代码的情况下使用MyAdmin完成。如果你的控制面板也是php,你可以设置包含所需信息的会话变量,如user,passwd和database-name等,然后由MyAdmin中的authentification-method处理。也许这可能是一个开始:php sessions to authenticate user on login form
编辑:phpMyAdmin似乎同时拥有SSO代码,因此您只需要在控制面板中设置相关值。看看:http://wiki.phpmyadmin.net/pma/Auth_types#signon
答案 3 :(得分:-2)
我认为这是解决您问题的方法。
首先在config.inc.php
中的语句之前添加以下行:
$cfg['Servers'][1]['auth_type'] = 'config';
$cfg['Servers'][1]['host'] = 'localhost'; //edit if you have db in the other host
$cfg['Servers'][1]['connect_type'] = 'tcp';
$cfg['Servers'][1]['compress'] = false;
$cfg['Servers'][1]['extension'] = 'mysql';
$cfg['Servers'][1]['user'] = 'root'; //edit this line
$cfg['Servers'][1]['password'] = ''; // edit this line
跳这将有所帮助。