看的蝈蝈的文章,你看看
这个问题可以进一步划分为两个问题:
1、如何控制iis的IPDeny;
2、由于是WEB方式,默认的WEB帐户权限很低,不会有上面操作的权限,如何处理。
 
第一个问题:微软的msdn中给出了三种方法:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/setting_ip_security_using_system_directoryservices.asp
这里给出了两种。其实都是使用 System.DirectoryServices 类
后一种竟然有这样的要求:
This example requires Windows Server 2003 Service Pack 1, which contains fixes that allow System.DirectoryServices to enumerate list properties.
晕倒,当时就是没看到这条,这一种调试了很久才发现有这个限制。
Windows Server 2003 Service Pack 1 那要啥时候才能出来呀。等不及了。放弃这种方案。另外一个在:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/ref_prog_iaorefiipsecd.asp
代码是 VBScript 写的
其实有个更好的在:
http://www.thecodeproject.com/csharp/IISWMI.asp
这里其实是使用 System.DirectoryServices。同时通过使用 反射 来避免上面必须 win2003 sp1 才可以使用的尴尬。
具体代码请看那个网页,我就不详细说了。我就是采用的这个。
第二个问题:当然,你可以给 WEB 的运行帐户非常高的权限来解决这个问题。
我们这里要说的不是这种不安全的,而是只给必要的权限。这就需要 身份模拟(Impersonation)了。有关在ASP.NET应用程序中使用身份模拟的文章请看以下文章:
http://www.microsoft.com/China/Community/program/originalarticles/TechDoc/impersonation.mspx或者你查 msdn 中 WindowsImpersonationContext 类的说明。
或是是 web.config 中 <identity impersonate="true" /> 这样一节的相关信息至于如何新设一个帐户,这个帐户只有对iis的IPDeny有读写权限。
汗颜,我也不会。我是用了一个更高权限的帐户。通过设置 Web.config 的 identity 节来实现的。
通过设置: impersonate="true" 
这样,用户身份的认证交给IIS来进行。
当允许匿名登录时,IIS将一个匿名登录使用的标识(缺省情况下是IUSR_MACHINENAME)交给ASP.NET应用程序。
当不允许匿名登录时,IIS将认证过的身份标识传递给ASP.NET应用程序。ASP.NET的具体访问权限由该账号的权限决定。
这时候我使用不允许匿名登录,然后使用一个非常高权限的帐户登录,就可以操作了。这方面的文章还可以参考:
http://www.microsoft.com/china/technet/security/guidance/secmod38.mspx