服务器主体无法在当前安全上下文下访问数据库

时间:2013-06-18 20:55:10

标签: php sql-server

这似乎是一个相当普遍的问题但是看看帮助&其他相关主题的解决方案对我没有帮助。

我在这里使用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。

感谢您查看我的问题!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

此外,如果您正在执行存储过程,请确保您没有EXECUTE AS OWNER的问题。可以看到here

的一个例子

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