快速业务通道

SQLServer2005SQLCLR代码安全之权限

作者 佚名技术 来源 数据库编程 浏览 发布时间 2012-03-20
一、 SQLCLR权限集级别

  当你使用CREATE ASSEMBLY语句把一个程序集加载到一个数据库中时,SQL Server提供了三种权限集级别:SAFE,EXTERNAL_ACCESS和UNSAFE。这些权限集形成如图3和图5(均请参考第二篇)所示的AppDomain策略级别。

  下面是一个典型的语句,它实现安装位于FileLoader.dll文件内的一个程序集,并且赋予它EXTERNAL_ACCESS权限集。

CREATE ASSEMBLY FileAccess
FROM ''E:\FileLoader.dll''
WITH PERMISSION_SET = EXTERNAL_ACCESS
GO

  在代码执行时,每一种权限集级别都授予该代码一组不同的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程序集的权限集。

权限 类型 限制
SecurityPermission 受限制 执行
SqlClientPermission 受限制 不能是空口令,只能使用上下文连接串

  授予给一个程序集的结果权限集是列举于表格1中的许可权权限集与来自企业、机器和用户权限集的交集。因为这些级别默认会拥有所有的许可权,所以程序集仅接受列举于表格1中的权限。注意,请确保你一定要理解这些权限。

  (2) EXTERNAL_ACCESS

  与SAFE相比,EXTERNAL_ACCESS权限集允许有限制地存取存在于SQL Server实例外部的资源-包括磁盘文件,在其它SQL Server实例中的数据和对象,环境变量和注册表的一些部分。存取这些其它资源通常是在SQL Server服务帐户的安全上下文中进行的,但是,该代码能够模拟其它用户进行存取。这个级别授予列举于表格2中的许可权。

  表格2:授予给EXTERNAL_ACCESS程序集的权限集。

权限 类型 限制
EnviromentPermission 不受限制 -
FileIOPermission 不受限制 -
RegistryPermission 受限制 仅能以读方式存取HKEY_CLASSES_ROOT,HKEY_LOCAL_MACHINE,HKEY_CURRENT_USER,HKEY_CURRENT_CONFIG和HKEY_USER
SecurityPermission 受限制 Assertion,Execution,SerializationFormatter,ControlPrincipal
KeyContainerPermission 不受限制 -
SqlClientPermission 不受限制 -
EventLogPermission 受限制 仅限于本地主机且仅限于系统管理员
DnsPermission 不受限制 -
SocketPermission 受限制 仅限于IP地址
WebPermission 受限制 仅能通过HTTP存取本地主机
SmtpPermission 受限制 仅能进行连接存取
DistributedTransactionPermission 不受限制 -
NetworkInformationPermission 受限制 仅能通过Ping方式存取
StorePermission 不受限制 -


  上面不受限制的FileIOPermission可能看起来有点令人担心,因为,它意味着,从CLR的角度来看,代码能存取磁盘上的任何位置。但是切记,该代码仍然运行于本地服务帐户的操作系统安全限制下。因此如果该帐户不能存取一个文件的话,那么SQLCLR代码也不能存取。

  典型地,本地服务帐户是一种具有极强权限的帐户,因此存在滥用的可能性。为此,我们一般把

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号