SQL Server数据库引擎.NET CLR环境数据库管理员向导(7)

http://developer.51cto.com  2007-02-27 17:56  Kimberly L. Tripp/Founder/SQLskills.com  51CTO.com  我要评论(0)
  • 摘要:Microsoft® SQL Server™ 2005依靠Microsoft .NET Framework Common Language Runtime(CLR)环境为数据库应用程序程序员提供了一个丰富的,全新的开发平台。新的性能使数据库管理员 (DBA)获得了全新的角色和职责。这本白皮书帮助数据库管理员 来决定如何适当的使用这个新特性,以及在其它数据库产品可能提供更好的操作性,灵活性或性能时提供指导。
  • 标签:SQL Server  引擎  .NET  CLR

用户定义类型

-- User Defined Type Metadata
-- Includes base assembly information
SELECT st.[name] AS [Type Name]
, st.max_length
, st.[precision]
, st.scale
, st.collation_name
, st.is_nullable
, sa.create_date
, sa.[name] AS [Assembly Name]
, sa.permission_set_desc AS [Access]
FROM sys.types AS st
INNER JOIN sys.type_assembly_usages AS tau
ON st.user_type_id = tau.user_type_id
INNER JOIN sys.assemblies AS sa
ON tau.assembly_id = sa.assembly_id

安全维护

在整合环境的独特安全模式下存在一个潜在的缺点,因为设计上的缺陷使得一方可能危及另一方的安全。例如,一个扩展存储过程必须回连到SQL Server 去访问数据并且必须支持活动的事务去保护修改数据的完整性。任何的数据失败都会导致安全漏洞。

数据库引擎.NET Framework 设计API的架构在安全模式方面是非常注意的。SQL Server 在.NET Framework 代码访问安全方面使用GRANT命令来提供针对特殊对象访问,并且控制在高/低权限模式之间的交互。

一个非管理用户在他们能被使用之前必须获得对日常事务处理的执行权限。

单一化处理代码访问安全模块(定义程序集允许做的事情)。组的权限分为下面三个设置:

SAFE
程序集方法只能和Transact-SQL的存储过程或函数同级别。代码要运行在信任调用下。

EXTERNAL ACCESS
程序集方法可以执行文件和网络的输入/输出。外部代码使用SQL Server 服务帐号权限运行,这样的设置可以在控制用户输入的特定外部资源时确定调用者的权限。

UNSAFE
这个权限延展了外部权限的设置,使得程序集允许不可管理的调用,代码不可控。

注意在UNSAFE模式下,整合代码将阻止一部分对.NET Framework 的库使用。例如,编译器,windows 管理器,企业服务器,和其他一些由于SQL Server 无法发现而被阻止掉的功能。

我们推荐数据库管理员限制External/Unsafe模式的使用,如果开发者要求这些高级别的权限时管理员应该去选择更加严格的环境要求。

源代码管理

CREATE ASSEMBLY在SQL Server 数据库中加载二进制程序集,但没有办法同时加载程序源。因为他是为了数据库管理员创建程序集来管理源代码用的。就好像第三方软件只支持二进制代码,也可以为他们的软件提供专业的技术支持。无论如何,在你的代码发生问题之前让你的数据库管理员可以管理源代码是一件非常重要的事情。

在这篇文章的设计范例部分包括推荐的为应用程序开发者提供的工具。根据这些推荐的内容,数据库管理员对于改变控制策略,程序,以及对开发/测试系统和那些正在运行程序的系统的正确描述这些方面会变的非常的容易,使用SQL Server 2005新的安全特性和DDL触发器可以在生产环境中限制访问和支配(至少是审核)来更好的执行控制策略。如果希望,DDL触发器可以阻止一个数据库中所有的DDL(数据定义语言)声明,或者特殊的某个或者某组声明。

注意没有经过完全的检查的代码是不会从开发阶段送到生产阶段的,我们一定要确保代码万无一失。

尽管如此,我们依然推荐开发者执行Visual Studio的自动部署特性利用最大的生产压力在代码开发周期中来进行测试,在完成后开发者应该将源代码和编译文件传给负责部署的数据库管理员 。

需要注意的是因为.NET Framework的编译器是免费的,所以数据库管理员 没有必要安装Visual Studio 除非他们想利用Visual Studio 中的一些特性来对代码进行检查和调试的处理。

数据库管理员 应该将源文件做好备份,然后将检查后的代码和编译后的文件保存在另外的一个位置,这样可以对代码作一个很好的保护。

我们同样建议副本应该在每台它加载程序集的数据库上进行关联。这意味着在开发代码目录上和多个数据库管理员 目录上执行的是单一副本。如下图,在数据库利用CREATE ASSEMBLY命令加载了程序集后所有的支持文件例如源代码,文档都通过ALTER ASSEMBLY命令加载。

ALTER ASSEMBLY LeastSquaresSqlFunction
ADD FILE FROM 'D:\Production System\Source Code\Least Squares\LS1.cs';

◆Productivity Tip
注意 ALTER ASSEMBLY命令支持在单一语句中加载多个文件。
◆数据库管理员 和开发者都应该在检查完代码后作出一个审核日值改变的注释。
◆WinDiff 工具(或者 Visual SourceSafe Compare) 是一个很好的代码比较的工具,详细信息请查阅:WinDiffhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/tools/tools/windiff.asp.
◆Productivity Tip

当Visual Studio 使用SQL Server Database Engine .NET Framework 编程 API 编译应用程序时,编译输出面板包括所需的编译器命令行工具。他可以被减切并且复制到一个发布命令文件,数据库管理员可以用它重新编译应用程序。

Release 管理

在源代码在专业的控制保护下,开发者提交了源文件和编译文件。这时release管理器在代码和架构配置不当的情况下就有了很大的作用。如果希望了解它为什么如此重要,可以关注这篇文章下面有关SQL Server 2005 的部分。

SQL Server 2005 的工具设置使得数据库管理员 和开发者可以在一个公用源代码库上协同工作。Microsoft SQL Server Management Studio 可以从Microsoft Visual SourceSafe或者其他地方加载和保存源控制应用的脚本。

图 5

数据库管理员对开发源代码项目有读权限,这样他可以拷贝特定的系统上释放的项目的脚本和源代码。释放管理的另一个选项就是提取适当的源代码的版本并把他们放到一个数据库管理员 可以访问的文件夹里。使他们可以在共享SQL Server 上重新编译和加载。


共10页: 上一页 [1] [2] [3] [4] [5] [6] 7 [8] [9] [10] 下一页
【内容导航】
深入SQL Server 2008
专题:ASP.NET 2.0基础开发指南
.NET移动与嵌入式技术专题
.NET Framework新手入门专题
VS.NET实用开发专题
 
 验证码: (点击刷新验证码)   匿名发表
  • 野蛮生长

  • 作者:冯仑著
  • “地产界的思想家”冯仑纵横生意江湖20年来,第一次系统梳理出书。  三十年来中国民营企业从前公司时代发展到公司时代,21..
Copyright©2005-2008 51CTO.COM 版权所有