关于网站应用程序池的帐号密码更改及其影响的实例分析

实例场景


  1. 我们有一个网站(名称为test),它使用了一个应用程序池(名称也为test)

  1. 这个应用程序池所使用的用户帐号为app_pool_test

  1. 这个帐号当前的密码,假设为 abc 。当我设置好之后,我可以正常打开网站

这个演示页面的功能很简单,我是使用下面的代码去访问了一下数据库


代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
namespace WebApplication1
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using(var conn = new SqlConnection("server=(local)\\sqlexpress;database=northwind;integrated security=true"))
{
conn.Open();
Response.Write(conn.State.ToString());
}
}
}
}

请注意,这里我并没有指定用户名和密码,而是使用了integrated security=true。这通常称为“信任连接”或者“集成验证”。这个问题,我下面还会解释。

大家可以看到,网站能正常工作。功能没有什么了不起的,这是一个简单的演示而已。但是下面大家思考一个问题:

假设app_pool_test 这个帐号的密码因为什么原因需要修改(这个很正常,很多公司都有密码修改策略的),那么

1.网站还是否能正常打开?

2.数据库还是否能访问?

我这里就做一个测试,我现在将帐号的密码修改掉

奇怪的是,我们会发现网站照样能打开,数据库居然也照样能访问得上。

首先,这里你应该会有一个疑问:这是为什么呢?难道改了密码没有生效吗?到底什么时候会生效呢?

我们接下去做实验。假使当前这个服务器,因为某种原因(例如安装补丁包),需要重新启动。或者你自己因为某个原因,需要对IIS进行重启,例如执行了下面的命令

然后,我们再次尝试打开刚才那个网页,就会发现如下的错误

一般而言,503错误都是表示后台的Application Pool存在问题,我们到IIS中查看,确实发现它被停止了

而且你还会发现,无论你如何启动,只要页面刷新一下,它就又停止了。

除非,你再次在它这里将正确的用户名和密码设置一次。

然后,你会发现网站能正常工作了

我希望你看懂了我想要描述的一个问题:当网站的应用程序池帐号密码被修改之后,将如何影响到当前的网站。

先将结论给大家说一下

1. 如果当前的网站,没有被重置。我测试下来是,只要IIS没有被重启过,或者应用程序池没有被停止过,就可以继续使用。

2. 否则,当前网站会无法正常工作,而且应用程序池再也无法启动,除非设置正确的密码。

那么,这是为什么呢?

1. IIS启动的时候,默认会启动所有的应用程序池,并且使用它们的标识和密码,去请求windows系统(可能是本机,也可能是AD)进行认证

2. 只要认证通过了,那么应用程序池将启动,而且这个身份会被缓存起来。

3. 一般的应用程序,要访问后台数据库的时候,如果选择了“集成验证(integrated security=true)”这种方式的话,那么就是使用应用程序池的这个身份。

4. “集成验证”有时候也称为信任连接,这是什么意思呢?就是说SQL Server其实不再对帐号和密码进行验证,它“信任”windows传递过来的身份,也就是说,只要上面的第2步通过了,确实帐号是app_pool_test,那么SQL Server就认为它是app_pool_test,而不再重复验证密码。

5. 当IIS被重启,或者应用程序池被重启,此时就需要再次验证身份。而如果此时发现密码不匹配了,就自然无法启动应用程序池,然后也自然无法启动网站,然后也不会发生访问数据库的行为。

总结


在做应用程序部署的时候,你会遇到很多复杂甚至棘手的情况,这篇文章就描述了其中一种常见的状况:

应用程序池的帐号密码修改之后(其实,很多时候,作为开发人员的角度,你可能不知道密码已经被修改了),所以你可能会发现一些“诡异”的现象,例如刚刚还能正常使用的程序,突然又不能使用了。理解本文,将有助于你解释这样的状况,以及了解如何解决。

(0)

