热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

分析SQLServer2005SQLCLR代码安全性

提要在SQLServer2005内运行.NET框架代码是一件令人激动的事情还是一种要挟?本系列文章将全面探讨这类SQLCLR代码的安全标题,以便开发职员和DBA都能够有所鉴戒。一、引言编写运行于

提要 在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代码的进门性文章。

二、安全宿主SQLCLR代码

随着SQLCLR代码的引进,SQL Server 2005现在支撑两种完整不同的运行时刻环境:好的旧的可靠的T-SQL和新的正在发展中的SQLCLR。在过往的几年中,T-SQL随着SQL Server版本的不断升级而不断发展,并且与存储在一个数据库中的数据和对象紧密集成到一起,也与SQL Server中的安全系统良好地集成。相比之下,SQLCLR代码,在内部应用了一种由CLR所供给的完整不同的安全系统,这是一种"温热的"、安全的环境。在此环境下,代码的运行不是基于运行它的用户的安全资格而是基于代码本身的安全资格。同时,SQLCLR代码必需在数据库和服务器的安全范畴内履行;然而,这两种安全系统是基本不同的。如今,微软的SQL Sever开发小组已经研究出一种方法使得这二者共存并能够协同工作。

能够在另外一个利用程序中可靠地安全地宿主CLR是.NET框架2.0的一种新特点。这种宿主环境及其SQL Server实现,正是使得这两种安全系统和平共处的"机密"所在,由于宿主(在此是SQL Server)能够很大程度地把持运行的代码。这意味着,从一种安全角度来看,托管SQLCLR代码不被答应存取没有授权给它的数据库对象。该代码必需运行于用户会话的SQL Server安全高低文中,而且需要应用相干的与T-SQL代码雷同的允许权来激活它。

留心底线是,在一个数据库中,SQLCLR代码不能做比在雷同的安全高低文中等价的T-SQL代码模块更多的事情。

当设计怎样宿主CLR时,微软具有三个重要的设计目标:

·CLR及运行于其中的代码不能让步于SQL Server的安全性和稳固性。

·SQLCLR代码必需遵守SQL Server认证和授权规矩。这在必定程度上意味着,它要运行于用户会话的安全高低文中。

·系统治理员必需能够把持对把持系统资源的存取。这意味着,必需存在一种安全的方法来从SQL Server过程中存取机器资源。

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

sp_configure 'clr enabled',1
GO
RECONFIGURE
GO

当然,你还可以应用新的与SQL Server 2005一起安装的Su***ce Area配置工具来实现这一点,如图1所示。从Windows开端菜单下,选择"Microsoft SQL Server 2005→Configuration Tools→SQL Server Su***ce Area Configuration",再选择"Su***ce Area Configuration for Features",然后从列表下选择"CLR Integration"。

图1.Su***ce Area配置工具-该图展现了怎样应用Su***ce Area配置工具来启动SQLCLR。

因此,准确懂得开关CLR集成特点的含义是十分重要的;然而,它唯一影响的是,是否答应在存储过程、触发器、用户定义类型及用户定义函数中运行SQLCLR代码。假如它被禁用,那么,在该服务器实例中不会履行SQLCLR代码;假如它被启动,那么,任何CLR代码都可以履行(当然,假定用户拥有准确的履行权限)。假如它被禁用,它不会禁止你把SQLCLR程序集安装到数据库中。你可以安装所有你想应用的程序集(当然,假定你拥有这样做的属性允许权),但是它们在任何环境下都不会运行,直到你支撑CLR集成为止。

当SQLCLR代码履行时,它是在一个严格的安全环境中-这是一个既能保护把持系统资源又能保护SQL Server中的数据和对象的层。

图2.安全层:SQLCLR代码并非运行于一个安全真空中。

图2显示了这些安全层。把持系统强迫性应用它自己的把持-应用熟悉的用户和组模式以批准存取具有存取把持列表(ACL)的资源。在Windows中运行的每一个利用程序都需要运行于一个登录安全的高低文-它具有适当的允许权来进行资源存取。即使SQL Server也必需在这一框架内运作。

推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文是关于C#类型系统、值类型和引用类型的概念性笔记。介绍了C#1系统类型的三个特性,静态类型的含义,显式类型和隐式类型的区别。还讨论了类、结构、数组类型、枚举、委托类型和接口类型属于哪一种类型。同时纠正了关于结构、引用类型和对象传递的错误表述。最后提到了C#4中使用动态类型的关键字。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 微软小娜企业版发布新版本,提供构建自定义技能的套件
    微软将向企业级市场发布微软小娜企业版的新版本,该版本提供了构建自定义技能的套件,使企业员工可以更方便地使用数字助理。目前该套件仍处于内测期间,只有部分企业可以获得,其他有兴趣的企业需要继续等待。新版本的套件可以帮助员工构建各种自定义技能,如检查休假余额、创建服务凭证等。微软通过让多个开发人员编辑和管理机器人通道注册配置来改善开发者的体验,团队可以自行访问和更改技能注册,满足企业实际需求。微软小娜企业版已经在各个行业得到采用,能够帮助员工专注于优先事项,将非优先处理的任务交给微软小娜处理。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
author-avatar
mobiledu2502881483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有