![](/img/trans.png)
[英]How to prevent users and other applications from accessing data saved in a file whose content is protected by a password - only streams?
[英]Prevent other processes and users from accessing a file
我有在計算機上運行的用C#編寫的Windows服務,它創建並使用了許多文件。 有沒有一種方法可以防止計算機上的用戶(包括管理員)從代碼中弄亂這些文件(移動,編輯,重命名,刪除)?
我知道StreamWriter可以實現這一點,但是我不想一直保持打開狀態而無需實際訪問文件中的數據,但是我似乎找不到任何其他方法。
編輯:讓我改一下問題的基礎,不要在下面的評論。 是否可以通過只有我的服務才能訪問文件的方式來設置ACL? 如果只有服務可以訪問文件,我也會接受(我已經在Microsoft Docs中提到了“所有服務”安全組,但是我似乎無法在系統或.net上找到它)。
您可以通過更改訪問權限來做到這一點,但我強烈建議您簡單地將它們保持打開狀態(只要小心,在每次批量寫入后刷新流)。
在第一部分中,我嘗試直接解決您的問題( “如何預防...” ),但是在第二部分中,我嘗試概述另一種方法(使您的應用程序具有彈性:保留備份)。
假設您正在Windows上運行,以避免其他用戶惹上他們,您應該:
設置隱藏屬性。 默認情況下,隱藏文件是隱藏的,許多用戶甚至看不到它們。 如果您可以在目錄級別執行此操作,那就更好了。
更改ACL以拒絕對“ Users
和Administrators
組的Full access
。 如果您選擇並保留Read
權限,那就更好了。 默認情況下,Windows選擇最嚴格的策略,即使一個用戶屬於兩個組,這也會有效地阻止所有人寫入該文件(如果您還拒絕“ Read
權限,那么他們甚至將無法看到其內容,但稍后再查看) )。
Users
組中。 Read
權限,則讀取代碼不會受到影響。 不要忘記檢查Windows的不同版本和版本( HomeUsers
在我的腦海中不斷跳動。)如果您的應用程序是Windows Service,那么事情可能會稍微容易一些,請參閱eryksun的評論 。
您可以使用Windows資源管理器簡單地進行所有這些試驗,找到適當的平衡,但是不要忘記每個安裝都是一個不同的世界,只有上帝知道環境是什么(但他不知道為什么)。
幾個明顯的缺點:
不要忘記,如果他們真的想破壞您的應用程序,那么他們只會刪除應用程序目錄...
我認為,但我不知道您的特定用例,也許您是從錯誤的角度來解決問題。 如果要防止用戶(有意或無意)破壞數據文件,則需要BACKUP 。 每次編寫副本時,請將副本保存在其他位置,將其標記為隱藏並過得愉快。 如果它們不是太大,您甚至可以直接在Windows Registry中保存內容。 對於加密/散列/校驗和文件,您的應用程序可以輕松檢測出它們何時損壞或丟失:只需還原備份就可以了。
我不想一直打開文件
但是保持開放是密切遵循您的意圖和要求的好方法。
只要不超過數百個,這似乎是最佳選擇。
另一種方法是設置安全屬性(ACL),但這很麻煩,並且需要更高的特權。
排除管理員是不可能的,您不應該這么做。 避免意外刪除或重命名是可行的,但不能完全控制。
2其他選項是
在文件所在的位置設置一些權限,以便沒有人可以訪問它們
如果所有有問題的文件都將由您的應用程序創建,則可以檢查CreateFile中的選項,可以在其中將共享選項設置為0x00000000
以“防止其他進程在請求刪除,讀取或刪除其他文件或設備時打開它們。寫訪問權限。”
如果您想使用CreateFile
我想您將必須對其進行鎖定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.