艾銻知識 |關(guān)于網(wǎng)站應(yīng)用程序池的帳號密碼更改及其影響的實(shí)例分析
2020-03-02 22:14 作者:admin 瀏覽量:
凝心聚力,決戰(zhàn)當(dāng)下,讓三月成為值得記念的日子
如果二月份因?yàn)橐咔樵诩?,你沒有體驗(yàn)到春風(fēng)似剪刀的感覺。
那三月份很快就要來了,你會迎著小雨一邊走一邊唱著歌嗎?
在二月里你是怎樣度過的?你的企業(yè)復(fù)工了嗎?
這一個(gè)月留在你生命中有哪些難忘的記憶呢?
從二月三號開始,艾銻無限小伙伴就進(jìn)入了自己的工作狀態(tài):
有的人因?yàn)榉獬且恢痹诩疫h(yuǎn)程為客戶提供服務(wù),
有的人回到北京被隔離14天在自己住的地方給客戶提供服務(wù),
有的人春節(jié)只休了7天假期就早早回到了北京,
有的人從未離開過北京人,所以他們才能在二月工作26天。
每一種選擇都是選擇,每一種人生都是人生。
我們期望回首2020年的時(shí)候,可以自豪的對自己說,
生命中的每一天,都是最好的一天,
感恩所有人,感恩一切的發(fā)生,感恩逝去的那些日子.
三月是一個(gè)全新的開始,送上一篇可以幫你解決技術(shù)難題的文章,讓你更好的投入全新的工作狀態(tài):
艾銻知識 |關(guān)于網(wǎng)站應(yīng)用程序池的帳號密碼更改及其影響的實(shí)例分析
實(shí)例場景
· 我們有一個(gè)網(wǎng)站(名稱為test),它使用了一個(gè)應(yīng)用程序池(名稱也為test)
· 這個(gè)應(yīng)用程序池所使用的用戶帳號為app_pool_test
· 這個(gè)帳號當(dāng)前的密碼,假設(shè)為 abc 。當(dāng)我設(shè)置好之后,我可以正常打開網(wǎng)站
這個(gè)演示頁面的功能很簡單,我是使用下面的代碼去訪問了一下數(shù)據(jù)庫
復(fù)制代碼 代碼如下:
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。這通常稱為“信任連接”或者“集成驗(yàn)證”。這個(gè)問題,我下面還會解釋。
大家可以看到,網(wǎng)站能正常工作。功能沒有什么了不起的,這是一個(gè)簡單的演示而已。但是下面大家思考一個(gè)問題:
假設(shè)app_pool_test 這個(gè)帳號的密碼因?yàn)槭裁丛蛐枰薷模ㄟ@個(gè)很正常,很多公司都有密碼修改策略的),那么
1.網(wǎng)站還是否能正常打開?
2.數(shù)據(jù)庫還是否能訪問?
我這里就做一個(gè)測試,我現(xiàn)在將帳號的密碼修改掉
奇怪的是,我們會發(fā)現(xiàn)網(wǎng)站照樣能打開,數(shù)據(jù)庫居然也照樣能訪問得上。
首先,這里你應(yīng)該會有一個(gè)疑問:這是為什么呢?難道改了密碼沒有生效嗎?到底什么時(shí)候會生效呢?
我們接下去做實(shí)驗(yàn)。假使當(dāng)前這個(gè)服務(wù)器,因?yàn)槟撤N原因(例如安裝補(bǔ)丁包),需要重新啟動?;蛘吣阕约阂?yàn)槟硞€(gè)原因,需要對IIS進(jìn)行重啟,例如執(zhí)行了下面的命令
然后,我們再次嘗試打開剛才那個(gè)網(wǎng)頁,就會發(fā)現(xiàn)如下的錯(cuò)誤
一般而言,503錯(cuò)誤都是表示后臺的Application Pool存在問題,我們到IIS中查看,確實(shí)發(fā)現(xiàn)它被停止了
而且你還會發(fā)現(xiàn),無論你如何啟動,只要頁面刷新一下,它就又停止了。
除非,你再次在它這里將正確的用戶名和密碼設(shè)置一次。
然后,你會發(fā)現(xiàn)網(wǎng)站能正常工作了
我希望你看懂了我想要描述的一個(gè)問題:
當(dāng)網(wǎng)站的應(yīng)用程序池帳號密碼被修改之后,將如何影響到當(dāng)前的網(wǎng)站。
先將結(jié)論給大家說一下
1. 如果當(dāng)前的網(wǎng)站,沒有被重置。我測試下來是,只要IIS沒有被重啟過,或者應(yīng)用程序池沒有被停止過,就可以繼續(xù)使用。
2. 否則,當(dāng)前網(wǎng)站會無法正常工作,而且應(yīng)用程序池再也無法啟動,除非設(shè)置正確的密碼。
那么,這是為什么呢?
1. IIS啟動的時(shí)候,默認(rèn)會啟動所有的應(yīng)用程序池,并且使用它們的標(biāo)識和密碼,去請求windows系統(tǒng)(可能是本機(jī),也可能是AD)進(jìn)行認(rèn)證
2. 只要認(rèn)證通過了,那么應(yīng)用程序池將啟動,而且這個(gè)身份會被緩存起來。
3. 一般的應(yīng)用程序,要訪問后臺數(shù)據(jù)庫的時(shí)候,如果選擇了“集成驗(yàn)證(integrated security=true)”這種方式的話,那么就是使用應(yīng)用程序池的這個(gè)身份。
4. “集成驗(yàn)證”有時(shí)候也稱為信任連接,這是什么意思呢?就是說SQL Server其實(shí)不再對帳號和密碼進(jìn)行驗(yàn)證,它“信任”windows傳遞過來的身份,也就是說,只要上面的第2步通過了,確實(shí)帳號是app_pool_test,那么SQL Server就認(rèn)為它是app_pool_test,而不再重復(fù)驗(yàn)證密碼。
5. 當(dāng)IIS被重啟,或者應(yīng)用程序池被重啟,此時(shí)就需要再次驗(yàn)證身份。而如果此時(shí)發(fā)現(xiàn)密碼不匹配了,就自然無法啟動應(yīng)用程序池,然后也自然無法啟動網(wǎng)站,然后也不會發(fā)生訪問數(shù)據(jù)庫的行為。