在 NTFS 磁碟機中,過去的行為是,當移動檔案時,如果移動到同一磁碟區上的資料夾,它將保留原始檔案的權限。
我根據經驗知道這一點,可以在這裡看到: https://support.microsoft.com/en-us/kb/310316
但今天我試著向一位同事展示這種行為,但沒有成功。每次該文件都會簡單地擁有與其關聯的新資料夾的權限。
我已經在 3 台不同的機器上嘗試過,但它不再像這樣工作了。什麼時候改變的?不,前面提到的註冊表設定尚未設定。
知道什麼時候改變了嗎?
[編輯]
只是舉個例子讓大家更清楚
假設我的 C 盤中有這些資料夾。
- C:\共享
- \在職的
- \最終的
我有四個組: - 實習生 - 員工 - 經理 - 員工(前 3 個組為成員)。
現在,讓我們考慮權限(簡化)。
- C:\共享
- 不繼承
- 明確允許管理員完全控制
- 明確允許修改管理器
- C:\共享\工作
- 繼承自共享
- 明確允許修改員工
- C:\共享\最終
- 繼承自共享
- 明確允許向員工朗讀
現在,假設工作資料夾中有一個文件,名稱為 Bullshit.doc。
以前,如果文件從工作資料夾移動(剪下/貼上)到最終資料夾,它將保留原始權限,即經理和員工可以修改,而實習生則沒有權限。
現在,當我嘗試移動 Bullshit.doc 時,移動後,將簡單地繼承 Final 資料夾的權限,即,它只是原諒實習生不應該具有存取權限。
我的問題是:這已經改變了,不是嗎?還是我要瘋了?我 99% 確信它的工作原理與知識庫中所描述的一樣。
我知道我過去遇到過類似的問題,當上層用戶在資料夾之間移動檔案(具有不同的權限集),然後抱怨實習生無法讀取檔案時。我不得不不止一次地解釋說剪切/貼上不起作用,他們需要複製/貼上/刪除。當然,它又回到了 Windows 2003,但我至少可以使用 2008 R2。
[編輯2] 現在有圖片了!
好吧,所以我決定嘗試複製。帶有實際文件而不是簡單的範例。這裡是...
是時候將文件移動到目的地了。原始資料夾只是一個臨時資料夾。讓我們檢查目標資料夾的權限。
嗯……不是我所期望的。即使它只是一個文件,從我在上面的知識庫中收集的資訊來看,它也應該保留權限。這就是我記得它的行為。
但似乎變了。我找不到它發生的時間的官方消息來源。
這讓我懷疑自己的理智。
答案1
NTFS仍在不斷發展和變化。我相信處理繼承權限的變更首先出現在 Vista 中,並在 Windows 7 中進一步發展。
要了解複製/移動檔案時會發生什麼,必須先了解隱式權限和顯式權限之間的差異。
隱式權限從父資料夾繼承,因此與父資料夾一起儲存。它們不與孩子一起存儲,因此不可移動/複製。換句話說,這些權限僅在子資料夾位於其父資料夾中時適用,因為它們來自父資料夾。
顯式權限手動分配給資料夾/文件並儲存在 存取控制列表(ACL) 作為 NTFS 屬性。它們可以被視為屬於該項目,並且在某些情況下如果目標檔案系統也是 NTFS,則可以隨項目一起移動。
這種 NTFS 架構的一些後果是:
- 當資料夾/檔案被複製的,在目標資料夾的 NTFS 表中建立新的目標條目。因此,複製的檔案將失去所有顯式權限,並且只會從其新的父資料夾繼承。
- 當檔案/資料夾被移動到同一體積內,其 NTFS 條目將被移動,並包含所有包含的屬性和權限。因此,它將保留所有顯式權限,但將失去其舊的繼承權限,而獲得其新父資料夾的權限。
- 當資料夾/檔案被在不同卷之間移動,該移動將被視為副本,並且不會保留任何原始權限。與複製的唯一差異是複製完成後來源將被刪除。
- 僅具有繼承權限的檔案/資料夾,沒有移動權限。此類項目將始終從父資料夾繼承其權限。
- 資料夾/檔案可以被標記為來自其父級的非繼承權限。在這種情況下,其所有權限都以 ACL 的形式存儲,即顯式權限。
這違反了大多數已建立的文檔,其中通常聲稱當文件夾/文件移動到同一卷內時,它將保留其原始 NTFS 權限(隱式和顯式)。這在舊版的 Windows 中可能曾經是正確的,但經我自己和發文者驗證,Windows 7 和 Windows 10 中的隱式權限不再是這種情況。
有關錯誤記錄的移動規則的範例,請參閱文章 在 Windows 2008 R2 和 Windows 7 上移動或複製檔案時如何處理檔案和資料夾權限。這篇文章是我下面與發文者討論的來源,我們一起發現了 NTFS 中管理複製和移動的真正規則。
答案2
在 harrymc 出色而全面的解釋中還需要添加一個額外的重要細節,最終會導致分裂行為,其中文件移動有時表現為 2003 風格,有時表現為 2008 風格。
2008/Vista 及更高版本中更新的 NTFS 卷內移動方式並不是徹底的檢修,而只是在後台添加了第二個步驟。
步驟1)MFT已更新;文件被移動並保留原始權限
(就像 2003/XP 及更早版本一樣。這些作業系統上的操作在此步驟停止。)
第2步)ACL 已更新,以刪除原始父資料夾的繼承權限並套用新父資料夾的繼承權限。
(這是 2008/Vista 新增的附加步驟,因此檔案將具有目標資料夾的權限。)
但是,如果執行移動的用戶調整權利,並且沒有明確擁有更改權限是的,第 2 步將會失敗(但不會告訴你),你最終會採取老式的行為,所以事情似乎又回到了 2003 年。
在同一場景中,如果有人複製文件,然後刪除原始文件(與文件系統處理卷之間移動的方式相同),一切都會按照您期望的方式進行。
沒有任何優雅的解決方案 - 你要么給用戶更改權限如此權利第2步可以成功,或在同一檔案伺服器磁碟區上的不同權限資料夾之間移動的任何檔案將保留其原始權限,直到強制重新傳播。