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

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

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