關於對SQL注入80004005 及其它錯誤訊息分析_漏洞研究

來源:互聯網
上載者:User
文章中的資訊適用於:  
Microsoft Data Access Components versions 1.5, 2.0, 2.1, 2.5  
Active Server Pages  
Microsoft Visual InterDev, version 1.0  
----------------------------------------------------------------------------  
概要  
本文詳細講述了 Microsoft 資料訪問組件 (MDAC) 收到 0x800040005 錯誤的一些常見原因,MDAC 包括 ActiveX 資料對象、OLE DB 和遠端資料服務 (RDS)。 同時,本文還討論了其它一些錯誤訊息,包括 80040e21、80040e14 和80040e10。  

更多資訊  
80004005 錯誤訊息可歸納為:“出於某種原因,我無法訪問您的資料”。 本文給出了各種 80004005 錯誤訊息的列表、其中列舉了這些錯誤訊息的最常見起因及其疑難解答步驟。 雖然本文假定您是在 Active Server Page (ASP) 頁面(.asp) 中使用 ActiveX 資料對象 (ADO),但這些起因和很多疑難解答步驟同樣適用於任何其它通過 ODBC 訪問資料的環境。  

錯誤訊息列表  
這一節我們介紹了各種錯誤訊息的文本,以及導致錯誤的原因。  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver]  
The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.  

原因  
該錯誤的發生,通常是因為 Internet Information Server (IIS) 所使用的帳戶(通常是 IUSR)沒有正確的 Windows NT 許可權,因而無法訪問基於檔案的資料庫或包含檔案的檔案夾。請檢查這些檔案和檔案夾的使用權限設定。 確認您能夠建立和/或刪除任何臨時檔案。 臨時  
檔案一般都建立在與資料庫相同的檔案夾下,但也可以建立在其它檔案夾下,如 /Winnt。您可以使用 Windows NT 檔案監視器來檢查訪問檔案失敗的原因。 Windows NT 檔案監視器可從以下 Web 網站上得到:  

http://www.sysinternals.com。  

如果您使用的是該資料庫的網路路徑(UNC 或映像磁碟機),請檢查共用、檔案及檔案夾上的許可權。確認檔案及資料來源名 (DSN) 沒有被標記為獨佔方式。使用一個使用本地磁碟機代號的系統 DSN。 如有必要,把資料庫移至本地磁碟機,然後對其進行測試。錯誤訊息中的 other user(其它使用者)有可能是 Visual InterDev。 請關閉任何包含該資料庫資料連線的 Visual InterDev 工程。  

錯誤也可能是由委派問題引起的。 檢查可能存在的任何驗證方法(“基本”而不是NTLM)。 如果連接字串使用的是統一命名規範 (UNC),請嘗試使用“基本驗證”或一個絕對路徑,如 C:\Mydata\Data.mdb。即使 UNC 指向的資源位於本地 IIS 電腦,前述錯誤也有可能發生。  

當訪問連結到某個表的 Microsoft Access 資料庫時,如果這一表處在網路伺服器上的Access 資料庫中,這一錯誤也有可能發生。 這種情況下,請參見以下 Microsoft Knowledge Base 文章以找到可行的解決方案:  

Q189408 PRB: ASP 無法訪問 IIS 4.0 下的網路檔案  
錯誤訊息Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] Couldn't use '(unknown)'; file already in use.  

原因  
資料庫無法正確地為多個使用者鎖定。 詳細資料請參見以下 Microsoft Knowledge Base文章:  

Q174943 PRB: 80004005“Couldn't Use '(unknown)';File Already in Use”  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified.  

原因  
最常見的原因是因為 Global.asa 和 Global.asa 中初始化的連接字串會話變數沒有激發。 您可以通過在 .asp 頁面中加入以下代碼,來檢查該變數有沒有正確地初始化:  














另一個常見原因是因為所使用的連接字串中有太多的空格。  

DSN = MyDSN; Database = Pubs;  

嘗試使用下面的文法代替:  

DSN=MyDSN;Database=Pubs;  

