刚装完了一台服务器,对出现的问题做个记录,以便总结经验,吸取教训:
服务器硬件配置:IBM x3650 M3 64位,4*4G内存 3*300G硬盘,。
服务器软件系统:安装windows server 2003 64位企业版,数据库SQL Server 2005,windows身份验证,.net framework 3.5 sp1。
网站程序使用Visual Studio 2008设计,设计时使用自带SQL Server 2005 Express数据库。调试成功后再移植到服务器上运行。移植过程中出现以下问题及解决方法。
Web.config文件连接字符串如下:
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\aaaa.mdf; Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
错误1:在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错)
解决:因为在设计时使用的是Visual Studio 2008自带的SQL Server 2005 Express数据库,默认实例是SQLEXPRESS,而服务器中SQL Server 2005是企业版,实例名不同,需要更改实例名。
错误2:在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: SQL 网络接口, error: 25 - 连接字符串无效)
解决:同上例的解决办法,实例名改为MSSQLSERVER后出现此问题,出错的原因是误认为MSSQLSERVER就是实例名。其实在安装时是采用了SQL Server的默认安装,没有实例名,所以只要取消SQLEXPRESS就行。
错误3:此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭
解决:同上例的解决办法,取消掉SQLEXPRESS以后出现此错误,原因是连接字符串中User Instance=True,改为User Instance=False,解决此问题。
错误4:无法打开物理文件 "d:\inetpub\wwwroot\App_Data\aaaa.mdf"。操作系统错误 5:"5(拒绝访问。)"。
尝试为文件 d:\inetpub\wwwroot\App_Data\aaaa.mdf 附加自动命名的数据库,但失败。已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
解决:因为aaaa.mdf在移植过来以前没有USER权限,在“属性”-“安全”增加USER权限并设置读写权限,并且同一目录下的aaaa_Log.ldf也要设置相同的读写权限,就可解决问题。
错误5:在数据库 'master' 中拒绝了 CREATE DATABASE 权限。
尝试为文件 D:\Inetpub\wwwroot\App_Data\aaaa.mdf 附加自动命名的数据库,但失败。已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
解决:这是数据库用户的权限问题,解决办法同下一个错误。
错误6:用户 NT AUTHORITY\NETWORK SERVICE 登录失败
解决:下面的内容是复制别人的文章。
当连接sql server使用信任连接(参看Web.Config文件)时就会出这个错误,在Windows XP当中,ASP.NET的运行帐号是ASPNET,而在Windows server 2003,2008中则改为了Network Service,直接把这个用户加到sql server的登陆帐号里面就好了 当然添加ASPNET用户时也是如此,具体的解决方法:
第一步:把'NT AUTHORITY\NETWORK SERVICE' 添加到Administrator组中。
我的电脑-->右键-->管理-->本地用户和组,
选择“组”-->双击Administrators-->单击“添加”-->单击“高级”-->单击“立即查找”-->在下面的列表中选择Network Service用户-->两次单击“确定”-->加入。
第二步 在企业管理器中加入NetWord Service用户。
打开Sql Server企业管理器-->选择数据库实例-->打开“安全性”节点-->选择“登录”-->在右边的列表中单击右键-->选择“新建登录”-->常规---->搜索---->高级----->立即查找----->找到:NETWORK SERVICE--->点击确定,此时返回到新建上面登录名,文本中已有:NT AUTHORITY\NETWORK SERVICE。
接着------->左边导航:服务器角色勾选sysadmin-----> 左边导航:用户映射---->勾选要连接的数据库或者所有数据库。
到此为止: 测试一下 是不是成功了! 呵呵
下面为连接配置:
<connectionStrings>
<!--sql验证-->
<!--<add name="ConnectionString" connectionString="Server=.;Database=GA_GaGaHjt;Uid=sa;Pwd=sa" providerName="System.Data.SqlClient" />-->
<!--win验证-->
<add name="ConnectionString" connectionString="Database=GA_GaGaHjt;Server=.;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
</connectionStrings>
注:使用windows 身份验证时(本人使用微软企业库5.0) 必须写上:providerName="System.Data.SqlClient 否则会报错:
“The type Database cannot be constructed. You must configure the container to supply this value.”
总结一下:
首先系统软件的安装要满足硬件设备和应用软件的要求,因为服务器是64位,内存大于4G,因为此只能安装64位的操作系统在才发挥硬件的作用。另外网站的设计采用Visual Studio 2008,所以服务器需要安装.net framework 3.5。
第二、Web.Config中Sql Server2005连接字符串的写法很关键,为满足不同的需求,连接字符串的写法多种多样,采用何种写法值得今后安排时间认真学习。
第三、用户权限的知识很重要,这也是一个复杂的问题,需要加强学习深入理解各种用户权限的配置。
最后赞一下微软的Web.config文件,非常方便适用,是一种很好的办法。