快捷搜索:

剖析SQL Server2005 SQLCLR代码安全性(1) - SQLCLR

提纲 在SQL Server 2005内运行.NET框架代码是一件令人激动的工作照样一种要挟?本系列文章将周全探究这类SQLCLR代码的安然问题,以便开拓职员和DBA都能够有所借鉴。

一、 小序

编写运行于宿主在任何情况下的CLR中的.NET代码的主要优点之一是代码存取安然(CAS)。

CAS供给了一种基于代码的而不是基于用户的认证模式以预防各类代码的入侵问题。然则,这种安然模式若何与SQL Server 2005自己的新的增强的安然特性共存呢?默认环境下,你的.NET代码是对照安然的;然则,这两种安然模式很轻易发生冲突而且轻易给你带来一些问题。在本篇中,我们将简短地阐发CAS幕后有关观点和在SQL Server 2005中新引入的一些安然特性;然后,在后面的几篇中阐发若何实现在使用SQL Server所供给的高档可编程特性的同时,使这两种系统协同事情。

好消息是,为了实现SQL Server所供给的安然系统和通用说话运行时候库协同事情,微软已经供给了必然的对象来实今世码节制。然则,也存在许多有趣的问题!

能够用C#,VB或任何其它.NET说话编写存储历程及其它代码模块不停被经久等候,而这恰是SQL Server 2005最冲感民心的特性之一。开拓职员和DBA终极都能够打破存在于扩展存储历程的Transact-SQL(T-SQL)和C++中的羁绊,而用一种真正的具有高度临盆力的说话编写数据库代码!

同时,在数据库办事器的内存空间中运行.NET代码的前景吓坏了某些人,尤其是一些认真保护数据完备性并且确保这些办事器日夜运行的DBA们。运行一些开拓职员的代码(能够完全存取.NET框架和Win32 API)的设法主见导致许多DBA坚持觉得,对运行于办事器中的这样的代码进行掩护根本越过他们的能力之外。

经由过程在会议长进行演讲并进行大年夜量培训活动,以及我向同砚和客户提问"是否在办事器上的.NET代码吓坏了他们及其缘故原由"。终极获得下面一些范例的备受关注的问题:

· 暧昧的安然问题。此中大年夜多半与当前正在呈现的进击问题相关;然则,显然,对有哪些新内容还不理解更为关注。

· 必要进修一种全新的技能来评定是否代码是安然的。

· 在数据和代码之间存在很多的隐隐性,分外是对付应用.NET代码创建用户定义的类型这种新的能力。

· 还有另一种要领能够实今世码与办事器的"混杂",只管OLE自动化(SP_OS*)和敕令外壳系统(xp_cmdshell)存储历程不停可用来让人们运行外部代码。

事实上,在SQL Server 2005中的.NET框架代码,常常被称作是SQLCLR代码,由于它是基于.NET通用说话运行时候库(CLR)。着实,它仅仅是另一种存在和运行于SQL Server内部的代码模块而已。它是新器械,而且很酷,然则也仍只是代码;但决不是T-SQL(仍旧是首选的数据存取编码实现要领)的插件代替品;而是,SQLCLR代码为繁杂的数据库利用法度榜样创始了全新的可能性。迟早大年夜多半的DBA都邑应用它并且将不得不做出着末的抉择-是否让它驻于数据库中。

在本文中,我将探究人们对付SQLCLR代码最关心的一个问题之一:其安然性若何?实际上,我将有意隐隐两种紧张观点-安然性和靠得住性。安然性意味着维持数据的安然,而靠得住性意味着维持SQL Server的安然;靠得住性常常被与安然性相肴杂。是以,只管我主要评论争论安然问题,然则我还要涉及到必然的靠得住性问题。

我将假定,你认识在SQL Server 2005编写.NET代码的优点和基础常识。概括来说,包括下面这些内容:

· 法度榜样集,作为打包、宣布和版本治理的单元

· .NET代码存取安然根基

· SQL Server 2005的新的安然特性

换句话说,本文并不是一篇有关于SQLCLR代码的入门性文章。

· 系统治理员必须能够节制对操作系统资本的存取。这意味着,必须存在一种安然的要领来从SQL Server进程中存取机械资本。

这些目标的最显着的体现之一是,默认环境下,CLR集成是关闭的。假如你想在一个数据库中运行.NET代码,那么一个系统治理员必须把它打开。打开它的T-SQL代码必要应用sp_configure:

sp_configure 'clr enabled',1

GO

RECONFIGURE

GO

当然,你还可以应用新的与SQL Server 2005一路安装的Surface Area设置设置设备摆设摆设对象来实现这一点,如图1所示。从Windows开始菜单下,选择"Microsoft SQL Server 2005→Configuration Tools→SQL Server Surface Area Configuration",再选择"Surface Area Configuration for Features",然后从列表下选择"CLR Integration"。

图1.Surface Area设置设置设备摆设摆设对象-该图展示了如何应用Surface Area设置设置设备摆设摆设对象来启动SQLCLR。

是以,精确理解开关CLR集成特性的含义是十分紧张的;然而,它独一影响的是,是否容许在存储历程、触发器、用户定义类型及用户定义函数中运行SQLCLR代码。假如它被禁用,那么,在该办事器实例中不会履行SQLCLR代码;假如它被启动,那么,任何CLR代码都可以履行(当然,假定用户拥有精确的履行权限)。假如它被禁用,它不会阻拦你把SQLCLR法度榜样集安装到数据库中。你可以安装所有你想应用的法度榜样集(当然,假定你拥有这样做的属性许可权),然则它们在任何情况下都不会运行,直到你支持CLR集成为止。

当SQLCLR代码履行时,它是在一个严格的安然情况中-这是一个既能保护操作系统资本又能保护SQL Server中的数据和工具的层。

您可能还会对下面的文章感兴趣: