CasPol.exe 程式碼存取安全性原則工具幾個常用的指令

分享到噗浪!

程式碼存取安全性(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)所有的程式碼群組

caspol -machine -lg

    這行指令會列出所有本機電腦原則(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點新增的程式碼群組,所以刪除的語法如下:

caspol -rg 1.6

7. 將最近儲存的本機電腦原則(Machine)原則復原。

caspol -machine -recover

這個程式碼存取安全性原則工具 (Caspol.exe)真的很複雜,上列的那些指令只是我認為比較有可能會用到的,其他更進階的設定除了上 MSDN 查看之外,可能也要 Try 一下才知道怎麼使用。

相關連結

  

此文章由 will 發表於 2008/9/7 下午 01:00:01

永久連結 | 評論 (3) | 此文章的RSSRSS comment feed |

分類: .Net | Security

標籤: ,

評論

一月 7. 2009 15:38

didar

因為剛好遇到相關的問題,找到你的這篇文章,
我在asp.net或winForm中使用一樣的程式都可以順利連接資料庫,可是在WPF的WebApplication中卻會顯示以下的錯誤訊息:
System.Security.SecurityException:型別'System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089'的使用權限要求失敗

看完你的文章然後也參考很多其它的文章,我還是不懂到底所謂的"某個組件"指的是什麼??
是我的程式還是我的資料庫?需要進行安全性原則設置的是我的程式還是我的資料庫?
抱歉喔~問題很多~~這個問題解決不了讓我很頭大,
謝謝!!

didar

一月 7. 2009 16:43

will

安全性原則設置指的是你的 .NET 組件(Assembly)

will 台灣

一月 26. 2010 07:49

Mark

Caspol.exe真的很難用說,還是用控制台的系統管理好用說。

Mark 台灣

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading