SharePoint 和 <identity impersonate ="false"/>

标签 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 部件访问数据库吗?

最佳答案

<identity /><authentication /> web.config 文件中的元素将共同确定使用集成身份验证时用于连接到 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 将实现您想要的。我不相信你会看到对性能有任何明显的影响,但你可以测试一下:-)

关于SharePoint 和 <identity impersonate ="false"/>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1061857/

相关文章:

sharepoint - 使用从函数返回的 SPListItemCollection 是否会重新打开 SPWeb?

sharepoint - 将SharePoint列表数据提取到单独的SQL Server表中的最简单方法?

sharepoint - 如何使用 SharePoint API 创建自定义文档库和文件夹

ssl-certificate - 无法使用所有 Python 插件的用户名和密码对 SharePoint API 进行身份验证

sharepoint - 什么是共享点?对于程序员来说它的主要优点是什么?

sharepoint - 如何以编程方式关闭共享点导航中的显示页面

sharepoint - 如何使用MOSS中其他站点的列表?

sharepoint - 用户配置文件应用程序代理无法从用户配置文件应用程序检索分区

Sharepoint 2010(左右区域) - 删除

go - 使用用户凭据访问 Sharepoint API