다음을 통해 공유


명령적 보안

명령적 보안 구문은 호출할 권한 개체의 새 인스턴스를 만들어 보안 호출을 수행합니다. 명령적 구문을 사용하여 요청과 재정의는 수행할 수 있지만, 요구는 수행할 수 없습니다.

보안 호출을 하기 전에 필요한 특정 형태의 권한을 나타내도록 권한 개체의 상태 데이터를 초기화해야 합니다. 예를 들어, FileIOPermission 개체를 만들 때 생성자를 사용하여 모든 파일에 대한 제한 없는 액세스나 액세스 없음을 나타내도록 FileIOPermission 개체를 초기화할 수 있습니다. 또는, 다른 FileIOPermission 개체를 사용하여 개체가 나타낼(예: 읽기, 추가, 쓰기) 액세스 형식이나 개체가 보호할 파일을 나타내는 매개 변수를 전달할 수 있습니다.

명령적 보안 구문을 사용하여 하나의 보안 개체를 호출할 수도 있지만 권한 집합이라는 권한 그룹을 초기화할 수도 있습니다. 예를 들어, 이 기법은 하나의 메서드에서 여러 개의 권한에 대한 assert 호출을 안전하게 수행하는 유일한 방법입니다. PermissionSetNamedPermissionSet 클래스를 사용하여 권한 그룹을 만든 다음 적절한 메서드를 호출하여 원하는 보안 호출을 합니다.

명령적 구문을 사용하여 요청과 재정의는 수행할 수 있지만, 요구는 수행할 수 없습니다. 권한 상태를 초기화할 때 필요한 정보를 런타임에만 알 수 있는 경우에는 선언적 구문 대신 명령적 구문을 사용하여 요청 및 재정의를 수행할 수 있습니다. 예를 들어, 호출자가 특정 파일을 읽을 수 있는 권한이 있는지 확인하고 싶지만 읽을 파일 이름을 런타임 이전에는 알 수 없는 경우에 명령적 요청을 사용할 수 있습니다. 조건이 유지되는지 런타임에 판단해서 테스트 결과에 따라 보안 요청을 하거나 하지 않아야 할 경우에도 선언적 검사 대신 명령적 검사를 사용할 수 있습니다.

다음 코드 단편은 코드 호출자가 MyPermission이라는 사용자 지정 권한을 갖도록 요청하는 명령적 구문을 보여 줍니다. 이 권한은 가상의 사용자 지정 권한이므로 .NET Framework에는 없습니다. MyPermision의 새 인스턴스는 MyMethod에 생성되며, 보안 호출을 사용하여 이 메서드만 보호합니다.

Public Class MyClass1
   
   Public Sub New()

   End Sub
   
   Public Sub MyMethod()
      'MyPermission is demanded using imperative syntax.
      Dim Perm As New MyPermission()
      Perm.Demand()
      'This method is protected by the security call.
   End Sub
   
   Public Sub YourMethod()
      'YourMethod 'This method is not protected by the security call.
   End Sub
End Class
public class MyClass {
   public MyClass(){
    
   }

   public void MyMethod() {
       //MyPermission is demanded using imperative syntax.
       MyPermission Perm = new MyPermission();
       Perm.Demand();
       //This method is protected by the security call.
   }

   public void YourMethod() {
       //This method is not protected by the security call.
   }
}

참고 항목

참조

FileIOPermission

SystemSecurityPermissionSet 클래스

NamedPermissionSet

개념

보안 구문

코드 액세스 보안

명명된 권한 집합

Assert 메서드 사용