如果 Global.asa 檔案沒有激發,請檢查並確認它是在 IIS 4.0 的應用程式根下,(如果啟動並執行是 IIS 3.0,則應在虛擬根下,並且 Execute 複選框已經選中)。 此外,當 Windows NT 許可權限制了對檔案夾的訪問時,程式設計中的一個錯誤也可能會妨礙 Global.asa 檔案被激發。詳細資料請參見 Microsoft Knowledge Base  
文章:  
Q173742 “BUG: 限制Web 訪問時,Global.asa 不被執行”無法找到 DSN 名。  
請檢查並確認沒有使用“使用者”類型的 DSN。  

如果使用的是檔案 DSN 或系統 DSN,則嘗試把連接字串相應地改為 DSN=MySystemDSN 或 DBQ=MyFileDSN。 簡化!  

檢查並確認安裝了最新的驅動程式。 如有您不能肯定,請從以下 Web 網站下載最新的MDAC(Microsoft 資料訪問組件):  
http://www.microsoft.com/data/  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC  
Driver Manager] Data source name not ??  

原因  
這個問題看起來與電腦上軟體安裝或卸載的順序有關。 如果 ODBC 核心檔案不同步(它們必須為同一版本),就可能出現這種錯誤。  

請從以下 Web 網站下載最新版的 MDAC(Microsoft 資料訪問組件),以升級所有的 ODBC 核心驅動程式:  
http://www.microsoft.com/data/  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Access 97 ODBC driver Driver]  
General error Unable to open registry key 'DriverId'.  

原因  
這一錯誤是由從註冊表中讀取數值時引起的。 請用登錄編輯程式 (Regedt32.exe) 檢查登錄機碼上設定的許可權。 您也可以用 Windows NT 註冊表監視器 (NTRegMon) 來檢查註冊表讀取失敗。 NTRegMon 可從  
以下 Web 網站下載:  
http://www.sysinternals.com  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][dbnmpntw] ConnectionOpen (CreateFile()).  

原因  
這一錯誤有兩種原因。 它們都與許可權有關,或者資料庫與 Web 伺服器不在一台電腦上,或者資料庫正通過 UNC 路徑(\\Server\Share) 被引用。 即使資料庫與 Web 伺服器位於同一台電腦上,UNC 路徑也使 Web 伺服器認為資料庫好象位於網路上的另一台電腦上。  
如果 .asp 頁面正被匿名使用者所訪問,就會發生以下情況:  

IIS 將使用(預設)Windows NT 帳戶:  
USR_。  

因為該帳戶是 Web 伺服器的本地賬戶,所以網路上的其它電腦根本無從得知該帳戶。當 IIS(在 IUSR 帳戶的安全環境下運行)試圖訪問遠端電腦上的任何資源時,遠端電腦將驗證其使用的帳戶。 由於 IUSR 帳戶是本地帳戶,因此對於遠端電腦來說,它是無從得知的,所以訪問被拒絕。  

當匿名訪問引發這個問題時,有兩個解決辦法:  

在“Internet 服務管理員”工具中,從 Web 屬性下將匿名登入帳戶從預設的本地帳戶改為一個基於域的有效帳戶。 在使用者名稱欄位中,輸入要使用的域帳戶,格式為 domain\userid。 這樣,遠端電腦就能用網域控制站來驗證 IIS 傳遞給它的安全憑據。  

-或者-  

在包含您想要訪問的資源的遠端電腦上複製的帳戶  
IUSR_。 如果帳戶是在遠端電腦上建立的,包含完全相同的名稱和密碼,Windows NT 把它  
們視為等價帳戶。  

-或者-  

如果 .asp 頁面只允許經身分識別驗證的訪問,請參考以下內容:  
如果頁面不允許匿名訪問,IIS 將會試圖驗證作出請求的使用者的身份,並使用其安全憑據控制其所有活動,如訪問資料庫的活動。 下面對這種情形下失敗的兩個主要原因做了說明。  

預設情況下,IIS 被配置為以 Windows NT Challenge/Response 作為其驗證方法。  