相关推荐

  • 关于网站应用程序池的帐号密码更改及其影响的实例分析

    实例场景 我们有一个网站(名称为test),它使用了一个应用程序池(名称也为test) 这个应用程序池所使用的用户帐号为app_pool_test 这个帐号当前的密码,假设为 abc .当我设置好之后,我可以正常打开网站 这个演示页面的功能很简单,我是使用下面的代码去访问了一下数据库 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste

  • jQuery实现的记住帐号密码功能完整示例

    本文实例讲述了jQuery实现的记住帐号密码功能.分享给大家供大家参考,具体如下: 记住密码是每个有帐号登录的网站必备的,现在说一下通过COOKIE实现的记住密码功能. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>COOKIE</title> </head> <body> <script type="

  • c# 使用特定帐号密码访问Windows网路共享

    透过程式存取Windows网路分享的档案也算常见需求,但存取身分是个问题.之前我惯用的技巧是用有权限的AD网域帐号执行排程存取网路分享,但这招要搬进网站或遇到不同网路分享用不同帐号便会破功.最近遇上类似议题,直觉要得回头靠WinAPI Impersonation解决,之前曾写过通用元件,担心11年前Windows Vista/7时代的作品有点过时,就爬文找找更好的做法. 之前的变身做法是改变Thread的执行身分,然而针对网路分享还有另一个WinAPI - WNetAddConnection2,

  • 利用SQL SERVER建立登录WINDOWS帐号

    那一刻,我的心跳到了嗓子眼. 运行建立帐号命令,OK! 远程登录,输入帐号,密码,OK!终于又进去了! ××××××××××××××××××× 我忽然发现,数据库服务器登录不了了. 提示帐号密码过期.按提示修改,提交,又说我没权限修改密码! CNM,这样来害我.这个帐号属于administrators,原先那个默认的administrator被我停掉了.因此这个帐号是进入系统的唯一通道. 接着发现后果比我想象的要严重更多: 1.硬盘做了RAID5,这样即使拿到硬盘,可能也读不出数据库文件了. 2

  • 如何通过ASP管理NT帐号

    '============================================================= '       感谢您使用ASP001工作室开发的实用函数程序 '               HTTP://WWW.ASP001.NET '=============================================================     'ASP001工作室为您提供订制程序开发.企业互联网拓展服务 'QQ:1974229 'E-Mail

  • .Net微信网页开发解决用户在不同公众号或在公众号、移动应用之间帐号统一问题

    开发背景: 最近一段时间一直在做关于微信方面的网站应用开发,这段时间也收获的不少关于微信开发方面的开发技能,接触的比较多的主要有微信公众号和微信网站app第三方登录授权,以及微信会员卡,优惠券和扫描二位码的功能,今天我主要想要总结的是微信公众号登录和网站app第三方应用微信授权登录这两者之间获取到的Openid关联问题,实现两边登录都是同一个账号. 首先我们必须区别开来微信公众平台开发是指微信公众号进行业务开发(https://mp.weixin.qq.com/wiki?t=resource/r

  • Java使用新浪微博API通过账号密码方式登陆微博的实例

    今天下了个新浪微博的API研究研究,目前实现了发布微博功能,包括带图片的微博.为了安全,新浪微博的API中并没有提供用微博帐号密码登录的功能,而是采用OAuth授权,用户通过浏览器访问新浪网站登录,登录成功后,浏览器再返回key和secret给程序. main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.an

  • NtGodMode.exe任意密码登录windows系统帐号下载

    作者:golds7n[LAG] 大小:9216 Bytes MD5 :7026217dc72aa564a2834995d7a7b017 来源:安全焦点 --------– NtGod Private Powered By golds7n[LAG] --------– Usage: NtGodMode.exe ON|OFF NTGod NT上帝模式,打开上帝模式可以用任意密码登录任意windows系统帐号,从而达到不增加帐号.不破坏被入侵主机系统的情况下,登录系统帐号. 情 景再现: 当你在进行主

  • js读写COOKIE实现记住帐号或密码的代码(js读写COOKIE)

    js COOKIE 记住帐号或密码 function onLoginLoaded() { if(isPostBack == "False") { GetLastUser(); } } function GetLastUser() { var id = "49BAC005-7D5B-4231-8CEA-16939BEACD67"; var usr = GetCookie(id); if(usr != null) { document.getElementById('t

  • 易语言SMTP验证帐号、密码教程

    易语言通过SMTP验证帐号.密码 1.打开易语言>>>>新建一个窗口程序打开易语言>>>>新建一个窗口程序 2.一次添加两个标签.两个编辑框.一个按钮 3.用到的两个编辑框,一个作为帐号编辑框,一个作为密码编辑框.用到的两个编辑框,一个作为帐号编辑框,一个作为密码编辑框. 4.输入代码: .版本 2 .支持库 internet .程序集 窗口程序集1 .子程序 _按钮1_被单击 .判断开始 (连接发信服务器 ("smtp.163.com"

随机推荐