程式碼存取安全性(CAS, Code Access Security)是 .NET Framework 中非常重要的一部份,不過我發現大部分的 ASP.NET 開發人員並不清楚 CAS 是什麼,因為在開發 ASP.NET 的時候很少有機會去碰觸到這一塊,最近我們工程師在用 .NET 寫一個 COM 元件時就發生了 CAS 的權限問題,導致程式無法正常執行的情況。
我這篇不會多講有關於 CAS 的觀念,請各位到 MSDN 的 .NET Framework 中的安全性 單元學習相關知識,或是購買書籍來看,例如:Microsoft .NET Framework 2.0 應用程式開發基礎 Ⅱ。
底下是我整理的一些程式碼存取安全性原則工具 (Caspol.exe)常用的參數與使用的情境:
1. 查詢某個組件所屬的程式碼群祖(Code Group)
caspol -resolvegroup "C:\Program Files\MyApplication\MyApplication.exe"
2. 查詢某個組件所擁有的使用權限(Permission)
caspol -resolveperm "C:\Program Files\MyApplication\MyApplication.exe"
3. 設定某個組件為「完全信任」
caspol -addfulltrust "C:\Program Files\MyApplication\MyApplication.exe"
當不具有管理權限的使用者執行 Caspol.exe 時,除非指定 -machine 選項,否則所有選項都將參考使用者層級原則。當系統管理員執行 Caspol.exe 時,除非指定 -user 選項,否則所有選項都將參考電腦原則。
4. 新增一個程式碼群祖(Code Group)到本機電腦原則(Machine)
caspol -machine -addgroup All_Code -url \\myserver\sharefolder\* LocalIntranet
-name "My_Code_Group"
注意事項:執行這行的時候會出現以下提示訊息:
Microsoft (R) .NET Framework CasPol 2.0.50727.1433
Copyright (c) Microsoft Corporation. All rights reserved.
執行的作業將會變更安全性原則。
您確定要執行這項作業嗎? (yes/no)
不過,你要輸入 y 才能過關喔!如果你輸入的是 yes 就會出現 "儲存原則已中止" 的錯誤訊息!
5. 列出本機電腦原則(Machine)所有的程式碼群組
這行指令會列出所有本機電腦原則(Machine)中的所有程式碼群組,並以編號的方式呈現,如下:
Microsoft (R) .NET Framework CasPol 2.0.50727.1433
Copyright (c) Microsoft Corporation. All rights reserved.
安全性為 ON
執行檢查為 ON
原則變更提示為 ON
層級 = Machine
程式碼群組:
1. (等位) All Code: Nothing
1.1. (等位) 區域 - MyComputer: FullTrust
1.1.1. (等位) StrongName - 0024000004800000940000000602000000240000525341
31000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C9992
1EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05
ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC496
3D261C8A12436518206DC093344D5AD293: FullTrust
1.1.2. (等位) StrongName - 00000000000000000400000000000000: FullTrust
1.2. (等位) 區域 - Intranet: LocalIntranet
1.2.1. (等位) All Code: 相同的 Web 網站
1.2.2. (等位) All Code: 相同的目錄 FileIO - 'Read, PathDiscovery'
1.3. (等位) 區域 - Internet: Internet
1.3.1. (等位) All Code: 相同的 Web 網站
1.4. (等位) 區域 - Untrusted: Nothing
1.5. (等位) 區域 - Trusted: Internet
1.5.1. (等位) All Code: 相同的 Web 網站
1.6. (等位) URL - \\myserver\sharefolder\*: LocalIntranet
成功
6. 刪除第 4 點所新增的程式碼群組
如同第5點所示,1.6 就是我們剛剛在第4點新增的程式碼群組,所以刪除的語法如下:
7. 將最近儲存的本機電腦原則(Machine)原則復原。
這個程式碼存取安全性原則工具 (Caspol.exe)真的很複雜,上列的那些指令只是我認為比較有可能會用到的,其他更進階的設定除了上 MSDN 查看之外,可能也要 Try 一下才知道怎麼使用。
相關連結