SQL Server LocalDB 在 ASP.NET中的应用介绍_实用技巧

我相信世界总是会向更好的方向发展,今年的维也纳新年音乐会没有往年的明星级指挥,但是它通过回归奥地利的本质,以更传统的聚合法则,让过往的艺术家们一代代创造的灿烂,在新的指挥手中,迸发出更深邃的音节。在此,也祝大家新年快乐。
如同交响乐一样,构造软件系统不一定必须某个强大的明星驱动,我们站在历代ADO.NET的肩膀上,更好地回归到SQL Server的核心开发:SQL Server LocalDB 在 ASP.NET中的应用。

使用SQL Server LocalDB的优势

快速部署完整的SQL Server。以后项目可以无缝升级到高级版本。 它是真正的SQL Server,直接使用到SQL Server 2012的所有功能。免费,对于初创企业和低配置服务器,可以节约前期的不少运营成本。
缺点与限制

必须对服务器有完全控制权限,租用虚拟主机的用户无法使用(但是目前一个VPS和虚拟主机的价钱差别也不大)。无法通过bin文件夹中放置DLL进行绿色部署,服务器必须安装SQL Server Express LocalDB。

首先我们必须明白怎样管理数据库,在SQL Server 2012管理工具中:

使用 (LocalDb)\v11.0 字符串来连接到当前本机的 LocalDB运行时环境。

.net framework早于4.0.2的情况下,直接使用命名管道来连接 LocalDB,例如:"Server=np:\\.\pipe\LOCALDB#F365A78E\tsql\query"

这一步与我们的开发环境设置关系不大,但是对于将来调试差错,有很大帮助。

下面通过两个步骤设置在ASP.NET中运行LocalDB:

1:解决数据库文件定位

使用连接字符串:connectionString="Data Source=(LocalDb)\v11.0; Initial Catalog=xxx;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\test666.mdf"。

我们把系统生成的数据库文件,在管理工具中附加到SQL Server中,会看到程序自动创建了一个名为DBBases的表

以上几点解决了基本的连接功能,Visual Studio 2012 与SQL Server 2012 Management Studio中调试通过。

但是,问题只解决了一半, 注意上面我用的是“vs2012”、“调试”这两个词语,目前我还没说过在“IIS”中“运行”。

2:IIS中的用户权限问题

在visual studio 中调试项目,使用的是windows 本地用户进程,该进程具有比较高的权限(一般情况下与Administrator无异)。

而要在 IIS 中实际运行项目,执行程序时windows7、2008、2008R2、Server 2012默认都是使用ApplicationPoolIdentity进程。

ApplicationPoolIdentity进程的权限在本篇中不过多解释,在这里你只要把它理解为一个权限非常低的用户进程(IIS_IUSRS组)即可。就算LocalDB是再怎么精简的版本,它毕竟也是SQL Server,在最极端的情况下,需要经历“开启sqlserver.exe进程”、“创建数据库”两个步骤,不是ApplicationPoolIdentity进程(IIS_IUSRS组)想做就做的。

解决办法

1: 应用程序池 – 高级设置 – 标识, 以localsystem账户运行。Localsystem进程等同于本地administrator。

这样的解决办法最简单,直接通过localSystem账户运行进程,一切烦恼瞬间化为乌有。但是随之而来反面因素便是带来了潜在安全威胁: 如果一个不怀善意的客户端上传了一段恶意代码, 那么恶意代码一旦获得运行机会,那么将是以administrator的权限运行于服务器,这将意味着什么,不必多说。

2:通过AttachDBFile,挂接数据库文件到更高的SQL Server版本解决问题。

LocalDB是真正的SQL Server,可以直接和其它版本SQL Server 无缝兼容,我们只需要把数据库文件挂接到Express或更高版本SQL Server中,

仅仅是需要把:“Data Source=(LocalDb)\v11.0;”修改为: “Data Source=.\SQLExpress”,也可以解决一切烦恼了。这样的做法虽然具备实际意义,但是与本文的主题关系不大,在此也不多描述了。

最后,基于安全因素的运行建议

1:直接使用localsystem运行整个程序,只要不允许客户端上传文件,整套程序可以放心运行。但是大多数情况下一个有意义的web程序都是允许客户端上传文件的,所以列举一个上传文件的解决办法:

在用户上传文件时,把文件放置到别的进程空间中,运行时,通过外链(upload.abc.com)文件的办法,达到了让用户文件运行于绝对安全的进程中。

2:与建议1相反,把涉及到数据库操作的代码封装为服务,通过WCF或Web API的自宿主功能,运行在另一个安全进程中(仅限本地连接),面向公众的Web程序通过本地服务接口调用之,如此可以把一切安全因素最小化。(但是开发过程与维护会增加更高的复杂度)

时间: 2025-01-20 20:53:27

SQL Server LocalDB 在 ASP.NET中的应用介绍_实用技巧的相关文章

详解ASP.NET中Session的用法_实用技巧

      当用户在应用程序的页之间跳转时,存储在 Session 对象中的变量不会清除,而用户在应用程序中访问页面时,这些变量始终存在.当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象.当会话过期或被放弃后,服务器将终止该会话.        通过向客户程序发送唯一的 Cookie 可以管理服务器上的 Session 对象.当用户第一次请求 ASP 应用程序中的某个页面时,ASP 要检查 HTTP 头信息,查看是否有在报文中有

ASP.NET中如何实现回调_实用技巧

一.引言 在ASp.NET网页的默认模型中,用户通过单击按钮或其他操作的方式来提交页面,此时客户端将当前页面表单中的所有数据(包括一些自动生成的隐藏域)都提交到服务器端,服务器将重新实例化一个当前页面类的实例来响应这个请求,然后将整个页面的内容重新发送到客户端.这种处理方式对运行结果没什么影响,但页回发会导致处理开销,从而降低性能,且会让用户不得不等待处理并重新创建页,有时候,我们仅仅只需要传递部分数据而不需要提交整个表单,这种默认的处理方式(指的是提交整个表单进行回发方式)显得有点小题大做了,

ASP.NET中Ajax怎么使用_实用技巧

在ASP.NET中应用Ajax的格式如下: 前台代码(用JQuery库) $.ajax({ type: "POST", async: true, url: "../Ajax/ajax.ashx", dataType: "html", data: null success: function (result) { //do successful sth }, error: function (XMLHttpRequest, textStaus, e

ASP.NET中实现模板页_实用技巧

使用过JavaStruts的程序员应该知道,Struts中有一个模板标记,虽然其使用起来比较复杂,但对于有大量页面的程序来说其带来了很多方便.但是,在ASP.NET中并没有现成实现可用,这方面国内讨论的也很少,其实,重写sender方法我们也可以实现类似的功能.下面是我项目中使用的一个基类模板类.  1using System; 2using System.Web.UI; 3 4namespace RepeaterDemo.Web.PageTemplate 5{ 6 /**//// <summa

asp.net身份验证方式介绍_实用技巧

windows身份验证: IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问. Forms验证:用Cookie来保存用户凭证,并将 未经身份验证的用户重定向到自定义的登录页. Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录 和核心配置文件服务. 一. 配置windows身份验证 1)配置IIS设置 2)设置Web.config <system.web> <authentication mode = &quo

ASP.NET预定义模板介绍_实用技巧

一. 实例演示:通过模板将布尔值显示为RadioButton 在默认的情况下,不论是对于编辑模式还是显示模式,一个布尔类型的属性值总是以一个CheckBox的形式呈现出来.我们创建如下一个表示员工的类型Employee,它具有一个布尔类型的属性IsPartTime表示该员工是否为兼职. public class Employee { [DisplayName("姓名")] public string Name { get; set; } [DisplayName("部门&qu

ASP.NET中动态控制RDLC报表_实用技巧

在asp.net程序中,可以选择使用水晶报表,功能确实强大.但是web版的水晶报表好像存在版权的问题.如果所作报表不是复杂的一塌糊涂的话,可以使用微软自带的Rdlc报表. Rdlc优点: 1:Rdlc报表设计简单 2:结果存成xml,易于控制 3:导出格式作的很不错 这里所说的动态控制报表所指的是:在一些时候,制作了报表之后希望在运行中可以动态的做一些小修改,比如说列的位置,用户控制显示那些列等等. 控制方法,尝试了这么几种: 1:控制微软提供的报表对象的属性: 2:报表全部自动生成 3:修改报

asp.net中如何实现水印_实用技巧

水印是为了防止别盗用我们的图片. 两种方式实现水印效果 1)可以在用户上传时添加水印. a) 好处:与2种方法相比,用户每次读取此图片时,服务器直接发送给客户就行了. b) 缺点:破坏了原始图片. 2)通过全局的一般处理程序,当用户请求这张图片时,加水印. a) 好处:原始图片没有被破坏 b) 缺点:用户每次请求时都需要对请求的图片进行加水印处理,浪费的服务器的资源. 代码实现第二种方式: 复制代码 代码如下: using System; using System.Collections.Gen

ASP.NET母版页基础知识介绍_实用技巧

模板页是做什么的? 利用模板页可以方便快捷的创建统一风格的ASP.NET网站,并且容易管理和维护,提高了效率. 模板页为网页定义所需要的外观和标准,在母版的基础上创建包含显示内容的各个内容页.当用户请求内容页时,这些内容页与母版页合并,这样,模板页的布局与内容页的布局就可以组合在一起输出了. 模板页一般用来: 1.通过修改模板页来处理网页的通用功能. 2.可以方便的创建一组控件和代码,并应用于一组网页. 3.通过允许控制占位符控件的呈现方式,模板页可以在细节上控制最终页的布局. 模板页与普通页