フォルダーを移動しても、継承されたアクセス許可は自動的に更新されません

この記事では、フォルダーを移動するときに継承されたアクセス許可が自動的に更新されない問題の解決策を提供します。

適用対象: Windows Server 2012 R2
元の KB 番号: 320246

現象

Access Control リスト (ACL) には、親から継承されたものとしてマークされているアクセス許可が表示される場合がありますが、親自体に ACL でこれらのアクセス許可が構成されていない可能性があります。 この現象は、継承がまだ有効になっている場合でも発生する可能性があります。 親フォルダーの ACL に対する後続の変更により、子の ACL は継承されたアクセス許可を受け取ります。 また、子の ACL を変更しようとすると、継承が適用されます (変更によって ACL が継承から保護されていることをマークしない限り)。 この動作は、ACL の編集を開始する前に継承状態が確認されなかった場合に驚くかもしれません。

注:

この動作は、Windows Vista ベースのコンピューターを実行しているときにフォルダーを移動しても発生できません。 フォルダーまたはファイルがターゲット フォルダーまたはファイルの ACL を継承できるため、移動操作が機能するようになりました。 フォルダーまたはファイルには、親から継承されたものとしてマークされたアクセス許可もあります。 これは、Windows XP から Windows Vista および Windows Server 2008 への設計による変更です。

原因

この動作は、フォルダーの移動によって発生する可能性があります。 フォルダーを移動すると、ACL は変更されず、継承されたアクセス許可は更新されません。 この記事のコンテキストでの 移動 は、常に同じボリューム内で移動することを意味します。

ファイルまたはフォルダーを移動すると、ACL も移動され、どのような方法でも変更されません。 このフォルダーに対して継承が有効になっている場合でも、継承されたアクセス許可は自動的に更新されません。 ACL は次回アクセス許可を変更するときに更新されます。これにより、親はアクセス許可を強制的に伝達します。

この動作は、次の原因によっても発生する可能性があります。

  • CACLS を使用して親フォルダーのアクセス許可を設定しても、サブフォルダーには反映されません。 /T オプションは、継承を使用して権限を伝達するのではなく、すべての ACL を上書きすることを意味します。

  • 継承を自動的に伝達しない API (Adssecurity.dllなど) を使用して、親フォルダーのアクセス許可を設定します。

  • バックアップから別の場所への復元。

解決方法

予期しないアクセス許可の変更を回避するには、設定を保持する場合に移動する前に、ファイル/フォルダーの ACL を 保護 対象に設定します。 それ以外の場合は、エクスプローラーの ACL エディターを使用して、移動したファイル/フォルダーの ACL を手動で更新します。 継承を無効にしてから再度有効にして、適切な継承されたアクセス許可で ACL を強制的に更新します。 VBScript を使用して、このプロセスを自動化することもできます。

状態

この動作は仕様です。 この動作は、Windows Vista での設計変更が原因で発生することはありません。

動作の再現手順

  1. 読み取りユーザー:変更アクセス許可を持つ test1 フォルダーを作成します。
  2. test1\sub サブサブフォルダーを作成し、親からの継承を有効にします (既定値)。 このフォルダーには 、すべてのユーザー (読み取りユーザー: 継承されたアクセス許可として変更) が表示されます。
  3. 管理者のみ:フル コントロールのアクセス許可を持つ別のフォルダー test2 を作成します。
  4. サブサブフォルダーを test2 に移動します。
  5. test2\sub のアクセス許可を表示して 、すべてのユーザーを表示します:読み取りユーザー: 継承されたアクセス許可として変更しますが、親のアクセス許可は 管理者:フル コントロールです。
  6. サブ許可の ACL に別のグループ/ユーザー (ゲストなど) を追加します (エクスプローラー ACL エディターを使用した読み取りアクセスなど)。 [適用] をクリックすると、すべてのユーザー:読み取りユーザー:変更が削除され、追加した権限の横に継承されたアクセス許可として管理者:フル コントロールのみが表示されます。