您的位置:首页 > 编程语言 > ASP

ASP.NET WEB群集使用SQL Server保存状态

2004-08-09 11:30 513 查看
参考以下文章

Using SQL Server for asp.net session state

ASP.NET Session State Management Using SQL Server


以下是我的安装过程和简要说明:

一、 MS SQL Server安装及设置


1、 按照默认设置安装MS SQL Server 2000简体中文企业版,注意用户验证采用混合验证方式,sa用户密码不能太简单。并将SQL Server数据库文件存放目录设置为D盘,SQL Server系统文件安装到默认目录中。
2、 安装MS SQL Server 2000 SP3补丁程序,确保SQL Server数据库的安全。

二、 状态服务数据库安装及设置


创建数据库
• 启动“SQL查询分析器”,链接到状态服务器上安装的SQL Server数据库。
• 打开并执行InstallSqlState.sql脚本文件。默认情况下,该文件在system drive\Windows\Microsoft.NET\Framework\version\ 目录下,在本服务器中,脚本文件位置为:C:\Windows\Microsoft.NET\Framework\v1.1.4322\InstallSqlState.sql
• 如果采用信任链接(trusted connections)方式链接到数据库(我们不采用该方式),那么在创建状态数据库以后你必须修改数据库的拥有者(ownnership)。在“SQL查询分析器”中,运行:

use ASPState
exec sp_changedbowner 'sa','true'

• 如果你使用SQL验证方式链接数据库并进行访问(我们采用该方式),那么需要为Session State创建一个SQL用户,它必须拥有的最小权限为:能够执行ASPState数据库中的存储过程。
如果你不觉得危险,可以将该用户设置为ASPState数据库的dbo。
创建用户 aspnetstate ,将该用户设置为ASPState数据库和tempdb 数据库的dbo_owner角色。

修复bug
由于InstallSqlState.sql安装在SQL Server 2000 SP3上存在访问权限的bug,因此需要进行一些修正,请按照下面的说明进行。
1、在“SQL查询分析器”中运行下列语句,设置cross-database ownership chaining

use master
go
EXEC sp_configure 'Cross DB Ownership Chaining', '0'; RECONFIGURE
Go

2、重新启动SQL Server,在“SQL查询分析器”中,执行下列命令

use master
go
EXEC sp_dboption 'ASPState' , 'db chaining', 'true'
Go
三、 WEB服务器配置
修改WEB服务器上Web.Config中的相应配置

<sessionState mode="SQLServer" stateConnectionString="tcpip=192.168.1.238:42424" sqlConnectionString="data source=192.168.1.238;user id=aspnetstate;password=pwd"
cookieless="false" timeout="40" />
其中,pwd用真实的密码替换。

另外的bug:
我在实际安装过程中,按照以上步骤可以成功,但是状态服务器重新启动以后,会出现用户没有权限访问tmpdb数据库的错误,错误信息如下:
SELECT permission denied on object 'ASPStateTempApplications', database
'tempdb', owner 'dbo'.
INSERT permission denied on object 'ASPStateTempApplications', database
'tempdb', owner 'dbo'.
SELECT permission denied on object 'ASPStateTempApplications', database
'tempdb', owner 'dbo'.

经检查,发现每次重新启动状态服务器以后,tmpdb数据库的dbo帐号丢失,经过向微软咨询,得到的答复是“tmpdb数据库是会在每一次重启后清除dbo帐号”,

因此暂时的解决办法是:
将sqlserver connnectionstring 中验证的帐号,给它在sqlserver中加上system administrator的权限. 这样无论是否重新启动,我们都由权限去访问tempdb中的那两个表。这样做存在一些安全隐患,请注意系统的安全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: