2013-02-18 135 views
0

下面的代碼在編碼時工作正常。我在IIS中發佈代碼,然後連接失敗。在IIS中部署後SQL服務器連接失敗?

我知道,當我編碼正給我窗口的登錄憑據作爲和IIS正在採取程序池身份。我怎樣才能將我的Windows登錄憑據傳遞給connectionstring?

Public Shared Function DbCollection(connectionString As String) As DatabaseCollection 
    Dim server As New Microsoft.SqlServer.Management.Smo.Server(connectionString) 
    Return server.Databases 
End Function 

錯誤:

Login failed for user 'Domain\Computername$'. 
    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.Data.SqlClient.SqlException: Login failed for user 
'Domain\Computername$'. 
+0

你爲什麼想要?這種認證應該使用特定於此目的的服務帳戶進行。是否有你想要(或需要)使用你的Windows帳戶的原因。我假設你並不是真正意思你的憑證,而是認證用戶的憑證。 – 2013-02-18 16:25:31

+0

因爲這個應用程序使用我的一個用戶,它只會被部署在他的機器上。 – James123 2013-02-18 16:29:35

+0

這還不是做這件事的最好理由。我仍然建議使用這種訪​​問的服務帳戶。 – 2013-02-18 16:32:22

回答

0

我想添加到@ smoore的帖子,很多依賴於連接字符串,並允許外來連接的SQL服務器的配置。它可能被設置爲只允許sql用戶,而不是從問題描述中看起來像windows用戶。你能否提供連接字符串的詳細信息(在粘貼之前匿名化/刪除用戶/密碼!)以及sql server實例允許哪種認證模式?

+0

連接字符串僅爲'sql server name' – James123 2013-02-18 17:28:12

+0

因此它沒有「Integrated Security = true」或「Username =; Password =;」標籤? – DiskJunky 2013-02-18 18:06:33

+0

Microsoft.SqlServer.Management.Smo.Server($ strServer)將會把剩下的東西 – James123 2013-02-18 18:59:47

1

基於錯誤很可能你的SQL是不是在同一個盒子作爲IIS ...以下是根據配置的不同可能的選項:

  • 如果您沒有使用SQL身份驗證,並且在同一臺SQL: 你應該能夠HttpContext.CurrentUserimpersonating with those credentials來獲取用戶的憑據,但它在很大程度上取決於您的系統設置。可能是您已經模擬(ASP.Net中的默認配置),但是如果您的服務器位於與IIS不同的方框,那麼常規用戶的憑據將無法浮動到其他方框(搜索術語「NTLM one hop」)。
  • 數據庫不同的服務器上,並且你已經在你的組織中使用Kerberos身份驗證:我想你have to be authenticating with Kerberos到另一臺服務器上的模仿。請注意,如果此類身份驗證未配置/允許,則不太可能僅針對您的情況開啓。
  • 數據庫使用Windows身份驗證另一臺服務器上 - 你可以運行在特定的用戶帳戶的所有SQL查詢(或RevertToSelf時有一大堆互操作的下進程的帳戶下運行)。只要它是在你的組織中確定最簡單的方法 -
  • 數據庫的任何地方,你可以使用SQL身份驗證。如果使用此方法,請考慮在配置文件中加密連接字符串。
+0

+ 0:雖然冒充特定用戶的總體思路是不錯的,通常沒有必要冒充「當前用戶」爲默認ASP.Net是「Windows驗證+模擬」。使用Kerberos可能是不可能的(除非它已經設置),模擬一個特定的帳戶(或使用RevertToSelf來處理憑據)可能更容易。對存儲在Web.Config中的加密密碼使用SQL身份驗證可能是最簡單的方法。 – 2013-02-18 16:59:52

+0

我並不是建議將身份驗證切換到Kerberos是一種解決方案,我說如果他已經使用Kerberos,那麼他可以做到這一點。我還給海報帶來了疑問的好處,也許他確實需要使用用戶的憑據,並且使用服務帳戶是不可接受的。看到OP的評論後,我可能會有不同的答案,但是當時我回答了提出的問題。 – 2013-02-18 18:27:33

+1

+1 - 我誤解了你關於Kerberos的陳述。看看我的編輯是否正常 - 試圖清楚說明原始文章中有兩種不同的情況(並可自由添加我的選項)。 – 2013-02-18 18:55:18