none
フォルダーにアクセス権限を設定するが、サブフォルダーが設定されない RRS feed

  • 質問

  • 2008で以下のようにしてますが、 Tempフォルダーには設定されますが、サブフォルダーには設定されません。

    「フォルダーのアクセス権」の質問の回答を参考にしてみましたが、やはり出来ませんでした。OSはXPです。

    どこに問題があるのでしょうか?

           Dim DirInfo As New System.IO.DirectoryInfo(”C:\Temp")
            Dim strError As String = ""

            Try
                Dim DirSec As DirectorySecurity
                DirSec = DirInfo.GetAccessControl()
                ' /* アクセス権限を指定 Everyoneに対し、フルコントロールの許可 */
                '(サブフォルダ、及び、ファイルにも適用)
                Dim AccessRule As New FileSystemAccessRule( _
                  "Everyone", _
                  FileSystemRights.FullControl, _
                  InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit, _
                  PropagationFlags.None, _
                  AccessControlType.Allow)

                'アクセス権限を追加
                DirSec.AddAccessRule(AccessRule)
                DirInfo.SetAccessControl(DirSec)
            Catch ex As Exception
                strError = ex.Message
            End Try

    2013年7月11日 12:50

回答

  • VS2008初心者 さま よろしく。

    アクセス権の継承を none で設定しているからでしょう。
    VB2008 SP1 のオブジェクトブラウザより抜粋した注釈を入れてみました。
    該当部分のコード(部分抜粋・変更箇所です)

     'PropagationFlags.None, _
     ' *** No Description ***
     'PropagationFlags.NoPropagateInherit, _
     'Specifies that the ACE is not propagated to child objects.
     PropagationFlags.InheritOnly, _
     'Specifies that the ACE is propagated only to child objects. This includes both container and leaf child objects.

    2013年7月12日 0:59

すべての返信

  • VS2008初心者 さま よろしく。

    アクセス権の継承を none で設定しているからでしょう。
    VB2008 SP1 のオブジェクトブラウザより抜粋した注釈を入れてみました。
    該当部分のコード(部分抜粋・変更箇所です)

     'PropagationFlags.None, _
     ' *** No Description ***
     'PropagationFlags.NoPropagateInherit, _
     'Specifies that the ACE is not propagated to child objects.
     PropagationFlags.InheritOnly, _
     'Specifies that the ACE is propagated only to child objects. This includes both container and leaf child objects.

    2013年7月12日 0:59
  • VS2008初心者 さま 解決したようで。

    この件を後から閲覧なさる方に、追加でコメントしておきます。

    プログラミング上は、先程の投稿の通りだと思いますが、
    留意すべき点があります。
    一般的には、PropagationFlags.None でいいと思いますが、
    その場合、上位のフォルダで設定されている ACL の設定に従います。
    本来は、上位の設定を確認してから、継承を含めた設定をするべきと思います。

    プログラミングとは別の観点から、
    OS のひとつの機能としての ACL があります。
    詳細は省きますが、十分理解した上で、実装なさる事をお勧めします。

    なお、今回のご質問の例、Everyone , FullControl は一番制限の無い設定です。
    何でも出来てしまうので、システムを管理する上では、注意が必要かも知れません。

    2013年7月13日 4:06