SQLCLR 编程:从基础到高级应用
1. 权限集与授权机制
在创建程序集时,涉及到权限集和授权两个重要方面。权限集通过两种不同类型的检查来实现:
- JIT 编译检查 :在程序集即时编译(JITed)时,会针对 HostProtection 属性进行检查。许多 .NET Framework 类和方法都带有此属性,在权限不足的程序集中引用它们会在 JIT 过程中引发异常。
- 运行时安全限制 :通过 .NET 的代码访问安全(CAS)基础设施在运行时强制执行。一般来说,授予 EXTERNAL_ACCESS 权限集意味着放宽安全权限并限制 CAS 强制执行;授予 UNSAFE 权限集则允许可能影响可靠性的代码,由 HostProtection 检查来执行。
授权即指定程序集的所有者。除了基本的数据库对象安全(如修改或删除程序集的能力)外,所有者对程序集的处理方式有重要影响。在给定数据库中,由同一数据库主体拥有的所有程序集将被加载到同一个 AppDomain 中,这为每组程序集提供了独立的内存沙箱,与其他程序集组完全隔离。这种设计的好处是,SQLOS 可以有针对性地启动和关闭 AppDomain ,而不影响系统的其他部分。例如,如果数据库中有两组功能不同的程序集,分别由不同主体拥有,当 SQL Server 检测到其中一个程序集存在内存泄漏代码时,只需回收受影响的 AppDomain ,另一个
超级会员免费看
订阅专栏 解锁全文
117

被折叠的 条评论
为什么被折叠?



