2012-06-04 86 views
0

我想在本地機器上設置一個用ASP Classic編寫的遺留站點。我正在使用SQL Server 2008和IIS版本7.5。經典ASP - Ado記錄集打開()

我在嘗試打開到數據庫的連接時遇到錯誤。

this post

使用建議使用.udl文件來創建和測試我的連接字符串,所以我知道在連接字符串作品。我正在使用Windows身份驗證,並且我確信運行此站點的應用程序池可以訪問數據庫,因爲我爲多個站點使用相同的池,並且它們都可以正常連接。

打開連接時,我試圖運行一個存儲過程,如果我只寫出存儲的proc字符串並直接在我的數據庫中運行,它將按預期工作。

下面是代碼:

Const adUseClient = 3 
Const adCmdStoredProc = 4 
Const adOpenStatic = 3 
Const adLockBatchOptimistic = 4 

dim connectstring,sql 
connectstring = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=my-database;Data Source=(local)\SQLEXPRESS" 
sql = "MyProc '" & param1 & "','" & param2 & "'" 
set rs = Server.CreateObject("ADODB.RecordSet") 
rs.CursorLocation = adUseClient 
rs.CursorType = adOpenStatic 
rs.LockType = adLockBatchOptimistic 
' this is where it is failing 
rs.Open sql, connectstring, 3 

其中的一個問題是我得到的錯誤似乎是由IIS產生,它只是說:處理URL時服務器上出現

錯誤。請聯繫系統管理員。

如果您是系統管理員,請點擊此處瞭解有關此錯誤的更多信息。

當我點擊「單擊此處」鏈接時,我會看到有關在IIS 7上運行ASP Classic網站的常規頁面,但找不到與我的錯誤相關的任何內容。我似乎無法找到從哪裏得到關於錯誤的信息。作爲最後一招,我在事件查看器 - > Windows應用程序日誌中進行了檢查,但沒有發現我的錯誤。

我谷歌搜索,並嘗試連接字符串上的多個排列,但無濟於事。如果有人對如何解決這個問題有什麼建議,甚至是在哪裏尋找解決方案的想法,我將不勝感激。非常感謝!

**編輯:**

好吧,我改變了IIS設置顯示在瀏覽器中的錯誤,現在我收到的錯誤消息是比較有用一點,那就是:

Microsoft OLE DB Provider for SQL Server錯誤'80004005'

無法打開登錄請求的數據庫「rw-gp」。登錄失敗。

現在,當我谷歌搜索這個,我發現這往往是一個權限問題。正如您所看到的,我正在使用Windows身份驗證,並且正在具有連接到數據庫權限的應用程序池下運行該站點。我有多個本地設置的ASP.NET網站,可以在此應用程序池中運行,並且可以使用集成安全性進行連接。我不確定發生了什麼問題,有沒有人有任何建議?

+0

這是一個ASP/IIS問題,而不是SQL Server。另外,你有沒有聽說過由字符串連接引起的SQL注入?或者在SQL Server中引用對象時使用模式限定符? – gbn

回答

2

一個ASP經典腳本總是運行使用模擬(這是不同於默認關閉模擬的ASP.NET)。

因此,由於您使用SSPI而需要訪問數據庫的用戶需要被模擬的用戶。

模擬用戶默認情況下指定爲匿名用戶的IUSR帳戶,但是如果您打開了Windows集成安全性,那麼用戶可以通過用戶帳戶運行客戶端瀏覽器。無論哪種情況,您都需要確保被模擬的用戶有權訪問數據庫或停止使用SSPI。

如果您只使用匿名訪問,則可以通過IIS管理器指定用於匿名訪問的帳戶是應用程序池標識。