我在IIS中托管的Web服务在域帐户下运行,该域帐户也具有SQL Server的权限。下面提到的所有用户都可以访问此SQL Server。
以下是服务配置的一个片段:
<basicHttpBinding>
<binding name="SecureWebBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
......等等。
在特定的服务方法中,我作为服务帐户调用一个数据库,并希望以调用服务的用户为另一个调用(我们返回由调用用户创建的FILESTREAM事务上下文 - 这些是用户 - 具体)。第一个调用完成,但第二个调用包装如下:
using (ServiceSecurityContext.Current.Impersonate())
{
using (var connection = new SqlConnection(...Integrated Security = true...)
{
connection.Open(); //<---Exception
在致电Impersonate
后,WindowsIdentity.GetCurrent()
正确地返回主叫用户而不是ImpersonationLevel == Identification
的服务帐户。
如果我删除前两行,则操作将作为服务帐户的标识完成。当然后来对FILESTREAM的调用失败了。
答案 0 :(得分:0)
当您模仿时,您需要为服务器设置SPN,因为它使用kerberos。但这取决于您获得的错误消息。这个资源可以帮助你,虽然我仍然遇到类似过程的问题,但你的过程似乎应该适用于此: