SQL Server附加資料庫出現錯誤5123的正確解決方案

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   for   

    因為自己有一本基於SQL Server 2005的資料庫教程,裡邊使用的樣本資料庫是AdventureWorks for SQL Server 2005,而我的機子上裝的是SQL Server 2008,樣本資料庫是AdventureWorks for SQL Server 2008。起初我以為樣本資料庫AdventureWorks for SQL Server 2005 與AdventureWorks for SQL Server 2008 資料庫結構應該差不多,可是在練習的過程中,我發現兩個資料庫中很多表的結構還是有很多不一樣的地方。於是決定到微軟下載中心將樣本資料庫AdventureWorks for SQL Server 2005下過來,附加到SQL Server 2008上,以便順利進行練習。我以SQL Server 2008的超級管理員賬戶“sa”串連登入到執行個體SQLSERVER2008:在附加樣本資料庫AdventureWorks for SQL Server 2005時,彈出了這個錯誤:    仔細看了一下主要資訊“嘗試開啟或建立物理檔案......時,CREATE FILE遇到作業系統錯誤 5(拒絕訪問。)”  ,一看就知道應當是對要附加的資料檔案的操作許可權不夠。     按一般的思維習慣,我們會對操作許可權不夠的檔案授予足夠的操作許可權。比如,有網友說“給要附加的資料檔案和相應的記錄檔授予Everyone的許可權”,授權過程如下三張所示(注意資料檔案和記錄檔都必須授權): (圖1:授權資料檔案) (圖2:資料檔案授權後) (圖3:記錄檔授權後)       對要附加的資料檔案和記錄檔分別授予Everyone【讀取和執行】、【讀取】的許可權後,在SQL Server 2008中重新嘗試附加資料庫,發現可以附加成功了! 是不是問題就這樣解決了呢?這樣子做對嗎?     如果在真實的資料庫管理過程中,我們把資料檔案、記錄檔的許可權放大到Everyone,那肯定是不對的做法。因為這樣資料庫的安全性將大打折扣,雖然對Everyone只授予了【讀取和執行】、【讀取】的許可權,但這仍然有泄漏資料的危險。     我們應當保證能正常訪問的情況下,使資料檔案具有最小的訪問權。我們之前授權給Everyone,那所有使用者或賬戶都能操作相應的檔案了,這肯定不安全的。那麼如何才能授予最小的存取權限呢?思考一下,我們用SQL Server 2008去附加相應的資料檔案,報出“拒絕訪問”即許可權不夠的錯誤,換句話說,當前SQL Server 2008沒有許可權訪問這些檔案。我們右鍵檔案,到檔案屬性中查看一下檔案的許可權情況,如所示: (相應資料檔案原本的許可權情況)       我們發現只有SYSTEM和xrm這兩個組或使用者才有權操作此資料檔案。SYSTEM是一個使用者組,即【本地系統】組,而xrm是一個管理使用者,示: (xrm使用者的資訊)      SYSTEM使用者組和xrm這個管理使用者都有許可權操作此資料檔案和記錄檔,而以SQL Server 2008的超級管理員SA串連登入執行個體後,SQL Server卻沒有許可權訪問此資料檔案。換句話說,以SQL Server 2008的超級管理員SA串連登入執行個體後,登入的身份不在SYSTEM使用者組,也不是xrm這個管理員。那會是什麼呢?         我們查看一下當前SQL Server 2008的執行個體服務的相關資訊就知道了,開啟Sql Server Configuration Manager (即SQL Server 組態管理員)查看一下當前串連到的執行個體服務的相關資訊,如所示: (當前執行個體服務的相關資訊)       發現當前執行個體SQLSERVER2008的登入身份為“NT AUTHORITY\LocalService”,即作業系統授權的【本地服務】,本地服務也是了個使用者組。換句話說,如果我們僅授予【本地服務】這個使用者組的許可權(而不是Everyone),應該也可以在SQL Server 2008中用sa的賬戶附加資料庫了。為此,將剛剛授予相應資料檔案和記錄檔Everyone的許可權都刪除,再授予LocalService使用者組相應資料檔案和記錄檔的許可權,重新嘗試附加相應的資料庫,發現的確可以附加成功!不必說,授予作業系統授權的【本地服務】使用者組比起授予Everyone來說肯定要安全的多。    上面提到的方法中,我們都是改變了資料檔案原來的許可權範圍(原來的許可權範圍只有SYSTEM即【本地系統】使用者組和xrm這個系統管理員) 。而更好的辦法是不要改變資料檔案的許可權範圍,仍然以SA身份串連登入SQL Server 2008的執行個體也能訪問相應的資料檔案。而要達到這個目的,我們只需要將相應執行個體的登入身份改為SYSTEM【本地系統】使用者組,SYSTEM也是在相應資料檔案的許可權範圍之內的使用者組,而且SQL Server執行個體以本地系統身份運行,安全性將更高。我們可以在SQL Server 組態管理員中將相應的SQL Server執行個體的登入身份修改為【本地系統】即Local System,如下列圖所示:  (修改執行個體的登入身份)    (執行個體的登入身份變為LocalSystem)     然後重啟相應執行個體服務,重新以SA身份串連登入SQL Server 2008的相應執行個體並嘗試附加資料庫, 同樣可以成功的將資料庫附加上!!!         其實,如果不是要特別地以SA身份串連登入SQL Server 2008的相應執行個體來附加相應資料庫,那麼在串連登入SQL Server 2008的相應執行個體時,身分識別驗證選擇【Windows 身分識別驗證】,不做前文中所述的其他修改就可以把資料庫附加上去了,原因就在於:【Windows 身分識別驗證】用的是當前作業系統的使用者的許可權,許可權一般都足夠大的。另外,在【SQL Server 組態管理員】中針對執行個體服可以做的操作,在Windows的【服務】上也可以做到。

SQL Server附加資料庫出現錯誤5123的正確解決方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.