親のACLを変更するときに、WindowsがすべてのNTFS子オブジェクトを処理するのはなぜですか?


10

親のACLを変更するときに、WindowsがすべてのNTFS子オブジェクトを処理するのはなぜですか?

[すべての子オブジェクトのアクセス許可を置き換える...]ボックスをオンにした場合、この動作が予想されますが、このボックスをオフのままにしても、Windowsはすべての子を処理します。


@Ben継承されたアクセス許可のカスケードは、継承が有効なすべての子オブジェクトに複製される必要があるため、Windows APIを直接呼び出す場合でも実行する必要があるため、シェルでは行われません。参考:パフォーマンス上の理由から、権限は複製されます。
Andreas

回答:


10

Windowsでは、ファイル権限は動的に継承されません。つまり、ファイルを開こうとすると、WindowsはそのファイルのACLのみを調べ、ファイルを含むツリー内のディレクトリのACLは調べません。つまり、ディレクトリのACLを変更すると、Windowsは影響を受けるディレクトリ内のすべてのファイルとサブディレクトリの権限をすぐに更新する必要があります。

Windowsでは、ACLの継承設定は、動的継承の形式を示していません。これは、親ディレクトリのACLが変更されたときに、継承フラグが設定されているツリー内のすべてのファイルとサブディレクトリも更新する必要があることを示す単なるフラグです。

Novell NetWareを覚えるのに十分な年齢の人は、これがNetWareとの大きな違いの1つであることを覚えています。歴史は問題を議論の余地のないものにしましたが、どのアプローチがより良いかについて当時多くの議論がありました。動的ACLでは、ファイルを開こうとするときにOSがすべての親ディレクトリのACLをチェックする必要がありますが、ACLの変更は簡単です。Windowsでは、ファイルを開くときにチェックする必要があるACLは1つだけですが、ご存じのように、ディレクトリACLの変更には時間がかかる場合があります。


1
これは完全に理にかなっています。ACLは書き込まれるよりもはるかに多く読み取られるため、まれな書き込みのユースケースではより複雑になりますが、読み取りアクセスを高速化するために「継承値」をキャッシュすることは理にかなっています。
アレクサンダー-モニカを復活

@Alexander:理解できないのは、この複雑さをエンドユーザーに公開しなければならない理由です。嘘をついてエンドユーザーに「動的」と伝えて、内部にキャッシュするのはなぜですか。
ケビン

@Kevin-権限を伝達するのに時間がかかる可能性があり、その期間に権限の適用が期待どおりに行われない可能性があるためですか?
davidbak

13

親オブジェクトから権限を継承するように構成されている子オブジェクトは、処理する必要があります。子オブジェクトに対して明示的に定義された権限は影響を受けません。

「すべての子オブジェクトのアクセス許可を置き換える」オプションは、すべての子オブジェクトにアクセス許可を伝達するだけでなく、すべての子オブジェクトに対して明示的に定義されたアクセス許可をすべて削除して置き換えます。


5

デフォルトでは、子フォルダは親フォルダから権限を継承します。親フォルダー(このフォルダー、サブフォルダー、ファイル)のアクセス許可を追加または変更するときにデフォルトのスコープを想定すると、すべての子フォルダーが更新され、親でのアクセス許可の変更が反映されます。

あなたが参照しているチェックボックスは、すべての子フォルダで明示的に定義されたすべての権限を削除し、それらを親から継承可能な権限で置き換え、子フォルダで権限の継承を再度有効にする「1回限り」の操作です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.