共用方式為


COM+ 以角色為基礎的安全性和 .NET Framework

.NET Framework 提供可將 Managed 程式碼和 COM+ 安全性服務整合在一起的機制。這個功能必須倚賴 Windows NT 權杖關聯的執行程式碼,以做為識別的基礎。

以角色為基礎的安全性

以角色為基礎的安全性能讓您定義應用程式的角色,因此在元件、方法或介面層級的應用程式授權,即可依照這些角色中的成員關係進行。COM+ 和 .NET Framework 都允許您定義應用程式層級的角色。.NET Framework 和 COM+ 這兩個以角色為基礎的安全性機制是各自獨立的,在單一應用程式內只能使用一種機制。

COM+ 安全性必須倚賴 Windows NT 帳戶和處理序/執行緒模擬行為。如果 Managed 程式碼提供驗證服務,它必須先取得 Windows NT 安全性權杖並進行模擬行為,然後才能呼叫 COM 物件。

應用程式和元件存取控制

COM+ 可讓您在應用程式層級或類別層級啟用安全性。應用程式層級安全性是使用 ApplicationAccessControlAttribute 屬性設定,如以下範例程式碼所示。

[assembly: ApplicationAccessControl (AccessChecksLevel=AccessChecksLevelOption. ApplicationComponent)]

您可以使用 ApplicationApplicationComponent 屬性設定應用程式存取檢查的細微性。前者只允許應用程式層級的存取檢查。在元件、介面和方法層級都沒有存取檢查。如果呼叫者至少是應用程式中所定義角色之一的成員,則對物件、介面或方法的呼叫便會成功。後者會在每個層級啟用存取檢查。ApplicationComponent 是比較好用的方式,因為它指定了以角色為基礎的存取檢查要套用到元件、介面及方法層級。

使用 ApplicationComponent 屬性只會啟用元件層級的存取檢查。若要真正確定特定元件已執行存取檢查,您必須使用 ComponentAccessControlAttribute 屬性。

元件層級的安全性可以使用 ComponentAccessControlAttribute 屬性啟用。這個屬性可以套用到類別 (如以下範例程式碼所示)、介面或方法。

[ComponentAccessControl(true)]
public class CreditAccount : ServicedComponent
{
}

在設定元件安全性之前,您必須先啟用裝載此元件之應用程式的安全性。只有在您將 ApplicationAccessControlAttribute 屬性套用到組件,並將 ApplicationAccessControlAttribute 屬性設為 ApplicationComponent 之後,才會進行存取檢查。

啟用安全性控制的層級決定了呼叫者的角色成員資格接受檢查的時機。以下表格描述呼叫者角色成員資格如何依據應用程式安全性或元件安全性是否啟用而接受檢查。

應用程式安全性 元件安全性 檢查角色成員資格的時機

已啟用

已停用

在每次呼叫者存取應用程式時檢查角色成員資格。

已啟用

已啟用

除了應用程式層級存取檢查之外,還會為已啟用類別層級安全性的類別檢查其角色成員資格。元件層級設定啟用了類別、介面和方法層級上以角色為基礎的安全性。

已停用

已啟用/已停用

停用應用程式中所有類別的安全性。

將角色新增至應用程式

您可以將角色新增至應用程式,並使用 SecurityRoleAttribute 屬性將這些角色關聯到元件,如以下範例程式碼所示。

[SecurityRole("Teller", Description="Bank teller role")]
public class CreditAccount : ServicedComponent
{
}

這個屬性可讓您建立角色,並為應用程式、元件、介面或方法指派角色以符合成員資格需求。將這個屬性整個套用到組件,可以確保角色一定存在於 COM+ 目錄 (Catalog) 中。當您將這個屬性套用到元件時,它可以確保角色存在於應用程式組態中,並會將目標元件關聯到角色。

如果 SetEveryoneAccess 屬性設為 true,成員中便會新增 Everyone 角色。預設值為 false,表示沒有使用者指派給這個角色。您必須改用手動的方式設定。

組件、類別、方法和介面等層級都支援安全性角色。和其他方法屬性一樣 ,安全性組態目前還無法在介面定義和方法實作之間共用。

SecurityCallContext 類別可讓您存取 COM+ 安全性呼叫內容,它類似 Visual Basic 的 SecurityCallContext 物件,但不完全相同。您無法以程式設計方式建立新的執行個體,而必須透過 CurrentCall 屬性取得。剩餘的屬性將在以下表格中描述,這些屬性會呼叫 SecurityCallContext 物件的方法。

屬性 (Property) 備註

Callers

從 COM+ 的 SecurityCallContext 物件擷取 Callers 項目,並將此項目傳回為 SecurityCallers 物件。

CurrentCall

傳回與目前呼叫關聯之 SecurityCallContext 物件的參考。

DirectCaller

從 COM+ 的 SecurityCallContext 物件擷取 DirectCaller 項目,並將此項目傳回為 SecurityIdentity 物件。

MinAuthenticationLevel

從 COM+ 的 SecurityCallContext 物件擷取 MinAuthenticationLevel 項目。

NumCallers

從 COM+ 的 SecurityCallContext 物件擷取 NumCallers 項目。

OriginalCaller

從 COM+ 的 SecurityCallContext 物件擷取 OriginalCaller 項目,並將此項目傳回為 SecurityIdentity 物件。

請參閱

參考

SecurityRoleAttribute
System.EnterpriseServices

概念

可用 COM+ 服務摘要

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.