使用 Enterprise Library 等元件時,常遇「安全性異常:當前應用程式安全等級無法修改註冊表值」。根因:ASP.NET 執行身分 (預設 ASPNET/Network Service) 權限不足。
<!-- C:\Windows\Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config -->
<system.web>
<!-- 修改前 -->
<identity impersonate="false" userName="" password="" />
<!-- 修改後:模擬為 Administrators 群組帳號 -->
<identity impersonate="true" userName="Administrator" password="YourPassword" />
</system.web>
HKLM\Software\MyApp)。IIS_IUSRS (或 ASPNET / NETWORK SERVICE) → 給予「讀取/寫入」。
3. 檔案系統同理:寫入目錄 (Logs/Uploads) 僅授權該資料夾「修改」權限。
4. 應用程式集區身分:IIS 7+ 建議使用 ApplicationPoolIdentity (虛擬帳號 IIS AppPool\MyPool),以 ACL 精確控制資源存取。
5. 程式碼存取安全 (CAS):.NET 2.0+ 可透過 <trust level="Full|High|Medium" /> 限制權限集合。
| 環境 | identity 設定 | 說明 |
|---|---|---|
| 開發機 | impersonate="true" userName="CurrentUser" | 方便除錯、存取本機資源 |
| 測試/Staging | impersonate="false" + 精確 ACL | 模擬生產權限模型 |
| 生產 | impersonate="false" + ApplicationPoolIdentity + 最小 ACL | 最高安全性、隔離性 |
ASP.NET / System.Web 查看詳細堆疊。Access Denied、進程 w3wp.exe,精確定位被拒絕的註冊表/檔案路徑。web.config <trust level="..." /> 是否過度限制。切記:impersonate="true" userName="Administrator" 僅限臨時除錯,嚴禁用於任何對外服務環境。