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

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



