2015-08-28 27 views
0

我在捐贈給我們機構的網站上工作,現在我試圖決定如何在Web.config文件中設置兩個連接字符串(CS)(某些這些連接字符串中的細節由捐贈者編輯)。 的CS我有一個關於中的sessionState被引用的問題:在會話狀態連接字符串中使用什麼賬號

<sessionState allowCustomSqlDatabase="true" mode="SQLServer" sqlConnectionString="DevelopmentSessionState" cookieless="false" timeout="20"/> 

我想確定我應該使用什麼類型的賬戶在SessionState的CS的用戶名。爲了使網站正常運行,我使用了sa帳戶,但我知道這不是一個好主意 - 我正在尋找一個帳戶來取代sa。我不知道這是我應該在SQL Server中定義的用戶,還是我應該使用預先存在的帳戶,或者此用戶應具有哪種類型的訪問權限。

我對會話狀態需要單獨連接字符串的理由也很模糊。該網站的C#代碼顯式使用其他CS連接到數據庫,但唯一的SessionState CS引用位於Web.config中。過去幾天,我已經閱讀了很多關於會話狀態和SQLServer模式的內容,但是我還沒有找到有關使用哪個帳戶或SessionState需要單獨CS的原因的建議。

謝謝, 克里斯

更新:這是我代替我的用戶名在會話狀態CS SA(我替換USERID我的實際用戶ID),這種情況發生的異常結束的堆棧跟蹤:

Server Error in '/' Application. 

Failed to login to session state SQL server for user 'USERID'. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: Failed to login to session state SQL server for user 'USERID'. 

Source Error: 


An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 



[SqlException (0x80131904): Login failed for user 'USERID'.] 
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4876535 
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194 
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1121 
System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +35 
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) +144 
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) +367 
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +225 
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +189 
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +185 
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +31 
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +431 
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +66 
System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +499 
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +65 
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117 
System.Data.SqlClient.SqlConnection.Open() +122 
System.Web.SessionState.SqlStateConnection..ctor(SqlPartitionInfo sqlPartitionInfo) +93 

[HttpException (0x80004005): Failed to login to session state SQL server for user 'USERID'.] 




Version Information: Microsoft .NET Framework Version:2.0.50727.5485; ASP.NET Version:2.0.50727.5491 
+0

一般來說,你可以共享多個應用程序之間的sessionState數據庫,所以有一個帳戶是接受的做法。無論您選擇使用SQL還是集成Windows身份驗證,您都應該選擇一種設計選擇來衡量組織的整體策略。例如,某些環境更喜歡使用Windows身份驗證來避免將系統密碼交給開發人員。 – mjw

+0

謝謝mjw--這對我有很大的幫助。我現在應該可以選擇適當的帳戶。 – Chris

回答

0

以下步驟介紹如何運行InstallSqlState.sql和UninstallSqlState.sql腳本文件以配置SQL Server模式會話狀態管理。

在SQL查詢分析器的文件菜單上,單擊打開。 在「打開查詢文件」對話框中,瀏覽到InstallSqlState.sql腳本文件,然後單擊「打開」。默認情況下,InstallSqlState.sql位於下列文件夾之一:

system drive\WINNT\Microsoft.NET\Framework\version\ 
system drive\Windows\Microsoft.NET\Framework\version\ 

InstallSqlState.sql後在SQL查詢分析器打開後,點擊查詢菜單上運行來運行該腳本。

在運行UninstallSqlState.sql腳本文件以卸載SQL Server模式會話狀態管理配置之前,您必須停止w3svc進程。要這樣做,請按照下列步驟操作:

  1. 在Windows開始菜單上,單擊運行,鍵入cmd,然後單擊確定以打開命令提示符。
  2. 在命令提示符處,鍵入net stop w3svc。您收到確認w3svc進程已停止。
  3. 在SQL查詢分析器的文件菜單上,單擊打開。
  4. 在「打開查詢文件」對話框中,瀏覽至UninstallSqlState.sql腳本文件,然後單擊「打開」。默認情況下,UninstallSqlState.sql位於以下文件夾之一:

    系統驅動器\ WINNT \ Microsoft.NET \ Framework \ version \ 系統驅動器\ Windows \ Microsoft。NET \ Framework \ version \

  5. 在SQL查詢分析器中打開UninstallSqlState.sql之後,單擊查詢菜單上的執行以運行該腳本。

  6. 卸載SQL Server模式會話狀態管理配置後,必須重新啓動w3svc服務。要重新啓動w3svc進程,請在命令提示符處鍵入net start w3svc

修改應用程序的Web.config文件

要實現ASP.NET SQL Server模式會話狀態管理,您必須按如下修改應用程序的Web.config文件的<sessionState>元素:

  1. <sessionState>元素的mode屬性設置爲SQLServer以指示會話狀態存儲在SQL Server中。
  2. 設置sqlConnectionString屬性以指定SQL Server的連接字符串。例如:

    sqlConnectionString = 「數據源= MySQLServer;用戶ID =;密碼=」

注意:用戶,<user name>,必須具有的權限在數據庫上執行此操作。

修改後的<sessionState>元素應如下所示:

<sessionState 
      mode="SQLServer" 
      sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>" 
      cookieless="false" 
      timeout="20" 
    /> 

注意:確保你使用正確的情況下,當你指定<sessionState>元素和關聯的屬性值。此代碼區分大小寫。

+0

感謝大家提供有用的信息 - 我想我已經想通了,但我一直無法找到任何用戶,但sa在這個連接字符串中起作用。我認爲我的問題不知道用戶必須擁有什麼權限。穆罕默德,我知道你說過用戶必須有權執行這個操作,但我不知道這個操作是什麼意思......連接到數據庫?這些權限是否在SQL Server Management Studio中定義? – Chris

1

我終於成功地創建了一個在會話狀態CS中工作的用戶。

首先,不是運行InstallSqlState.sql,而是運行aspnet_regsql.exe。 SQL文件有一個警告,不要單獨運行它,而應該使用aspnet_regsql.exe,所以我這樣做了。我使用了以下選項:

aspnet_regsql.exe -ssadd -sstype p -E -S servername 

這創建了數據庫ASPState,這意味着我必須在web.config中使用mode =「SQLServer」。

我也不得不角色「公共」添加到ASPState的是這裏建議:包括給予「公共」權限 http://forums.asp.net/t/969708.aspx 這個職位,但沒有談論這將是需要的,所以我不得不與之前的實驗CS工作。右鍵單擊db ASPState,選擇屬性,選擇權限,突出顯示數據庫角色'public',然後勾選'Grant'標題下的權限,即可添加權限。

最後,我使用SQL Server身份驗證登錄到SQL Server Management Studio並創建了一個新用戶S1。我只使用上述的相同導航功能給S1授予「連接」權限。 S1在會話狀態連接字符串中替換了sa。以下是會話狀態CS的web.config條目。很顯然,我改變了PW和服務器名,但你可以看到我使用的格式:

<add name="DVSessionState" connectionString="Data Source=servername;User Id='S1';Password='password'"/> 
相關問題