我想使用集成身份验证从 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/