1

ユーザーがロールのメンバーであることを確認するために、PrincipalPermission クラスを使用する vb.net 3.5 アプリケーションがあります。このコードは、Active Directory ドメインの一部のグループでは機能しますが、他のグループでは機能しません。最初はスペースが問題だと思っていましたが、「Domain Users」が機能していることを確認しました。このコードを実行する私は App Group のメンバーです。

Imports System.Security
Imports System.Security.Principal
Imports System.Security.Permissions

    Private Function DemandSecurity() As Boolean
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
        Dim principalGroup As New PrincipalPermission(Nothing, "App Group")
        Try
            principalGroup.Demand()
            Debug.Print("Demanding pricipal permissions for current user on 'App Group' role succeeded. ")
        Catch secEx As SecurityException
            Debug.Print("Security Exception - Demanding pricipal permissions for current user on 'App Group' role failed. ")

            Application.DoEvents()
            MessageBox.Show("Permission denied. Output: " & vbNewLine & secEx.ToString, "App - Security Exception", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)

            Return False
            Exit Function
        End Try
        Return True
    End Function

secEx.ToString からのエラー出力は次のとおりです。

"System.Security.SecurityException: プリンシパル アクセス許可の要求が失敗しました。C の App.My.MyApplication.DemandSecurity() で System.Security.Permissions.PrincipalPermission.ThrowSecurityException() で System.Security.Permissions.PrincipalPermission.Demand() で: \Documents and Settings\me\My Documents\Visual Studio 2008\Projects\App\App\ApplicationEvents.vb: 28 行目

失敗したアクション: Demand 最初に失敗したアクセス許可の種類: System.Security.Permissions.PrincipalPermission

失敗した最初のアクセス許可は次のとおりです。アプリグループ"/>

要求は次のとおりでした: IPermission class="System.Security.Permissions.PrincipalPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1"> Identity Authenticated="true" Role="App Group "/>

失敗したアセンブリまたは AppDomain は次のとおりです: mscorlib、Version=2.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089"

他に何かを含める必要がある場合はお知らせください。

4

2 に答える 2

0

OK、これは単なる推測です。たまたま SAMAccountName と識別名に関するこの議論を見ましたが、これがまだ現在の問題であるかどうかはわかりません: Active Directory と PrincipalPermission

正直なところ、「役割」が完全な LDAP フィルターを実行できるかどうかはわかりませんが、試してみましょう: グループの識別名が次のようになっているとします。

"CN=マイグループ、OU=セキュリティグループ、OU=部門、DC=会社、DC=com"

なぜこれを試してみませんか:

Role="CN=MyGroup,OU=SecurityGroups,OU=Department,DC=Company,DC=com"

Role=@"Company.com\Department\Security Groups\MyGroup"  // Not sure about this one though

そして、これはより論理的に見えるので、おそらく次のようになります。

Role=@"Company\SAMAccountNameOfYourGroup"

CN=Users のグループは、おそらく Active Directory のルートにあるため、成功する可能性があると思います。そのため、他のグループについては、一意の SAMAccount を指定するか、検索用の構造を指定する必要がある場合があります。

于 2012-11-25T08:31:08.903 に答える
0

この問題を確認するには、AD グループを確認することをお勧めします。

于 2012-11-23T21:07:12.457 に答える