由於 Windows NT 4.0(及更早版本)安全模型的限制,經過 Windows NT Challenge/Response 身分識別驗證的使用者也無法訪問遠端電腦上的資源。 這通常  
稱為委派問題。 要驗證是不是這種情況,可在“Internet 服務管理員”工具中,從 Web 屬性下選擇基本(明文)複選框,然後清除 Windows NT Challenge/Response。 如果這一步驟解決了問題,很明顯這是一個委派問題。  

-或者-  

如果問題仍舊存在,可能是所使用的使用者帳戶沒有正確的 SQL Windows NT 電腦許可權。 不妨嘗試使用一個明確擁有該SQL 電腦存取權限的帳戶。  

有關委派、IIS 如何通過身分識別驗證來保護 Web 網站,以及相關問題的詳細資料,請參見文章“IIS Authentication and  
Security for Internet Developers”,  
它位於以下 Web 網站:  
http://www.microsoft.com/workshop/s...re/security.asp  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' Microsoft][ODBC Microsoft SQL Driver] Logon Failed()  

原因  
該錯誤是在 SQL 伺服器不接受或不認可所提交的登入帳戶及/或密碼(使用標準安全性時),或者沒有任何 Windows NT帳戶映射到 SQL 帳戶(使用整合式安全性時)時,由 SQL 伺服器產生的。  

如果使用的是標準安全性,說明 SQL 帳戶名稱和密碼不正確。 請嘗試使用系統管理員帳戶和密碼(UID= "SA",密碼為空白)。 這些必須在連接字串行中定義, 因為 DSN 不儲存使用者名稱和密碼。  

如果使用的是整合式安全性,則檢查調用頁面的 Windows NT 帳戶,找出它所映射的目標帳戶。  

SQL 不允許 SQL 帳戶名稱中有底線。 如果某人把 Windows NT 帳戶 IUSR_machinename 手動映射到一個同名的 SQL 帳戶,就會失敗。 請把所有包含底線的帳戶都映射為 SQL 中不包含底線的帳戶名稱。  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][SQL Server] Login failed- User: Reason: Not defined as a valid user of a trusted  
SQL Server connection.  

原因  
SQL Enterprise Manager(企業管理器)中開啟了整合式安全性,而所使用的 Windows NT 帳戶未被映射到 SQL 帳戶。  

請嘗試把 SQL 改用標準安全性(在 Enterprise Manager 中,選擇 Server/SQL Server/Configure/Security Options/Standard。  
如果您是在 IIS 4.0 下運行,則取消選擇該工程的密碼同步化。  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBCMicrosoft Access 97 Driver]Couldn't lock file.  

原因  
這一錯誤可能是由於沒有正確的許可權為 Microsoft Access 資料庫建立鎖定檔案 (.ldb) 而引起的。 預設情況下,鎖定檔案與 Microsoft Access .mdb 檔案建立在同一檔案夾下。  

請嘗試賦予訪問資料庫(通常是 IUSR_machinename)的使用者以共用/檔案夾的完全控制許可權。  

有時,共用資料夾使用權限被設定為唯讀。 您也可以嘗試更改串連模式,這時可以使用以下範例程式碼:  

Set Conn = Server.CreateObject("ADODB.Connection")  
Conn.Mode = adModeShareDenyWrite '8  
'From Adovbs.inc  
'---- ConnectModeEnum values ----  
'Const adModeUnknown = 0  
'Const adModeRead = 1  
'Const adModeWrite = 2  
'Const adModeReadWrite = 3  
'Const adModeShareDenyRead = 4  
'Const adModeShareDenyWrite = 8  
'Const adModeShareExclusive = &Hc  
'Const adModeShareDenyNone = &H10  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access 97 Driver] '(unknown)' isn't a valid path. Make sure that the path name is spel  
led correctly and that you are connected to the server on which the file resides.  

原因  
Web 伺服器所讀取的路徑是無效路徑。 當 Global.asa 檔案正被使用,而連接字串是Web 伺服器之外的另一台電腦上建立的時候,最容易發生這種錯誤。 如果路徑是一個映像磁碟機代號,它可能只對建立連接字串的客戶電腦有效。  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server Driver][SQL Server] The query and the views in it exceed the limit of 16 tables.  

原因  
查詢過於複雜。 在查詢中有過多的限制。  

