IIS服务中五种身份验证的灵活运用

作为微软最经典的Web服务之一的IIS服务有大致上五种Web身份认证方法。身份认证时保障IIS服务安全的根本,所以熟练并且灵活的掌握IIS服务身份认证方法是十分重要的。

一、匿名身份认证

如果启用了匿名访问,访问站点时,不要求提供经过身份认证的用户凭据。当需要让大家公开访问那些没有安全要求的信息时,使用此选项最合适。IIS 创建 IUSR_ComputerName 帐户(其中 ComputerName 是正在运行 IIS服务器的名称),用来在匿名用户请求 Web 内容时对他们进行身份认证。此帐户授予用户本地登录权限。用户可以将匿名用户访问重置为使用任何有效的 Windows 帐户。用户可以为不同的网站、虚拟目录、物理目录和文件建立不同的匿名帐户。如果基于 Windows Server 2003 的计算机是独立服务器,则 IUSR_ComputerName 帐户位于本地服务器上。如果该服务器是域控制器,则 IUSR_ComputerName 帐户是针对该域定义的。

二、基本身份认证

使用基本身份认证可限制对 NTFS 格式的 Web 服务器上文件的访问。使用基本身份认证,用户必须输入凭据,而且访问是基于用户 ID 的。用户 ID 和密码都以明文形式在网络间进行发送。要使用基本身份认证,请授予每个用户进行本地登录的权限,为了使管理更加容易,请将每个用户都添加到可以访问所需文件的组中。因为用户凭据是使用 Base64 编码技术编码的,但它们在通过网络传输时不经过加密,所以基本身份认证被认为是一种不安全的身份认证方式。

三、Windows 集成身份认证

Windows 集成身份认证比基本身份认证安全,而且在用户具有 Windows 域帐户的内部网环境中能很好地发挥作用。在集成 Windows 身份认证中,浏览器尝试使用当前用户在域登录过程中使用的凭据,如果此尝试失败,就会提示该用户输入用户名和密码。如果用户使用集成 Windows 身份认证,则用户的密码将不传送到服务器。如果用户作为域用户登录到本地计算机,则此用户在访问该域中的网络计算机时不必再次进行身份认证。集成身份认证以前称为 NTLM 或 Windows NT 质询/响应身份认证,此方法以 Kerberos 票证的形式通过网络向用户发送身份认证信息,并提供较高的安全级别。Windows 集成身份认证使用 Kerberos 版本 5 和 NTLM 身份认证。注意:如果选择了多个身份认证选项,IIS服务 会首先尝试协商最安全的方法,然后它按可用身份认证协议的列表向下逐个试用其他协议,直到找到客户端和服务器都支持的某种共有的身份认证协议。

四、摘要式身份认证

摘要式身份认证需要用户 ID 和密码,可提供中等的安全级别,如果用户要允许从公共网络访问安全信息,则可以使用这种方法。这种方法与基本身份认证提供的功能相同。摘要式身份认证克服了基本身份认证的许多缺点。在使用摘要式身份认证时,密码不是以明文形式发送的。另外,用户可以通过代理服务器使用摘要式身份认证。摘要式身份认证使用一种质询/响应机制(集成 Windows 身份认证使用的机制),其中的密码是以加密形式发送的。

要使用摘要式身份认证,必须满足下述要求:

用户和 IIS 服务器必须是同一个域的成员或被同一个域信任。

用户必须有一个存储在域控制器上 Active Directory 中的有效 Windows 用户帐户。

该域必须使用 Microsoft Windows 2000 或更高版本的域控制器。

必须将 IISSuba.dll 文件安装到域控制器上。此文件会在 Windows 2000 或 Windows Server 2003 的安装过程中自动复制。

必须将所有用户帐户配置为选择“使用可逆的加密保存密码”帐户选项。要选择此帐户选项,必须重置或重新输入密码。

五、Microsoft .NET Passport 身份认证

