參考以下文章
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中的那兩個表。這樣做存在一些安全隱患,請注意系統的安全。