SharePoint和<identity impersonate =“false”> </identity>

时间:2009-06-30 05:18:39

标签: sharepoint sharepoint-api

我想使用集成身份验证从Web部件访问SQL数据库。它应该使用IIS应用程序池标识。

默认情况下,您将收到错误消息:

System.Data.SqlClient.SqlException: Login failed for user 'SERVER\IUSR_VIRTUALMACHINE'.

因为在web.config中,模拟设置为true:

<identity impersonate="true" />

我可以将其设置为false,数据库代码也可以。匿名访问的网站也可以使用。任何使用身份验证的SharePoint站点都将失败,因此这不是真正的解决方案..

要解决此问题,我必须封装所有数据库访问代码以使用提升的权限运行,SharePoint是如何在内部执行的?不知何故,这似乎不是最高性能的解决方案。 这仍然是要走的路,只需使用SQL安全性从SharePoint自定义Web部件访问数据库吗?

3 个答案:

答案 0 :(得分:4)

web.config文件中的<identity /><authentication />元素将共同确定使用集成身份验证时用于连接到SQL Server的帐户。

配置<authentication mode="Windows" />后,您将推迟到IIS对用户进行身份验证。我猜你的web.config包含:

<authentication mode="Windows" />
<identity impersonate="true" />

并且IIS配置为允许匿名用户。设置<identity impersonate="true" />会导致IIS将IIS匿名访问帐户的标识传递给SQL Server。

正如Lars指出的那样,使用SPSecurity.RunWithElevatedPrivileges将实现您想要的效果。我不相信你会看到对性能有任何明显的影响,但这是你可以测试的东西: - )

答案 1 :(得分:3)

使用SPSecurity.RunWithElevatedPrivileges在应用程序池标识的上下文中运行代码。

答案 2 :(得分:0)

这是不正确的。由于<identity impersonate="true" />设置为true,因此ASP.NET / IIS将以当前登录的用户身份运行该线程(因此不是应用程序池帐户,而是登录到网站的实际用户)。

此处还有其他事情发生。你可以发布自定义数据库的连接字符串吗? (减去私人数据)