2012-02-09 1 views
0

Help!このコードで何が問題になっていますか?ロールベースのセキュリティを使用してDLLを保護する必要があるWindowsフォームアプリケーションがあります。 "MyRole"内の誰かだけがこのアセンブリへの呼び出しを行うことができます。DLLのロールベースセキュリティ

現在のプリンシパルを設定するのに2つの異なる方法を試しましたが、「プリンシパルアクセス許可に失敗しました」というメッセージが表示されます。

ここに問題を示す小さなコンソールアプリがあります。前もって感謝します!

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が使用され、そのプリンシパルのロールはユーザーのWindows /ドメイングループに対応します(おそらく "MyRole"は含まれません)。ターゲットロールのプリンシパルを使用してこれをテストする方法がわからない場合は、SetPrincipalPolicyの代わりに次のようにしてください:

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