2012-02-09 2 views
0

Help! 이 코드의 문제점은 무엇입니까? 역할 기반 보안을 사용하여 DLL을 보호해야하는 Windows Forms 앱이 있습니다. "MyRole"의 누군가 만이 어셈블리를 호출 할 수 있습니다.DLL의 역할 기반 보안

현재 주체 설정에 두 가지 방법을 시도했지만 "주체 권한 요청에 실패했습니다."라는 메시지가 나타납니다.

다음은이 문제를 보여주는 작은 콘솔 앱입니다. 미리 감사드립니다!

Imports System.Security 

Module Module1 

    Sub Main() 

     Try 
      AppDomain.CurrentDomain.SetPrincipalPolicy(Principal.PrincipalPolicy.WindowsPrincipal) 

      'Dim oCurrPrincipal As New Principal.WindowsPrincipal(Principal.WindowsIdentity.GetCurrent()) 
      'Threading.Thread.CurrentPrincipal = oCurrPrincipal 

      Dim oWriter As New Writer 
      oWriter.WriteLog("It seems so simple, why doesn't it work?") 

     Catch ex As Exception 
      Console.WriteLine(ex.ToString) 
     Finally 
      Console.ReadLine() 
     End Try 

    End Sub 

End Module 

Imports System.Security.Permissions 
Imports System.Security 

<PrincipalPermission(SecurityAction.Demand, Role:="MyRole")> _ 
Public Class Writer 

    Public Overloads Sub WriteLog(ByVal sMessage As String) 
     Console.WriteLine(sMessage) 
    End Sub 

End Class 

답변

0

MyRole 역할에 actully 인 교장을 사용해 보셨습니까? 현재 코드로 인해 WindowsPrincipal이 사용되며 해당 주체의 역할은 "MyRole"을 포함하지 않는 사용자의 Windows/도메인 그룹에 해당합니다. 대상 역할의 주체를 사용하여이 테스트하는 방법을 잘 모르는 경우, 당신의 SetPrincipalPolicy 전화 대신 다음과 같은 시도 :

AppDomain.CurrentDomain.SetThreadPrincipal(New GenericPrincipal(New GenericIdentity("somebody"), New String() { "MyRole" }))