[修練營ASP.NET]透過COM+來變身(切換身分)執行

上一篇修練營文章【[修練營ASP.NET]淺談多層式架構 (Multi Tiers)】裡面,講到系統分層架構的時候,小喵提到COM+這個撰寫的方式。這一篇就來針對COM+作進一步的介紹如何讓ASP.NET透過呼叫COM+,變身為另一個身分執行COM+程式。

電視或電影中,很多XX超人、XX戰隊,如果要展現出超人能力時,總是會來個變身。這麼神奇,換個服裝,能力就大大的不同了。著名的卡通七龍珠,悟空也是變身為超級賽亞人後,打倒弗力沙。變身這個名詞,代表著能力的提升與身分的切換。這篇裡面,要講的,跟這個很像,讓ASP.NET運作的時候,來個【超級變身】,提升它的能力。

緣起

上一篇修練營文章【[修練營ASP.NET]淺談多層式架構 (Multi Tiers)】裡面,講到系統分層架構的時候,小喵提到COM+這個撰寫的方式。這一篇就來針對COM+作進一步的介紹如何讓ASP.NET透過呼叫COM+,變身為另一個身分執行COM+程式。

電視或電影中,很多XX超人、XX戰隊,如果要展現出超人能力時,總是會來個變身。這麼神奇,換個服裝,能力就大大的不同了。著名的卡通七龍珠,悟空也是變身為超級賽亞人後,打倒弗力沙。變身這個名詞,代表著能力的提升與身分的切換。這篇裡面,要講的,跟這個很像,讓ASP.NET運作的時候,來個【超級變身】,提升它的能力。

 

承先

說起COM+,小喵之前有幾篇文章已經提過一些東西,這次的修練營就不再重複,請大家先閱讀以下這幾篇

 

安全起見

其實COM+很重要的一個功能就是能夠切換不同的身分來執行COM+元件。原本的IIS所使用的IUSER帳號,或者ASP.NET使用的NET Service或者ASP.NET的帳號,為了安全起見,不能讓這些身分有太多的能力,包含一些資料夾的存取、資料庫的存取等。但是我們的程式又需要去存取主機內某些資料夾,或者需要存取資料庫。此時,可能會把這些資料夾,授權給那些不該有太多權限的帳號可以存取,也可能直接把資料庫,透過這些帳號去存取。但是這樣把這些帳號的權力放大,對於安全上,並不是一個好的現象。

 

COM+變身

COM+可以設定Package使用指定的帳號來運作。設定過後,該Package裡面的所有Class都將使用Package上所設定的帳號(例如:topcat這個帳號)來執行。

例如:假設我們希望程式可以存取某個檔案系統中的資料夾,為了安全起見,我們將資料夾設定為非分享、非Web分享。因此如果想透過IUSER或者NET Service或者ASP.NET帳號想存取這個資料夾,是會被拒絕的。我們可以在作業系統中建立某個特別的帳號(例如topcat),然後設定該Package使用topcat這個帳號運作。此Package中的所有權限就會透過topcat這個身分來執行。因為我們要存取的資料夾有授權給tocpat,因此我們的系統可以藉由COM+的程式,來存取這個資料夾。

在例如:假設我們需要存取某個資料庫的資料,一般我們可能會把這個資料庫的dbo的帳號設定在Connection String裡面,然後透過這個帳號去存取。不過其實dbo的帳號有點過大,因為它還可以建立資料表、可以修改資料表。但是程式的運作一般只需要select, insert, update, delete這些權限就夠了。我們可以將資料庫的使用者加入我們剛剛建立的topcat這個使用者。然後授權給topcat可以select, insert, update, delete的權限。這樣ASP.NET就可以需要存取資料庫的時候,透過COM+切換身分來存取資料庫。

 

COM+變身設定

當COM+撰寫好,並註冊在元件服務裡面後,可以看到Package在元件服務中。我們可以在該Package上按右鍵→內容,看到如下的畫面。

CP001

切換到【識別碼】的頁籤,預設是使用【系統帳戶】→【互動使用者。目前登入的使用者】。這是指該主機目前所登入的帳號。如果該主機開機後沒有登入,將會沒有身分。

要改為指定的使用者,可以點選【使用下列使用者】,然後輸入該使用者的帳號密碼,如下圖所示。

CP002

之後按下確定。那麼該Package裡面的程式將透過您所設定的使用者身分來運作。當主機重新開機後,即使還沒有登入系統,只要呼叫到該Package裡面的元件,也會直接透過您所設定的元件來運作。

 

結論

當我們要透過程式來啟動某些特別的程式、或者存取某些資料夾檔案、甚至存取資料庫。透過COM+的身分切換的功能,可以讓我們輕鬆的就可以將執行身分切換好。而且,切換完身分後,能做的就是我們程式所撰寫的功能。因此可以提高我們程式的運作能力,又能夠避免開放IUSER, ASP.NET, NET SERVICE這些帳號的權限造成漏洞。這是COM+的好處之一,提供大家參考。

 


以下是簽名:


Microsoft MVP
Visual Studio and Development Technologies
(2005~2019/6) 
topcat
Blog:http://www.dotblogs.com.tw/topcat