.NET Passport 身份认证提供了单一登录安全性,为用户提供对 Internet 上各种服务的访问权限。如果选择此选项,对 IIS服务 的请求必须在查询字符串或 Cookie 中包含有效的 .NET Passport 凭据。如果 IIS服务 不检测 .NET Passport 凭据,请求就会被重定向到 .NET Passport 登录页。并且,如果选择此选项,所有其他身份认证方法都将不可用。

解决SQL Server 连接时的一些基本问题后的若干初浅心得

学生做了一个题库系统,用C#写的ASP应用程序,数据库用SQL Server2000,交给我看看。放到服务器上后,出现问题。反复调整后发现了解决的方法,其实很简单。回过头去看了看,发现是自己对SQL Server的连接语句和用户权限的认识不足所造成的。下面将我的一些心得以及网上查到的有关资料汇集一下,以为后来者借鉴,当然很肤浅。

1、SQL Server的连接方式

以本地服务器(LocalHost),数据库(Northwind)为例,可以有以下一些连接方式
SqlConnection conn=new SqlConnection( “Server=LocalHost;Integrated Security=SSPI;Database=Northwind”);
SqlConnection conn = new SqlConnection(“Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=Northwind;”);
SqlConnection conn = new SqlConnection(” Data Source=LocalHost;Initial Catalog=Northwind;Integrated Security=SSPI;Persist Security Info=False;Workstation Id=XURUI;Packet Size=4096; “);
SqlConnection myConn = new SqlConnection(“Persist Security Info=False;Integrated Security=SSPI;Database=northwind;Server=LocalHost”);
SqlConnection conn = new SqlConnection(” Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900″);
心得:

a.Server和Database,Data Source和Initial Catalog配对使用的,可以互相替换(见笑)
b.Integrated Security默认值是False,此时需要提供Uid和Pwd,即将以Sql Server 用户身份登陆数据库;如果设置为True,Yes 或 SSPI,这不能出现Uid和Pwd,将以Windows用户省份登陆数据库。强烈推荐用后一种形式,安全性更高。
c.Integrated Security和Persist Security Info同时出现,后者设置为False,可保证信息安全。
更多字符串连接说明请看MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlConnectionClassConnectionStringTopic.asp

连接字符串的书写应该熟练后应该没有什么问题,我是再看别人的程序,说实话有些东东还真不清楚。但连接不上的问题出现后,得解决呀。所以必须要弄懂这些关键字的意义,修改后再测试。

2、SQL Server的用户设置
问题一、采用连接字符串
SqlConnection conn = new SqlConnection(” Uid=sa;Pwd=***;Initial Catalog=Northwind;Data Source=LocalHost;Connect Timeout=900″);
错误:
用户”sa”登陆失败,没有可信任的Sql Server连接
查资料后找到解决方法:
原因:Sql Server的验证方式需要设置为Sql Server验证和Windows集成验证的混合方式,如果仅设置为后一种方式,就会出像上述问题
解决:运行Sql Server的企业管理器,点击服务器,在右键菜单中选择属性,选安全性,更改验证方式即可
问题二、采用连接字符串
SqlConnection conn = new SqlConnection(“Data Source=LocalHost;Integrated Security=SSPI;Initial Catalog=Northwind;”);
错误:
用户”computername\IWAM_servername”登陆失败
原因:SQL Server的登陆用户中不包括IWAM_servername
解决方法:运行Sql Server的企业管理器,点击服务器,选安全性,选登陆,新建登陆中加入IWAM_servername,并配备相应的权限,如只能访问Northwind数据库,数据库的角色设置为public和db_owner。

3、关于连接的安全性

最好使用SSPI的集成安全方式连接数据库,而sa用户的方式连接会存在安全隐患,我认为主要是因为在安装SQL Server时,经常会为了访问的方便设置sa的密码为空,黑客一旦让sa成为管理员,就可以获得对系统的所有访问权限。所以为了数据库的安全,可以设置 SQL server的访问用户只能经过windows集成验证,设置sa的安全密码,加强数据库的安全性。当然设置为windows集成验证后,数据库的性能和访问的灵活性势必会受到影响,管理员可以针对每一个数据库设置不同的验证方式,而不必对SQL server设置成统一的方式。