1

我有一个托管在 IIS 中的 Web 服务,该服务在一个域帐户下运行,该域帐户也具有对 SQL Server 的权限。下面提到的所有用户都可以访问此 SQL Server。

这是服务配置的片段:

<basicHttpBinding>
<binding name="SecureWebBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />

... ETC。

在特定的服务方法中,我以服务帐户的身份调用数据库,并希望以调用服务的用户身份进行另一次调用(我们正在返回由调用用户创建的 FILESTREAM 事务上下文 - 这些是特定于用户的)。第一个调用完成,但第二个调用如下:

using (ServiceSecurityContext.Current.Impersonate())
{                    
   using (var connection = new SqlConnection(...Integrated Security = true...)
   {
      connection.Open(); //<---Exception

调用后ImpersonateWindowsIdentity.GetCurrent()正确返回调用用户而不是服务帐户ImpersonationLevel == Identification

如果我删除前 2 行,则操作以服务帐户的身份完成。当然,稍后对 FILESTREAM 的调用随后会失败。

4

1 回答 1

0

您需要为服务器设置一个 SPN,以便在模拟时使用 kerberos。但这取决于您收到的错误消息。该资源应该可以帮助您,尽管我仍然遇到类似流程的问题,但是您的流程似乎应该与此一起使用:

http://blogs.msdn.com/b/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx

于 2013-02-25T17:36:30.473 回答