共用方式為


以角色為基礎的安全性技術範例

更新:2007 年 11 月

這個範例會示範如何使用以角色為基礎的安全性。伺服器應用程式會報告用戶端程式使用哪個使用者帳戶,以及這個帳戶的角色是否為管理員。

如需使用這些範例的詳細資訊,請參閱下列主題:

若要使用命令提示字元建置範例

  1. 開啟 [命令提示字元] 視窗,巡覽至 RoleBasedSecurity 目錄下的其中一個語言特定子目錄。

  2. 根據您選擇的程式設計語言,從其中一個語言特定子目錄中,輸入 msbuild RoleBasedSecurityCS.sln 或 msbuild RoleBasedSecurityVB.sln。

若要使用 Visual Studio 建置範例

  1. 開啟 [Windows 檔案總管],並巡覽至 RoleBasedSecurity 目錄下的其中一個語言特定子目錄。

  2. 根據您選擇的程式設計語言,按兩下 RoleBasedSecurityCS.sln 或 RoleBasedSecurityVB.sln,在 Visual Studio 中開啟這個檔案。

  3. 在 [建置] 功能表上,按一下 [建置方案]。

若要執行範例

  1. 使用命令提示字元或 Windows 檔案總管,巡覽至新建立的可執行檔的所在目錄。

  2. 在命令列中輸入 RBSecDemo.exe,或按兩下 RBSecDemo.exe 的圖示,在 [Windows 檔案總管] 開啟該檔。

  3. 按一下 [Display Logged On User] 按鈕。目前登入之使用者所使用的帳戶名稱,應該會出現在應用程式視窗中。接下來,按一下 [Is Caller in Demo Role?] 按鈕。「您目前為 RBSecurityDemoRole」訊息應該會隨即出現。

  4. 依序按一下 [開始]、[系統管理工具] 以及 [元件服務],啟動「元件服務」管理工具 (也稱為「COM+ 總管」)。展開 COM+ 總管左方窗格中的 Component Services\Computers\My Computer\COM+ Applications,找出 RBSecDemoSvr COM+ 應用程式。接下來,以滑鼠右鍵按一下 [RBSecDemoSvr] 應用程式,並選取 [Properties]。這樣會叫用應用程式的 [Properties] 對話方塊。按一下 [Security] 索引標籤。此處的資訊對應到 ApplicationAccessControlAttribute 所指定的設定。取消核取 [Enforce access checks for this application] 核取方塊。

    重要事項:

    這個動作會停用應用程式內所有元件的 COM+ 安全性。

    按一下 [確定],關閉 [Properties] 對話方塊。

  5. 返回 RBSecDemo 用戶端應用程式。按一下 [Display Logged On User]。「未知的呼叫端 (未啟用安全性)」訊息應該會隨即出現。按一下 [Is Caller In Demo Role?]。用戶端仍然報告使用者為 RBSecurityDemoRole,因為安全性停用後,所有對 IsCallerInRole 的呼叫都會傳回 true。

  6. 返回 COM+ 總管,以滑鼠右鍵按一下應用程式,然後選取 [Properties],再叫用一次 RBSecDemoSvr 屬性頁。按一下 [Security] 索引標籤,重新核取 [[Enforce access checks for this application] 核取方塊。這個應用程式的安全性就會再度啟用。按一下 [確定],關閉 [Properties] 對話方塊。

  7. 展開 [RBSecDemoSvr\Components],找出 Microsoft.Samples.Technologies.ComponentServices.RoleBasedSecurity.RBSecurityObject 元件。以滑鼠右鍵按一下 [Microsoft.Samples.Technologies.ComponentServices.RoleBasedSecurity.RBSecurityObject] 元件,再從快顯功能表中選取 [Properties]。

  8. 按一下 [Security] 索引標籤。這裡的 [Authorization] 設定對應到範例程式碼中所指定的 ComponentAccessControlAttribute。您應該會在與元件明確關聯的角色清單中看到 "RBSecurityDemoRole" 角色。這個角色是利用範例程式碼中之 SecurityRoleAttribute 建立並繫結到範例元件的。按一下 [確定],關閉 [Properties] 對話方塊。

  9. 在 COM+ 總管中,展開位於 RBSecDemoSvr 應用程式底下的 [Roles] 資料夾。在這裡應該會看到 RBSecurityDemoRole。展開 [RBSecurityDemoRole\Users]。[Users] 資料夾內應該只有一個帳戶 ("Everyone")。以滑鼠右鍵按一下 [Everyone],再從快顯功能表中選取 [Delete]。在接續的對話方塊中確認刪除動作。COM+ 會快取與角色相關的安全性設定,因此您必須先關閉 RBSecDemoSvr 應用程式,才能觀察到這個變更的結果。在 COM+ 總管中,以滑鼠右鍵按一下應用程式,然後從快顯功能表中選取 [Shut Down]。

  10. 返回 RBSecDemo 用戶端應用程式。無論按一下任何按鈕,顯示「拒絕存取」的 MessageBox 都會出現。由於 RBSecurityDemoRole 元件中並不含目前的呼叫端,建立物件時便會擲出「拒絕存取」的安全性例外狀況。

若要解除安裝範例

  1. 巡覽至您執行 MsBuild 工具的目錄,或在 Visual Studio 中啟動 .sln 檔案。

  2. 根據您選擇的程式設計語言,執行 msbuild RoleBasedSecurityVB.sln /t:Clean 或 msbuild RoleBasedSecurityVB.sln /t:Clean。這會使用 /u 參數呼叫 .NET 服務安裝工具 (Regsvcs.exe)全域組件快取工具 (Gacutil.exe),從 COM+ 類別目錄和全域組件快取中移除範例檔案。

需求

**平台:**Windows 2000、Windows XP、Windows Server 2003

**.NET Framework 版本:**2.0

備註

如需範例二進位碼之建立和註冊步驟的詳細資訊,請參閱原始程式碼中的註解。

範例應用程式所擷取的資訊包括:

  • COM+ 安全性是否啟用。

  • 目前呼叫端是否為範例所建立之某個安全性角色的成員。

  • 目前呼叫端的帳戶名稱。

在「元件服務」管理工具中,元件會以 Microsoft.Samples.Technologies.ComponentServices.RoleBasedSecurity.RBSecurityObject 的名稱出現。

注意事項:

在執行範例之前,您必須先執行全域組件快取工具 (Gacutil.exe),將 RBSecDemoSvr.dll 組件安裝至全域組件快取中。Gacutil.exe 位於 SDK\<version>\Bin 目錄中。例如,在 Visual Basic 版本中,請巡覽至 C:\Documents and Settings\Your User Name\My Documents\Samples\Technologies\ComponentServices\RoleBasedSecurity\VB\bin 目錄,然後輸入 gacutil -i RBSecDemoSvr.dll。

這個範例也會示範如何啟用應用程式或元件層級的安全性,以及如何利用屬性建立安全性角色。

注意事項:

   應用程式開發人員如果想為使用 COM+ 1.0 安全性服務的現有應用程式撰寫 Managed 擴充功能,則可以使用.NET 提供的 COM+ 安全性互通性 (Interoperability)。另外,.NET Framework 也提供了以角色為基礎的安全性。這兩種機制互相獨立,一個應用程式只能使用其中一種。

請參閱

參考

ApplicationAccessControlAttribute

ComponentAccessControlAttribute

ContextUtil

SecurityCallContext

SecurityRoleAttribute

ServicedComponent

System.ComponentModel

System.EnterpriseServices

其他資源

以角色為基礎的安全性