我相信世界总会朝着更好的方向发展。今年的维也纳新年音乐会没有往年明星级别的指挥,但通过回归奥地利的精髓,采用更传统的聚合法则,让过去的艺术家们一代又一代地精彩创作。在新指挥手中,生成有更深层次的音节。在此,祝大家新年快乐。就像交响乐一样,软件系统的构建不一定需要强大的明星驱动。我们站在历代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连接到此计算机的当前本地数据库运行时环境。条件是。net framework早于4.0.2,通过使用命名管道直接连接LocalDB,例如:' server=np: 。 pipe 本地数据库# f365a78e tsql query '。这一步与我们的开发环境设置关系不大,但对以后调试错误很有帮助。通过以下两个步骤在ASP.NET运行localdb。使用连接字符串解决数据库文件位置问题:connectionstring=' data source=(local db) v 11.0;初始目录=xxx综合安全=SSPI;AttachDBFilename=| DataActiVe | test 666 . MDF ' .
当我们在管理工具中将系统生成的数据库文件附加到SQL Server时,我们会看到程序会自动创建一个名为DBBases的表。以上几点已经解决了基本的连接功能,在Visual Studio 2012和SQL Server 2012 Management Studio中的调试已经通过。然而,问题只解决了一半。请注意,我上面用的是“vs2012”和“调试”两个字,还没有在“IIS”里说“运行”。2.2中的用户权限:IIS在visual studio中调试项目使用的是windows本地用户进程,权限相对较高(一般与Administrator相同)。要在IIS中运行项目,windows7、2008、2008R2和Server 2012在执行程序时都默认使用ApplicationPoolIdentity进程。本文不会过多解释ApplicationPoolIdentity进程的权限。这里你只需要把它理解为一个权限很低的用户进程(IIS_IUSRS组)。尽管本地数据库是一个精简版本,但它也是一个SQL Server。在最极端的情况下,它需要经历两个步骤:“打开sqlserver.exe进程”和“创建数据库”,这不是ApplicationPoolIdentity进程(IIS_IUSRS组)想要做的事情。解决方案1:应用程序池-高级设置-徽标,作为本地系统帐户运行。本地系统进程相当于本地管理员。
这个解决方案是最简单的。直接通过localSystem账号运行流程,所有的烦恼都会瞬间消失。然而,随之而来的负面因素是潜在的安全威胁:如果恶意客户端上传了一段恶意代码,一旦有机会运行,恶意代码就会在管理员的授权下在服务器上运行,这并不意味着什么。2.通过附加数据库文件,将数据库文件附加到更高的SQL Server版本以解决问题。本地数据库是一个真正的SQL Server,可以直接与其他版本的SQL Server无缝兼容。我们只需要将数据库文件附加到SQL Server Express或更高版本上,只需要放“数据源=(LocalDb) v 11.0;”。可以改为: "数据源=。 sqlexpress”,所有的麻烦都可以解决。这种做法虽然有实际意义,但与本文主题关系不大,此处不再赘述。最后,基于安全因素的运行建议如下:1 .使用localsystem直接运行整个程序,只要不允许客户端上传文件,整个程序就可以放心运行。然而,在大多数情况下,一个有意义的网络程序允许客户端上传文件,因此列出了一个上传文件的解决方案:当用户上传文件时,他们将文件放在其他进程空间中,当他们运行时,他们链接文件(upload.abc.com)以使用户文件在绝对安全的进程中运行。
2.与建议1相反,与数据库操作相关的代码被封装为一个服务,并通过WCF的自托管功能或Web API在另一个安全进程(仅本地连接)中运行,面向公众的Web程序通过本地服务接口调用它,这样可以将所有安全因素降到最低。(但是,开发过程和维护会增加复杂性。)