關鍵字:數據庫
一、 CLR安全性在第一篇中,我們已經討論了宿主于和在SQL Server內執行的.NET代碼的安全環境-從SQL Server的角度來觀察SQLCLR代碼模塊。但是CLR使用其自己的安全模型。一旦SQL Server同意進行所有的許可權檢查并且允許代碼執行,那么這種模型就會"強制介入"。僅僅因為它能夠執行并不意味著它能夠做它想做的任何事情。
CLR提供給它運行的.NET代碼和它運行的主機許多服務。這些服務包括:
1)類型安全檢查-校驗代碼能夠以良好定義的方式來存取內存結構;
2)基于角色的安全-根據由誰運行代碼;
3)代碼存取安全-在這種情況下,許可權的授予是基于代碼特征而不是基于誰在運行代碼;
4)應用程序域-它提供在宿主進程中實現安全執行地帶。
在數據庫中的所有具有相同所有者的程序集都被加載到同一個AppDomain中,不管它們被安裝到哪個數據庫中。在一個AppDomain中的每一個程序集都能夠通過反射找到另外每一個其它程序集。既然它們具有相同的所有者,所以SQL Server不必執行它自己的權限檢查,這有助于性能的改進。但是這些措施并不能解決實際存在的代碼存取安全問題。
CLR還強制實行宿主保護屬性(HPA)-允許一個宿主(在此情況下,是指SQL Server)控制允許SQLCLR代碼使用.NET框架的指定部分。其實,在可靠性方面,還有除了安全性外的其它方面的內容。
二、 代碼存取安全性
CLR提供的最重要的服務之一是代碼存取安全性(CAS)。CAS的基本原則是,為代碼賦予特權,而不是針對用戶。如果你已習慣于Windows或SQL Server模式的把許可權賦予用戶和登錄而不是它們正在執行的代碼,這聽上去似乎有些奇怪。但是,就算SQLCLR代碼在一個管理用戶的安全上下文下執行,它也可能不具有所有可用的許可權。事實上,在SQL Server內部執行的SQLCLR代碼幾乎一定不會擁有所有許可權-這稱為"完全信任"。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/