實驗環(huán)境:
操作系統(tǒng)版本: Windows Server 2012 SP2
數(shù)據(jù)庫的版本:Microsoft SQL Server 2014 - 12.0.2000.8
如下所示,SQL Server Database Services 服務(wù)的啟動賬號為NT Service\MSSQLSERVER, 我們先設(shè)置一下數(shù)據(jù)庫的默認路徑為E:\SQL_DATA
此時查看E:\SQL_DATA 目錄的權(quán)限(被屏蔽的是一域賬號),
CREATE FILE encountered operating system error 5
。此時我們創(chuàng)建數(shù)據(jù)庫Test完全沒有問題。我們先刪除數(shù)據(jù)庫Test。
現(xiàn)在我們刪除用戶GETTESTNT55\Users這個賬號,在目錄E:\SQL_DATA的屬性(Properties)->安全(Security)-> 編輯(Edit)下直接刪除會遇到下面錯誤。
我們從E盤的根目錄,右鍵屬性選擇Security 刪除這個用戶,然后我創(chuàng)建新的數(shù)據(jù)庫時就會遇到CREATE FILE encountered operating system error 5(Access is denied.)錯誤。
那么如何解決呢? 我們可以給當(dāng)前目錄添加虛擬帳戶NT Service\MSSQLSERVER 并授予相關(guān)權(quán)限解決這個問題。具體可以參考MSDN文檔,截取部分如下所示
使用 Windows 資源管理器,導(dǎo)航到存儲數(shù)據(jù)庫文件的文件系統(tǒng)位置。右鍵單擊文件系統(tǒng)文件夾,然后單擊“屬性”。
在“安全性”選項卡上,單擊“編輯”,然后單擊“添加”。
在“選擇用戶、計算機、服務(wù)帳戶或組”對話框中,單擊“位置”,在位置列表的頂部選擇您的計算機名稱,然后單擊“確定”,
電腦資料
《CREATE FILE encountered operating system error 5》(http://m.szmdbiao.com)。在“輸入要選擇的對象名稱”框中,鍵入聯(lián)機叢書主題“配置 Windows 服務(wù)帳戶和權(quán)限”中所列的每個服務(wù) SID 的名稱。 (對于數(shù)據(jù)庫引擎每個服務(wù) SID,將 NT SERVICE\MSSQLSERVER 用于默認實例,或?qū)?NT SERVICE\MSSQL$InstanceName 用于命名實例。)
單擊“檢查名稱”以驗證該條目。驗證經(jīng)常失敗,而且可能告知您找不到該名稱。單擊“確定”時,將顯示“找到多個名稱”對話框。
現(xiàn)在選擇每個服務(wù) SID(MSSQLSERVER 或 NT SERVICE\MSSQL$InstanceName),然后單擊“確定”。
再次單擊“確定”以返回“權(quán)限”對話框。
在“組或用戶”名稱框中,選擇每個服務(wù) SID,然后在“<名稱> 的權(quán)限”框中,為“完全控制”選中“允許”復(fù)選框。
單擊“應(yīng)用”,然后單擊“確定”兩次以退出。
具體操作過程的截圖如下所示
權(quán)限的話,至少需要”Read & Execute“、”List Folder Content“、”Read“、”Write“權(quán)限,當(dāng)然如果你能給”Full Control“權(quán)限那肯定是可以。權(quán)限我們應(yīng)該盡量控制最小范圍內(nèi)。
此時就能解決這個錯誤,此時你刪除該用戶,然后在這個目錄添加EVERYONE用戶,授予上面的權(quán)限也能解決這個錯誤。當(dāng)然在安全性上就不如給虛擬賬戶NT Service\MSSQLSERVER賬號授權(quán)。
肯定有細心的人會問,我們不添加虛擬賬戶NT Service\MSSQLSERVER或EVERYONE,我們重新添加這個用戶GETTESTNT55\Users、授予同樣的權(quán)限是否可以解決這個問題? 答案是依然會遇到這個錯誤,為什么呢? 暫時我沒有搞明白具體原因,是不是有點諷刺,知道了怎么解決,但是依然不清楚具體原因。當(dāng)然涉及權(quán)限的問題確實有點復(fù)雜。如果哪位知道具體原因,請不吝賜教。