易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL Server2005SQLCLR代码安全之权限

一、 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服务帐户的安全上下文中进行的,但是,该代码能够模拟其它用户进


相关文档:

基于SQL的分页

select top PageSize * from 表
where 条件 and id not in
(select top PageSize*(CurrentPageIndex-1)  id from 表 where 条件 order by 排序条件)
order by 排序条件
《PageSize 是GridView中每页显示的信息条数,PageSize*(CurrentPageIndex-1) 在SQL中不识别,需定义变量来替换》 ......

SQL精华收集

order by 的数值型灵活使用
select * from table_a where id=p_id order by decode(函数,'asc',1,'desc',-1)*jsny;
控制试图的访问时间:
6.create view ...
as
select ... from where exists(select x from dual where sysdate>=8:00am and sysdate<=5:00pm)
妙用decode实现排序
select * from tabnam ......

在SQL Server 删除重复数据

删除数据库表中某一字段的重复纪录,只想保留一条记录可用以下方法:
执行以下语句:
declare @max integer,@id varchar(18) --此处变量类型根据字段类型设置
declare cur_rows cursor local for select 字段,count(*) from 表名group by 字段 having count(*) > 1
open cur_rows
fetch cur_rows into @id,@max
wh ......

sql生日提示

根据生日的xx月xx日查找在$checkDate计算,$before日后生日的客户:
$checkDate为YYYY-MM-DD
WHERE substring(ADDDATE( '$checkDate', $before ),6,10)=substring(DATE_FORMAT(birthday,'%Y-%m-%d'),6,10)
$dates 天内生日的客户未考虑到平年、闰年::
   $sql.=" (dayofyear( birthday )-dayofyear( ......

sql server 中常用的日期函数

从dateTime类型数据中获取季度:
select   cast(datepart(q,sign_date)   as   varchar(2))+'季度'    
一.sql server日期时间函数
1.   当前系统日期、时间
     select getdate()  
2. dateadd   在向指定日期加上一段时间 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号