0

我想在 PHP 5.2 环境中测试为 PHP 5.3.5(作为 Apache 模块安装)编写的脚本。

我安装了 Apache 2.0.64 和 PHP 5.2.17 的新副本,并按照我之前配置 PHP 5.3 的方式对其进行了配置。除了我确实复制libmysql.dll到 Apache bin 目录(PHP 5.3 不再有这个文件)。

两台服务器都是手动配置的(不是 XAMPP 版本之类的),并访问相同的本地安装的 mySQL Server 5.5.8。两台服务器都在系统帐户下作为 Windows Server 运行。

PHP 5.3 完美运行,PHP 5.2 返回错误:

Warning: mysql_connect() [function.mysql-connect]: Access denied 
for user 'SYSTEM'@'localhost' (using password: NO) in C:\Tools\htdocs\myscript.php on line 33

我使用的 SQL 用户在 PHP 代码中是硬编码的,但不是SYSTEM@localhost。SYSTEM 似乎是运行 Apache 的 Windows 帐户。(如果我从管理员帐户启动 Apache,消息将变为Administrator@localhost。)

在我的 SQL Server 上删除了默认用户(名称为 '')。如果此空用户存在,则 PHP 5.2 成功连接到数据库,但mysql_select_db由于权限原因,数据库选择 ( ) 失败。

4

2 回答 2

2

如果在 中打开(不是sql.safe_modePHP 安全模式),PHP 始终使用脚本所有者连接到 SQL 服务器,而不是在 中指定的用户。php.inimysql_connect()

我在配置过程中混淆了属性safe_modesql.safe_mode花了我 6 个小时!

答案在这里找到:http ://www.php.net/manual/de/ref.mysql.php#72632

于 2011-02-10T15:10:04.573 回答
0

问题是您没有为mysql_connect. 不要将它们留空(并让 PHP 使用默认用户),而是指定一个添加到 MySQL 的实际用户名和密码,使用GRANT(或 phpMyAdmin 或任何其他管理客户端)添加到 MySQL 的实际用户名和密码。

允许无密码身份验证是一个巨大的禁忌。允许管理员在没有密码的情况下进行访问简直太可怕了。相反,为您的所有程序创建有限的用户帐户。仅在绝对必要时使用特权帐户...

于 2011-02-10T15:04:38.760 回答