在本機調試 ASP 網站時,常遇到 https://localhost、https://電腦名稱 正常,唯獨 https://127.0.0.1 彈出驗證視窗或拋出 Microsoft VBScript 執行階段錯誤 0x800A0046:權限不足 'GetObject'。本文從根因分析到徹底解決,一次釐清。
| 情境 | 症狀 |
|---|---|
| 新裝 IIS 測試預設頁 | localhost 正常,127.0.0.1 要求帳密 |
| 建立虛擬目錄後 | localhost/虛擬目錄 正常,127.0.0.1/虛擬目錄 401 或 500 |
| 啟用匿名存取後 | 127.0.0.1 不再要密碼,但 localhost 跳 0x800A0046 |
iisstart.asp、localstart.asp 使用 GetObject("IIS://LocalHost/W3SVC/1/ROOT") 讀取 IIS 中繼資料庫,需呼叫端具備「系統管理員」或「IIS_ADMIN」權限。預設匿名帳戶 IUSR_機器名 僅屬 Guests 群組,權限不足導致 0x800A0046。IUSR_機器名 → 確定此時虛擬目錄與 127.0.0.1 免密可進,但 localhost 會噴 0x800A0046。
iisstart.asp 與 localstart.asp原理:強制這兩支頁面改用整合式/NTLM 驗證,由登入使用者的高權限 Token 執行 GetObject,繞過匿名帳戶限制。
Administrator 或您的登入帳號) → 確定iisstart.asp、localstart.asp此舉讓所有匿名請求以管理員身分執行,徹底解決權限問題,但僅限開發/測試環境,生產環境嚴禁使用。
IUSR_<ComputerName>| 環境 | 建議設定 |
|---|---|
| 開發/測試機 | 步驟 1 + 步驟 3(匿名帳戶改管理員),最省事 |
| 預演/Stage 環境 | 步驟 1 + 步驟 2,保留最小權限原則 |
| 生產環境 | 停用預設網站、刪除 iisstart.asp/localstart.asp、獨立應用程式集區搭配自訂身分識別 |