ASP.NET WEB群集使用SQL Server保存状态
2008-01-03 09:41
381 查看
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中的那两个表。这样做存在一些安全隐患,请注意系统的安全。
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中的那两个表。这样做存在一些安全隐患,请注意系统的安全。
相关文章推荐
- ASP.NET WEB群集使用SQL Server保存状态
- [ASP.NET]配置使用SQL Server保存会话状态
- [ASP.NET]配置使用SQL Server保存会话状态
- [ASP.NET]配置使用SQL Server保存会话状态
- ASP.Net Web 服务 – 如何使用会话状态
- asp.net 使用 StateServer 持久保存 Session 会话状态 !
- [保存]C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- 使用Sql Server管理asp.net的web application会话状态
- Asp.Net Core 简单的使用加密的Cookie保存用户状态
- [转]Asp.Net Core 简单的使用加密的Cookie保存用户状态
- ASP.Net Web 服务 – 如何使用会话状态
- ASP.NET 实践:在视图状态中保存值
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 webservice/API
- asp.net web中GridView的多种使用方法(详解)
- 让asp.net startkit使用SQL server 2005
- ASP.NET - 自定义控件【第三天 使用控件状态的星级控件】
- 将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005
- ASP.NET配置(web.config)无法连接到SQL Server 数据库的解决方法
- 在ASP.NET Atlas中使用Profile Service保存用户信息(转)