【问题标题】:PHP & MySQL on Mac OS X: Access denied for GUI userMac OS X 上的 PHP 和 MySQL:GUI 用户拒绝访问
【发布时间】:2009-07-29 21:43:42
【问题描述】:

我刚刚在我的 Macbook 上安装并配置了 Apache、MySQL、PHP 和 phpMyAdmin,以便拥有一个本地开发环境。但是在我将我的一个项目转移到本地服务器后,我从我对 mysql_query() 的一次调用中得到了一个奇怪的 MySQL 错误:

拒绝用户访问 '_securityagent'@'localhost'(使用 密码:否)

首先,我发送给 MySQL 的查询都是有效的,我什至通过 phpMyAdmin 对其进行了测试,结果完美。其次,错误消息只发生在这里,而我每页至少有 4 个其他 mysql 连接和查询。对 mysql_query() 的调用发生在一个非常长的函数的末尾,该函数处理新创建或修改的文章的数据。这基本上就是它的作用:

  1. 从文章表单中收集所有数据(标题、内容、日期等)
  2. 验证收集的数据
  3. 连接数据库
  4. 根据经过验证的文章数据动态构建 SQL 查询
  5. 在关闭连接之前向数据库发送查询

非常基本,我知道。我不认识用户名“_securityagent”,所以在快速搜索后,我从 Apple 开发者连接上的一篇文章中发现了这个,该文章谈到了一些随机错误:

Mac OS X 的安全基础架构通过运行其 GUI 解决了这个问题 作为特殊用户“_securityagent”的代码。

因此,正如 Frank 在 cmets 中所建议的那样,我在 mysql_connect() 调用中使用的所有变量上放置了一个 var_dump(),并且每次它返回正确的值(其中用户名当然不是“_securityagent”)。因此,我想知道是否有人知道为什么“securityagent”试图连接到我的数据库 - 以及当我调用 mysql_query() 时如何防止此错误发生。

【问题讨论】:

  • 那么,对 mysql_connect() 的调用是什么样的?
  • 是的,我已经在我的 PHP 库中将数据库处理和系统逻辑划分为不同的类。调用 mysql_query() 的类使用另一个类“dbManager”,它依次完成所有连接等。在 dbManager 中,我有一个名为 connect_db() 的函数,它读取一个在安装期间再次创建的配置文件。此配置文件包含主机地址、数据库、用户名和密码。在 dbManager 中,mysql_connect() 看起来很简单: mysql_connect($SYSTEM_DB_HOST, $SYSTEM_DB_USER, $SYSTEM_DB_PASS); @mysql_select_db($SYSTEM_DB);
  • 您确定实际填充了各种 $SYSTEM_* 变量吗?如果没有,因此默认为 null,那么您将看到您所描述的行为:默认情况下,mysql_connect() 尝试使用操作系统用户名进行连接,而无需密码。在 $SYSTEM_* 上尝试 var_dump(),看看到底发生了什么。
  • 刚刚在所有 $SYSTEM 变量调用 mysql_connect() 之前添加了 var_dump() 调用。他们都返回了正确的数据。它与我正在建立的连接数量有什么关系吗?
  • 另外,我做一个空值检查,以便在我调用 mysql_connect 之前验证从配置文件中读取的变量。所以我发送到mysql_connect的登录信息一定是正确的。

标签: php mysql apache macos


【解决方案1】:

如果没有明确指定用户名,MySQL 会尝试使用当前系统用户的名称来猜测它。

您不必接受,只需明确指定所需的用户名。

如何 - 这取决于您的连接方式。如果是phpMyAdmin,则为config.inc.php,添加如下行:

$cfg['Servers'][0]['user'] = 'Eirik';

(见manual

【讨论】:

  • “拒绝访问”错误不是由 phpMyAdmin 触发的。它发生在我自己的 PHP 文件中,通过一个简单的 mysql_query() 调用。在该查询之前,我已成功连接到明确指定用户名的 MySQL 服务器。
  • 那很奇怪。您是否尝试显式使用连接句柄?也许您的连接和查询之间还有另一个无效的 mysql_connect() 调用(这会破坏默认连接)
  • 我知道在调用 mysql_query() 和连接到数据库之间没有其他 mysql_connect() 或 mysql_close() 调用。但是我之前没有保存连接链接..所以我正在重写我存储数据库链接的位置,直到我想要它关闭。
【解决方案2】:

您是使用预制软件包设置本地 AMP 服务器,还是通过相应操作系统特定的下载软件包安装 MySQL、PHP 等?设置 Apache、MySQL 和 PHP4/5 可以是一个真正的 PITA。

如果您的设置有问题 I'd recommend MAMP。这是一个漂亮的多合一包,真的可以解决问题。您仍然可以访问所需的所有配置文件,并且所有内容都包含在 MAMP 文件夹中,而不是遍布整个系统。如果 Apple 升级预装的 Apache/PHP 版本,则不会像使用预装的 Apache/PHP 那样覆盖您的机器特定配置。

【讨论】:

  • 恐怕这一切都是我自己做的,因为我想了解它是如何完成的。 Asspain 绝对是这个过程的重要组成部分:) 如果这不能很快解决,我可能会用你所指的 MAMP 重试。
  • 伙计,很抱歉你不得不经历那个!我尝试了两次自定义本地服务器设置,一次是在我获得 MBP 时,一次是在我获得 Mac Mini 时。两次我都放弃并使用了 MAMP。这是一个很棒的工具,开箱即用。您是使用 DB 抽象类还是直接调用函数来访问数据库?使用抽象层可能会在某种程度上简化生活。我使用 EzSQL 进行数据库处理。对我来说效果很好(至少在我涉足 PHP 的那几次)。 woyano.com/jv/ezsql希望你能解决这个问题!
猜你喜欢
  • 2013-08-22
  • 2013-04-13
  • 2012-06-03
  • 2011-05-20
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多