錯誤訊息  
Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC SQL Server  

   DRIVER][DBNMPNTW] CONNECTIONWRITE (GETOVERLAPPEDRESULT()).  

原因  
“允許匿名使用者”環境被關閉時,WINDOWS NT 在第一個請求完成後要關閉與 SQL SERVER 串連的管道。 這是因為,第一個到 SQL SERVER 的串連是在 IIS 匿名使用者帳戶中建立的。 然後,IIS 或者選擇在同一線程上類比瀏覽器客戶,或者嘗試去訪問運行於類比使用者環境中的其它線程上的串連。 無論是哪種情況,WINDOWS NT 都會檢測有沒有誰試圖使用某個已在其它使用者環境中開啟的網路具名管道控制代碼,並根據安全規則關閉該管道。 在 SQL SE  
RVER 網路監視器看來,這是WINDOWS NT 發出的關閉具名管道的請求,從而引起 WEB 瀏覽器出錯。  

錯誤訊息  
MICROSOFT OLE DB PROVIDER FOR ODBC DRIVERS ERROR '80004005' [MICROSOFT][ODBCSQL SERVER DRIVER][DBMSSOCN] GENERAL NETWORK ERROR. CHECK YOUR NETWORK DOCUMENT  

原因  
這一錯誤可能發生在 SQL 伺服器被重新命名的情況下。 由於無法找到電腦名稱,引用舊名稱的 DSN 將會失敗。  

錯誤訊息  
MICROSOFT OLE DB PROVIDER FOR ODBC DRIVERS ERROR '80040E21' ERRORS OCCURRED  

原因  
這一錯誤可能是由於試圖向一個欄位插入過多的資料,超過允許值而引起。 比如,一個MICROSOFT ACCESS 欄位格式設定為只接受 25 個字元,而試圖插入 26 個字元。  

錯誤訊息  
MICROSOFT OLE DB PROVIDER FOR ODBC DRIVERS ERROR '80040E14' [MICROSOFT][ODBC MICROSOFT ACCESS 97 DRIVER]  
SYNTAX ERROR IN INSERT INTO STATEMENT.  

原因  
某個列名可能是保留字,如 DATE。 請將列名稱改為一個非保留字,如 SALEDATE。  

錯誤訊息  
MICROSOFT OLE DB PROVIDER FOR ODBC DRIVERS ERROR '80040E10' [MICROSOFT][ODBC MICROSOFT ACCESS 97 DRIVER]  
TOO FEW PARAMETERS. EXPECTED 1.  

原因  
查詢文法中所使用的列名不存在。 往往,這隻是個打字錯誤。 請對照資料庫中的列名,檢查查詢字串中的列名。 如果使用的是 MICROSOFT ACCESS,要確保使用的是實際列名,而不是列的“顯示”名。  

參考  
如要啟用 VISUAL INTERDEV 的遠程工作站工作方式,請按照以下 MICROSOFT KNOWLEDGE BASE 文章所述,以建立系統DSN:  
Q178215 HOWTO: 配置 VID 以用於身分識別驗證 WEB 工程  
Q174943 PRB: 80004005“COULDN'T USE '(UNKNOWN)';FILE ALREADY IN USE”  
Q173742 BUG: 限制 WEB 訪問時,GLOBAL.ASA 不被執行  
Q172864 ASP 頁面無法訪問會話及應用程式物件  
Q156526 串連 ACCESS 資料來源時的一般錯誤 =51  
Q175671 PRB: 訪問時的 SQL80004005 CONNECTIONOPEN (CREATEFILE()) 錯誤  
Q149425 IDC: 執行查詢錯誤,沒有定義為有效使用者  
Q167452 PRB: 使用 ACCESS 資料來源時的‘NOT A VALID PATH'錯誤  
Q125767 PRB: 執行 SQL 查詢後的查詢過於複雜錯誤  
Q166659 PRB: 第二次嘗試時訪問 SQL 資料庫失敗  
Q166029 PRB: 使用 ACCESS 時,無法開啟不明檔案  
Q178215 HOWTO: 配置 VID 以用於身分識別驗證 WEB 工程 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.