李超

cc编程笔记本。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
以下是对原文要点的整理,原文地址:
http://blog.csdn.net/leimin/archive/2004/08/16/75662.aspx

1. Sqlserver2005内置了CLR运行环境

程序集管理
1. 在Sqlserver2005中创建一个程序集的时候,并不是引用了一下文件系统中的程序集,而是讲程序集保存到Sqlserver2005自己的数据库中。
2. 创建程序集的时候,会检测创建的程序集是否引用了其他程序集,并将所引用程序集一并添加(系统程序集除外,系统程序集是文件系统的,只有用户程序集会被加载到Sqlserver2005的数据库中)
3. 查看已添加到sqlserver2005的程序集列表使用sys.assemblies视图  查看已加载的程序集的字节用sys.assembly_files视图
4. 创建一个程序集的时候 必须用windows内置账户或者sa账户登录sqlserver,因为创建程序集的时候需要访问文件系统,而纯sqlserver用户无法访问windows文件系统。(sa账户可以访问windows文件系统,因为sa会被对应为windows的内置管理员账户)
-- 创建程序集
CREATE ASSEMBLY <assembly identifier>
FROM <path to assembly on file system>

-- 例子
CREATE ASSEMBLY Customer
FROM 'C:\build\customer\customer.dll'

-- 查看程序集列表
SELECT *
FROM sys.assemblies

-- 查看程序集字节流
SELECT *
FROM sys.assembly_files


代码访问安全(CAS)

代码访问安全机制的作用是以程序集为单位,限制某程序集的代码的执行权限。(我自己的粗略定义)

1. 代码访问安全机制是相对于一个程序集来说的。
2. 代码访问安全分为三个等级: SAFE, EXTERNAL_ACCESS, UNSAFE。
3. SAFE - 允许访问数据和CLR类,不允许访问文件系统资源和网络资源,不安全代码是禁止的。 对应 dbowner 账户。
4. EXTERNAL_ACCESS - 在SAFE的操作许可的基础上加入了访问文件系统和网络资源。
5. UNSAFE - 不需要类型安全的,没有限制的执行代码。 对应 sysadmin 账户。
-- 创建一个EXTERNAL_ACCESS权限的Assembly
CREATE ASSEMBLY Customer
FROM 'C:\build\customer\customer.dll'
WITH PERMISSION_SET=EXTERNAL_ACCESS


托管存储过程(CLR PROCEDURE)
托管存储过程其实就是一个公共类的公共静态方法,

1. 托管存储过程对应到.Net中的形式是一个公共类的公共静态方法。
2. 托管存储过程和对应的方法的名称不需要相同。
-- 创建托管存储过程的语法
CREATE PROCEDURE <Procedure Name>
AS EXTERNAL NAME <Assembly Identifier>:<Type Name>::<Method Name>
例如
-- Utils必须是一个已经被sqlserver2005加载的程序集
CREATE PROCEDURE IsMatch
AS EXTERNAL NAME Utils.Regex.IsMatch

posted on 2008-01-31 10:00  coderlee  阅读(1441)  评论(0)    收藏  举报