Udostępnij za pośrednictwem


Zezwalanie na częściowo zaufane wywoływania

Udostępnianie biblioteki kodu jest zwykłego scenariusza z integracją (CLR) w czasie wykonywania języka wspólnego, gdy wirtualny plik dziennika zawierający typ zdefiniowany przez użytkownika, procedura przechowywana, funkcja zdefiniowanej przez użytkownika, zdefiniowane przez użytkownika funkcja agregacja, wyzwalacza lub klasy narzędzie często uzyskują innego wirtualny plik dziennika lub aplikacji.Biblioteki kodu, które mają być współużytkowane przez wiele aplikacji muszą być podpisane przy użyciu silnej nazwy.

Tylko aplikacje, które są w pełni zaufane przez system zabezpieczeń środowiska wykonawczego kodu dostępu będą mogli uzyskać dostęp do wirtualny plik dziennika udostępnionych kod zarządzany, który nie jest jawnie oznaczony atrybutem System.Security.AllowPartiallyTrustedCallers atrybut. (Taki, który jest zarejestrowany w zestawie częściowo zaufanych SQL Server z SAFE lub EXTERNAL_ACCESS wirtualny plik dziennika uprawnień), próbuje uzyskać dostęp do silnej nazwy zarejestrowany wirtualny plik dziennika bez powoduje, że ten atrybut System.Security.SecurityException Aby wyjątek. Zostanie wyświetlony komunikat o błędzie jest podobny do następującego:

Msg 6522, Level 16, State 1, Procedure usp_RSTest, Line 0
A .NET Framework error occurred during execution of user defined
routine or aggregate 'usp_RSTest':  System.Security.SecurityException: That assembly does not allow partially trusted callers.
System.Security.SecurityException: at
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(
Assembly asm, PermissionSet granted,PermissionSet refused,
RuntimeMethodHandle rmh, SecurityAction action, Object demand,
IPermission permThatFailed) at
Microsoft.Samples.SqlServer.TestResultSet.Test()

Zaleca się, że wszystkie zespoły zarejestrowane w SQL Server, z wyjątkiem tych zestawów dodawane do Global wirtualny plik dziennika Cache, być oznaczone AllowPartiallyTrustedCallers atrybut, dzięki czemu zestawów ładowanych przez SQL Server dostęp można uzyskać sobie nawzajem. Zestawy, które mają być dodawane do Global wirtualny plik dziennika Cache dokładnie należałoby dla bezpieczeństwa przed dodaniem AllowPartiallyTrustedCallers atrybut, jak wirtualny plik dziennika przestaną być dostępne na częściowo zaufane obiekty wywołujące z kontekstów nieoczekiwany. wirtualny plik dziennika nie zostanie wykonane całkowicie zaufanych (zarejestrowany UNSAFE uprawnienia ustawione w SQL Server).

Aby uzyskać więcej informacji zobacz sekcję "Przy użyciu biblioteki z częściowo zaufany kod" w pakiet SDK systemu .NET Framework.

Przykład

Załóżmy, że istnieje klasa narzędzia, która może być przydatne dla wielu aplikacji integracja CLR po stronie serwera.Na przykład może to być klasy, która reprezentuje wyniki wywoływania kwerendy.Aby włączyć udostępnianie tego składnika, do tej klasy narzędzie znajduje się w osobny wirtualny plik dziennika.Następnie ten wirtualny plik dziennika jest używany z różnych zestawów zawierających obiekty integracja środowiska CLR.Ponieważ tej klasy narzędzie jest używane w wielu aplikacjach inny serwer, jest ona przejrzane dokładnie i rozwiązuje problemy z zabezpieczeniami.The AllowPartiallyTrustedCallers atrybut is then applied to the wirtualny plik dziennika that contains the utility class, so that CLR integracja objects contained in assemblies marked with SAFE or EXTERNAL_ACCESS permission sets can use the utility class and methods, even though they are in a separate wirtualny plik dziennika. Aby zapoznać się z jak AllowPartiallyTrustedCallers atrybut jest używany, zobacz temat Result Set Sample.