標籤:
這篇博文主要示範”CREATE FILE encountered operating system error 5(Access is denied.)“錯誤如出現的原因(當然只是導致這個錯誤出現的一種情境而已)和如何解決這個問題以及一些不解的迷惑。
實驗環境:
作業系統版本: Windows Server 2012 SP2
資料庫的版本:Microsoft SQL Server 2014 - 12.0.2000.8
如下所示,SQL Server Database Services 服務的啟動帳號為NT Service\MSSQLSERVER, 我們先設定一下資料庫的預設路徑為E:\SQL_DATA
此時查看E:\SQL_DATA 目錄的許可權(被屏蔽的是一域帳號)。此時我們建立資料庫Test完全沒有問題。我們先刪除資料庫Test。
現在我們刪除使用者GETTESTNT55\Users這個帳號,在目錄E:\SQL_DATA的屬性(Properties)->安全(Security)-> 編輯(Edit)下直接刪除會遇到下面錯誤。
我們從E盤的根目錄,右鍵屬性選擇Security 刪除這個使用者,然後我建立新的資料庫時就會遇到CREATE FILE encountered operating system error 5(Access is denied.)錯誤。
那麼如何解決呢? 我們可以給目前的目錄添加虛擬帳戶NT Service\MSSQLSERVER 並授予相關許可權解決這個問題。具體可以參考MSDN文檔,截取部分如下所示
-
使用 Windows 資源管理員,導航到儲存資料庫檔案的檔案系統位置。按右鍵檔案系統檔案夾,然後單擊“屬性”。
-
在“安全性”選項卡上,單擊“編輯”,然後單擊“添加”。
-
在“選擇使用者、電腦、服務帳戶或組”對話方塊中,單擊“位置”,在位置列表的頂部選擇您的電腦名稱,然後單擊“確定”。
-
在“輸入要選擇的對象名稱”框中,鍵入聯機叢書主題“配置 Windows 服務帳戶和許可權”中所列的每個服務 SID 的名稱。 (對於資料庫引擎每個服務 SID,將 NT SERVICE\MSSQLSERVER 用於預設執行個體,或將 NT SERVICE\MSSQL$InstanceName 用於具名執行個體。)
-
單擊“檢查名稱”以驗證該條目。驗證經常失敗,而且可能告知您找不到該名稱。單擊“確定”時,將顯示“找到多個名稱”對話方塊。
-
現在選擇每個服務 SID(MSSQLSERVER 或 NT SERVICE\MSSQL$InstanceName),然後單擊“確定”。
-
再次單擊“確定”以返回“許可權”對話方塊。
-
在“組或使用者”名稱框中,選擇每個服務 SID,然後在“<名稱> 的許可權”框中,為“完全控制”選中“允許”複選框。
-
單擊“應用”,然後單擊“確定”兩次以退出。
具體操作過程的如下所示
許可權的話,至少需要”Read & Execute“、”List Folder Content“、”Read“、”Write“許可權,當然如果你能給”Full Control“許可權那肯定是可以。許可權我們應該盡量控制最小範圍內。
此時就能解決這個錯誤,此時你刪除該使用者,然後在這個目錄添加EVERYONE使用者,授予上面的許可權也能解決這個錯誤。當然在安全性上就不如給虛擬賬戶NT Service\MSSQLSERVER帳號授權。
肯定有細心的人會問,我們不添加虛擬賬戶NT Service\MSSQLSERVER或EVERYONE,我們重新添加這個使用者GETTESTNT55\Users、授予同樣的許可權是否可以解決這個問題? 答案是依然會遇到這個錯誤,為什麼呢? 暫時我沒有搞明白具體原因,是不是有點諷刺,知道了怎麼解決,但是依然不清楚具體原因。當然涉及許可權的問題確實有點複雜。如果哪位知道具體原因,請不吝賜教。
參考資料:
http://www.guyellisrocks.com/2010/07/create-file-encountered-operating.html
http://stackoverflow.com/questions/11178536/create-file-encountered-operating-system-error-5failed-to-retrieve-text-for-thi
https://msdn.microsoft.com/zh-cn/library/jj219062.aspx
CREATE FILE encountered operating system error 5(Access is denied.)