MS SQL Server数据库连接错误的解决方法

相信很多人在用ASP.NET制作网站时都会遇到过链接不上MS SQL Server数据库的问题,而且这个问题并不是每次都出现。以前当我遇到这个问题的时候多数都会重装系统,但是最近我看了一本关于数据库管理的书的时候终于找到导致这个问题的真正原因了。
SQL Server 可以配置为工作于Windows Authentication模式或是工作于Mixed模式。在Mixed模式中,SQL Server可以接受通过Windows AuthenticationSQL Server Authentication的连接。你不能将SQL Server设置为只接受通过SQL Server Authentication的连接。
如果在安装时没有指定,那么SQL Server将默认工作于Windows Authentication模式中,SQL Server将通过在Windows中的登录信息来识别用户。这就是为什么不需要指定任何额外的信任信息就可以从Visual Web Developer中方位SQL Server连接数据库的原因。
可是,在IIS中运行的ASP.NET应用程序其所属用户名为ASPNET的特定用户,其默认权限是无法访问SQL Server的,更不可能访问ASP.NET应用程序的数据库了,因此要在IIS中访问SQL Server就需要给ASPNET帐户赋予相应的权限。(和Visual Web Developer一起发布的集成的Web服务器则是由当前登录用户启动的,因此你基本不用操心,它不需要设置任何安全选项,在默认情况下就拥有访问ASP.NET应用程序的数据库的所需权限。)
解决连接问题的另一种方法是在IIS中启用SQL Server验证,然后再连接字符串中使用用户ID与密码;或是当ASP.NET应用程序以另一个Windows用户而非ASPNET运行时,使用ASP.NET impersonation方法。
为了使ASPNET帐户可以访问ASP.NET应用程序的数据库,需要完成以下步骤:
1)      启动SQL Server Management Studio,指定SQL Server实例名,以Windows验证模式登录。
2)      grantlogin存储过程把Windows的用户添加到SQL Server数据库中。这个命理将赋予ASPNET帐户连接SQL Server的权限。注意要用本机的主机名代替命令中的MachineName
Exec sp_grantlogin ‘MachineName\ASPNET’
3)      在为ASPNET帐户赋予了链接SQL Server的权限后,还需要为其赋予访问ASP.NET应用程序的数据库的权限。注意要用ASP.NET应用程序的数据库的名字代替DateBaseName
USE DateBaseName
Exec sp_grantdbaccess ‘MachineName\ASPNET’
4)      最后,需要赋予ASPNET访问ASP.NET应用程序的数据库内部对象的权限,如执行存储过程,读取和修改表等。最简单的方法是为ASPNET帐户分配一个ASP.NET应用程序的数据库db_owner角色。如果前面的步骤中已经连接到了ASP.NET应用程序的数据库,输入下面的命令:
Exec sp_addrolemember ’db_owner’,’ MachineName\ASPNET’
    现在你就可以从Web应用程序以Windows验证模式连接数据库了。

你可能感兴趣的:(sql,数据库,server,职场,休闲)