[翻译]在ASP.NET Web应用程序中应用FileStream特性

Q:我在ASP.NET应用程序中使用基于表单认证。我想要使用FileStream(文件流),但验证成为了障碍。我该如何进行设置?

A:

如果您使用的是匿名访问和基于表单的认证,那么无法结合Windows用户。因此,您无法将来自web客户端的Windows用户在SQL Server中进行验证。解决方法就是使用IIS进程级别的身份来使用集成安全登录到SQL Server。

即使对于IIS匿名访问,IIS也有一个Windows级别的进程级别身份。您可以利用这个来允许进程帐号通过Windows验证来访问SQL Server。

逐步说明如下:

1. 确保IIS使用"Network service"身份。这个是默认设置,不过需要按照如下步骤在IIS管理的应用程序池中进行如下设置:

右击您的应用程序使用的ASP.NET应用程序池,选择属性,到“标识”标签,确保您选择了“预定义”与选择了“Network Service”。如果您没有这样设置,您会受到错误信息:用户'NT AUTHORITY\ANONYMOUS LOGON'登陆失败

2. 确保该IIS帐号能访问SQL Server。您可以使用类似sp_grantlogin 'domain1\machineA$ '的T-SQL语句来赋予登陆权限。赋予必要的权限。

3. 将web.config配置如下:

<authentication mode="Forms" />

<identity impersonate="false"/>

(注意默认为false。如果您允许对IIS的匿名访问,您不能将这个设置为true。不然您可能会获得如下错误信息:

登陆失败。该登陆是来自不受信任的域,不能使用Windows验证。)

4. 配置网站,允许匿名访问

5. 配置所有的SQL连接语句使用Windows验证

在您的Filestream应用程序中,确保所有的SQL连接使用了“集成安全”,例如:

SqlConnection sqlConnection = new SqlConnection("Integrated Security=true;server=MachineB");

6. 以上的步骤允许您的应用程序以Domain1\MachineA$帐号使用Windows验证连接SQL Server

注意:您也可以配置IIS进程帐号簿使用“Network Service”帐号而使用其他帐号。