我有一个托管在 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
调用后Impersonate
,WindowsIdentity.GetCurrent()
正确返回调用用户而不是服务帐户ImpersonationLevel == Identification
。
如果我删除前 2 行,则操作以服务帐户的身份完成。当然,稍后对 FILESTREAM 的调用随后会失败。