この記事では、フォルダーを移動するときに継承されたアクセス許可が自動的に更新されない問題の解決策を示します。
元の KB 番号: 320246
現象
アクセス制御リスト (ACL) には、親から継承されたとマークされているアクセス許可が表示される場合がありますが、親自体に ACL でこれらのアクセス許可が構成されていない可能性があります。 この現象は、継承がまだ有効になっている場合でも発生する可能性があります。 その後親フォルダーの ACL を変更すると、子の ACL は継承されたアクセス許可を受け取ります。 また、子の ACL を変更しようとすると、継承が適用されます (変更によって ACL が継承から保護されているとマークされていない限り)。 ACL の編集を開始する前に継承状態が示されていない場合、この動作は驚くかもしれません。
Note
この動作は、Windows Vista ベースのコンピューターを実行しているときにフォルダーを移動しても発生しません。 フォルダーまたはファイルがターゲット フォルダーまたはファイルの ACL を継承できるため、移動操作が機能するようになりました。 フォルダーまたはファイルには、親から継承されたものとしてマークされているアクセス許可もあります。 これは、Windows XP から Windows Vista および Windows Server 2008 への仕様変更です。
原因
この動作は、フォルダーの移動によって発生する可能性があります。 フォルダーを移動しても ACL は変更されず、継承されたアクセス許可は更新されません。 この記事のコンテキストで move は常に同じボリューム内を移動することを意味します。
ファイルまたはフォルダーを移動すると、ACL も移動され、何も変更されません。 このフォルダーに対して継承が有効になっている場合でも、継承されたアクセス許可は自動的に更新されません。 ACL は次にアクセス許可を変更するときに更新され、これにより親がそのアクセス許可を伝達するように強制されます。
この動作は、次の場合にも発生する可能性があります。
CACLS を使用して親フォルダーのアクセス許可を設定しても、サブフォルダーには反映されません。 /T オプションは、継承を使用して権限を伝達するのではなく、すべての ACL を上書きすることを意味します。
継承を自動的に反映しない API を使用して親フォルダーのアクセス許可を設定する (Adssecurity.dllなど)。
バックアップから別の場所への復元。
解決方法
予期しないアクセス許可の変更を回避するには、設定を保持する前に、ファイル/フォルダーの ACL を protected に設定します。 それ以外の場合は、エクスプローラーの ACL エディターを使用して、移動したファイル/フォルダーの ACL を手動で更新します。 再び継承を無効にしてから有効にして、ACL を正しく継承されたアクセス許可で強制的に更新します。 VBScript を使用して、このプロセスを自動化することもできます。
状態
この動作は仕様によるものです。 この動作は、Windows Vista でのデザインの変更のため発生しません。
動作を再現する手順
- everyone:read および users:change アクセス許可を持つ test1 フォルダーを作成します。
- test1\sub サブフォルダーを作成し、親からの継承を有効にします (既定値)。 このフォルダーには、継承されたアクセス許可として everyone:read と users:change が表示されます。
- administrators:full control アクセス許可のみを持つ別のフォルダー test2 を作成します。
- sub サブフォルダーを test2 に移動します。
- test2\sub のアクセス許可を表示して、 everyone:read と users:change を継承されたアクセス許可として表示しますが、親のアクセス許可は administrators:full control。
- 別のグループ/ユーザー (ゲストなど) をサブ許可の ACL (エクスプローラー ACL エディターを使用した読み取りアクセスなど) に追加します。 Apply をクリックすると、everyone:read と users:change が削除され、追加した権限の横に継承されたアクセス許可としてadministrators:full controlのみが表示されます。