SQLServer2005SQLCLR代码安全之权限
作者 佚名技术
来源 数据库编程
浏览
发布时间 2012-03-20
对这些程序集的存取权限仅授予那些具有服务帐户信任度的登录并且不使用本地系统帐户作为SQL Server的服务帐户。 值得注意的是,借助于EXTERNAL_ACCESS权限集,你可以使用一个更传统型的ADO.NET连接串来连接到在同一个SQL Server实例(SQLCLR代码在其中运行)中的一个数据库。这需要SqlClientPermission以便你能够使用一个除了"上下文连接"串以外的连接-用以读取当前实例中的数据,指定通常的服务器命名,凭证,等等。然而,我也无法找到为什么你要这样做的理由,但是既然我们可以进行选择,也是一件好事,对吗? (3) UNSAFE 这个UNSAFE权限集是赋予所有权限的SQLCLR等价物,在这种情况下,CLR挂起所有的许可权检查。它接受单个的不受限制的SecurityPermission权限,这是CLR的授予所有权限的方式。 潜在地,一个UNSAFE程序集能够完成各种"危险性"的动作,因为它属于内在地被信任的代码。例如,它能调用非托管代码,例如COM组件和原始Win32 API。它还受限于服务帐户的操作系统许可权,但是CLR不会限制它存取任何资源的能力。 因为UNSAFE是如此的不安全,所以,只有一个sysadmin能够创建这种类型的程序集。 一、 SQLCLR权限集级别
在代码执行时,每一种权限集级别都授予该代码一组不同的CAS许可权集。下面让我们开始讨论在每一级上授予的特定许可权。 (1) SAFE SAFE是默认的权限集。它仅授予足够的许可权来执行代码,实现不要求存取外部资源的内部计算以及存取在宿主SQL Server实例中的数据和对象。注意,SAFE代码不能存取外部的资源,因此它不能读取或写磁盘文件,不能存取任何其它SQL Server实例,或读取或写注册表。而且,该代码也必须被检验为类型安全的,这将有助于避免各种包括缓冲区溢出在内的攻击。 SAFE代码是更可靠和安全的SQLCLR代码。它能够实现用T-SQL书写的代码在数据库和服务器实例内所能实现的几乎一样的功能。它能够授予如表格1所列举的CAS许可权。从表格1中可见,该代码能够运行和读取宿主SQL Server实例中的对象和数据-借助于一种特定形式的ADO.NET连接串,或者是"context connection=true"或者是"context connection=yes"来实现。任何其它连接串都可能会导致某种安全异常。 表格1:授予给SAFE程序集的权限集。
授予给一个程序集的结果权限集是列举于表格1中的许可权权限集与来自企业、机器和用户权限集的交集。因为这些级别默认会拥有所有的许可权,所以程序集仅接受列举于表格1中的权限。注意,请确保你一定要理解这些权限。 [1] [2] 下一页 关注此文的读者还看过:
|
||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于SQLServer2005SQLCLR代码安全之权限的所有评论