歡迎您光臨本站 註冊首頁

SQL Server資料庫錯誤5123解決方案

←手機掃碼閱讀     limiyoyo @ 2020-06-18 , reply:0

因為自己有一本基於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 Server2008的超級管理員SA連線登入例項後,SQL Server卻沒有許可權訪問此資料檔案。換句話說,以SQL Server2008的超級管理員SA連線登入例項後,登入的身份不在SYSTEM使用者組,也不是xrm這個管理員。

那會是什麼呢? 我們檢視一下當前SQL Server 2008的例項服務的相關資訊就知道了,開啟Sql ServerConfiguration Manager (即SQL Server 配置管理器)檢視一下當前連線到的例項服務的相關資訊,如下圖所示:

(當前例項服務的相關資訊)

發現當前例項SQLSERVER2008的登入身份為「NT AUTHORITYLocalService」,即作業系統授權的【本地服務】,本地服務也是了個使用者組。換句話說,如果我們僅授予【本地服務】這個使用者組的許可權(而不是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的【服務】上也可以做到。 


[limiyoyo ] SQL Server資料庫錯誤5123解決方案已經有650次圍觀

http://coctec.com/docs/mysql/show-post-238987.html