1

这似乎是一个相当普遍的问题,但查看其他相关线程的帮助和解决方案并没有帮助我。

我在这里使用 PHP 代码块 ( http://pastebin.com/xSJYyC3y ) 来尝试连接和查询 SQL Server 数据库。连接似乎有效,但是在进行查询时,我收到以下错误消息:

[Microsoft][SQL Server Native Client 11.0][SQL Server]The server principal "my_username" is not able to access the database "database_name" under the current security context.

我只在通过 PHP 连接到服务器时收到此错误,如果我通过 MS SQL Management Studio 手动执行此操作,则一切正常。

我使用的是 Windows 7 x64、SQL Server 2008 SP1 x64 和 PHP 5.4。

感谢您查看我的问题!

4

1 回答 1

1

如果您可以通过 SSMS 运行查询,但通过 PHP 遇到安全问题,那么您很可能遇到了错误模拟问题。

通常,您将遇到两个不同的安全问题:

  • SQL Server 的内部安全性 - 如果您使用 SQL Server 帐户登录服务器,并且能够使用与 PHP 相同的帐户从 SSMS 中运行查询,则 SQL Server 安全性应该没问题。如果您不能使用相同的帐户,请开始查看服务器上的角色和安全性,暂时放松 PHP 使用的帐户的安全性。
  • Windows 安全性:如果未正确配置来自 PHP 的连接,您可能会看到模拟问题。我见过的对此最彻底的解释可以通过 Brian Swans 的回答找到

请注意,如果您的查询涉及多个数据库,或者特别是如果它包含明确涉及文件系统的内容(可能在共享文件夹上),您需要检查所有服务器和所有正在运行的文件夹的权限。

此外,如果您正在执行存储过程,请确保您没有遇到EXECUTE AS OWNER. 一个例子可以在这里看到

如果这没有帮助,您仍然可以查看 Windows 机器上数据库文件的安全性,并尝试 - 暂时 - 放松文件夹的安全性,看看是否有任何改变。

于 2013-06-18T22:54:48.443 回答