基本上,我开始研究这个问题是因为我厌倦了仅仅选择像 NETWORKSERVICE 这样的东西来让事情在我们的网络中奇迹般地工作,并且想了解更多实际发生的事情。我打开了一罐蠕虫,现在我真的想尽我所能解决这个问题,而不想用我愚蠢的新手问题来打扰我的网络管理员。显然,这能让我得到最好的答案,但在我去了解整个故事之前,我希望你们能先帮助我尽可能地了解我们的环境。
基本上,我们有大约 30 台 PC,全部使用 Windows 7,并且都在同一个网络上。我们没有使用 Active Directory,而且显然这不是一个选项(内部历史/政治原因...)当我打开“我的电脑”并点击“网络”时,我可以看到它们全部。
为了双击一台 PC 并查看其共享内容,我必须... 1) 转到该 PC 并在该 PC 上创建一个用户帐户,该帐户的名称和密码与我在 PC 上使用的帐户相同,或者 2) 以管理员身份登录。
为了方便起见,在我们最需要访问的系统上,我们手动进入并为每台机器上的每个人创建了单独的用户帐户,使用与他们的主工作站 PC 相同的用户名。
现在,我需要完全理解我们设置的这个系统,是因为我需要知道这种网络系统如何与运行在 IIS 7.0 Web 服务器(由 SQL Server 2008 R2 支持)上的内部 ASP.NET 站点一起工作。由于我们所有的计算机都有一个通用管理员帐户,因此只需将管理员身份模拟到 web.config 文件中并完成一天的工作就很容易了,但我真的不想这样做 --- 我想要“正确”地做到这一点,我想要“安全地”做到这一点,我想要尽可能少地向每个用户授予权限。
这是否意味着我必须创建 Windows 身份验证登录每个人在我们的 SQL Server 和 Web 服务器上?网站本身应该永远是只读的,所以我想我可以在 Web 服务器机器上创建一个新的用户帐户,将对除网站之外的所有内容的访问限制为只读,然后在 web.config 文件中模拟该用户。但是对于某些人群来说,SQL 数据库应该是只读的,对于某些人群来说,他们也应该具有写入权限,但任何人都不应该具有删除权限。
我自己很难研究这个问题的原因是,显然我们一开始就不是以“正确”的方式进行研究。我读到的每一本关于 Windows 网络的书要么谈论小型家庭网络,要么直接跳到企业和大型网络的 Active Directory。
答案1
Microsoft 针对不同计算机之间共享凭据的解决方案是使用 Active Directory 域。Active Directory 使用 Kerberos 身份验证协议从中央身份验证数据库仲裁对分布在不同计算机上的资源的访问。
您在个人计算机上创建用户帐户的做法俗称“穷人的信任关系”。通过创建这些“镜像”用户“主”计算机上使用的凭据的帐户,您创建了一些东西,虽然它不是非常可扩展或易于管理(坦率地说,也不是很安全),但它将为您提供与交互式用户使用的 Active Directory 域类似的功能。但是,对于“传递”(也称为“委托”)身份验证,例如您的 Web 应用程序和后端 SQL Server,您不能仅创建“镜像”帐户来获得所需的功能。
在我看来,如果没有 Active Directory,那么让不同组的用户通过 Web 应用程序对 SQL Server 进行不同的身份验证的唯一选择就是在 Web 应用程序内部存储不同 SQL Server 用户的凭据,并使用适当的凭据根据谁对 Web 服务器进行了身份验证来访问 SQL Server。