【问题标题】:php access to remote databasephp访问远程数据库
【发布时间】:2008-11-11 20:45:29
【问题描述】:

救命!

我在 HOST1 上有一个 PHP (PHP 5.2.5) 脚本,试图连接到 MySql 数据库 HOST2。两台主机都在通过 CPanel 控制的共享主机环境中。

HOST2 设置为允许来自 HOST1 的远程数据库连接。

我使用的 PHP 连接是:- $h2 = IP 地址; $dbu = 数据库用户; $dbp = DBPASS;

$DBlink = mysql_connect($h2, $dbu, $dbp);

这总是失败:-

Access denied for user '<dbusername>'@'***SOMESTRING***' (using password: YES)

nb:SOMESTRING 看起来可能与共享主机环境有关。

有什么想法吗???

顺便说一句:我可以使用 OpenOffice 通过 ODBC 和 SQLyog 从我的笔记本电脑远程连接到 HOST2。 SQLyog 和 ODBC 设置与 PHP 脚本尝试使用的设置完全相同。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    somestring 可能是您的网络服务器的反向查找。

    您可以从您的 cPanel 修改权限吗?您是否已采取措施允许从您的工作站 (ODBC) 进行访问?

    错误消息似乎表明您具有对 mysql 服务器的网络访问权限,但没有来自该特定主机的用户名的权限。

    如果您被允许为您的数据库授予权限,则调用:

    GRANT SELECT ON database.* TO username@ip.address.of.host1 IDENTIFIED BY 'password'

    可能对你有用。我只是在脑海中写下这个,您可能需要仔细检查 mysql-docs 中的语法。

    【讨论】:

    • 谢谢 - 线索意识到 - 正如你所指出的 - SOMESTRING 实际上是托管我网站的实际 Web 服务器的反向查找。所以我只是启用了对它的远程访问,而不是我的网站的 IP 地址......并且一切正常。谢谢!
    【解决方案2】:
    • 您是否阅读过Causes of Access denied Errors 上的 MySQL 文档?

    • 您是否联系过您的托管服务提供商的支持?他们应该有权对数据库连接进行故障排除。互联网上的人无法访问。

    • 是否需要指定数据库名称?您的帐户可能只能连接到特定数据库。 mysql_connect() 函数不允许您指定数据库,但 new mysqli() 可以。我不确定这是否相关——它可能允许您连接,但当您尝试查询不在数据库中的表时会出现错误。

    • 您确定您使用的密码正确吗? MySQL 允许每个帐户在每个客户端主机上使用不同的密码。诚然,这不是一种常见的配置,但它是可能的。您的托管服务提供商应该能够告诉您。

    【讨论】:

      【解决方案3】:

      只是一些想法:

      • HOST1 没有远程访问 HOST2(共享主机不允许)
      • MySQL 帐户无权从 HOST1 访问(创建帐户时指定的 IP 地址或通配符)

      编辑:

      在回复您的评论时,我的意思是 HOST1 无法访问 HOST2 上的 MySQL 端口。当然,Web 服务会起作用,因为端口 80 对公众开放。正如另一位用户指出的那样,您得到了响应,因此您正在达到它。我会尝试指定数据库,并仔细检查您运行的帐户创建命令。

      对于第二个部分,我的意思是:http://dev.mysql.com/doc/refman/5.0/en/adding-users.html

      您可以指定用户名可以从哪个主机连接。如果未设置为 HOST2 的 IP 或通配符,则 HOST2 无法使用这些凭据登录。

      【讨论】:

      • 感谢您的想法 - HOST1 肯定可以访问 HOST2,实际上我可以通过在两者之间简单地设置一个 mickeymouse web 服务来解决这个问题 - 但我更愿意理解为什么这不起作用:- ) 我不够了解,无法理解您的第二个想法。
      【解决方案4】:

      错误信息表示您可以联系mySql服务器,但是您尝试登录的用户没有访问权限。

      要么用户根本没有访问权限,要么在本地有访问权限,但不能从您连接的主机访问。

      【讨论】:

        【解决方案5】:

        您应该尝试使用主机名和端口,例如 $h2 = IPADDRESS:3307;

        【讨论】:

          猜你喜欢
          • 2017-09-02
          • 1970-01-01
          • 2021-01-08
          • 2018-04-02
          • 2018-02-14
          • 2015-05-29
          • 2010-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多