2012-04-28 78 views
22

我在將訪問某些數據庫的服務器上創建了一個新用戶。備份權限

但是,當我去備份或還原數據庫出現錯誤:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup
Cannot access the specified path or file on the server. Verify that you have the necessary security privileges and that the path or file exists.....................

錯誤顯示在我的系統中的其他路徑。即使是那些用戶和服務帳戶擁有完全控制權限的用戶。

但是,如果我鍵入完整路徑並單擊確定,它會抱怨它無法顯示,但它備份或恢復數據庫。只是不顯示路徑的樹視圖。

如果我使用sa帳戶進行操作,則該對話框將顯示所有路徑而不抱怨。

PS:已將用戶添加到db_backoperator角色。

需要什麼權限?

回答

13

您是使用SQL身份驗證登錄還是Windows登錄進行連接?如果一個SQL身份驗證登錄,你如何將該SQL登錄「完全控制權限」給Windows中的一個文件夾? Windows不知道您在SQL Server中創建的任何SQL身份驗證登錄。請準確告訴我們「我在服務器上創建了用戶」的含義 - 用戶是什麼?什麼服務器? SQL Server或Windows?

作爲解決方法,您還可以創建一個存儲過程,作爲sa或作爲sysadmin組一部分的Windows登錄名執行,並賦予該權限較低的用戶執行權限。但是我能夠備份通過添加日工用戶根本不需要做任何其他權限,只需將它們添加到db_backupoperator角色數據庫:

CREATE LOGIN peon WITH PASSWORD = 'foo', CHECK_POLICY = OFF; 
GO 
CREATE DATABASE splunge; 
GO 
USE splunge; 
GO 
CREATE USER peon FROM LOGIN peon; 
GO 
EXEC sp_addrolemember 'db_backupoperator', 'peon'; 
GO 
EXECUTE AS USER = 'peon'; 
GO 
BACKUP DATABASE splunge 
    TO DISK = 'C:\tmp\splung.bak' -- change this path obviously 
    WITH INIT, COMPRESSION; 
GO 
REVERT; 
GO 

所以,我想驗證SQL Server服務帳戶具有足夠的權限寫入有問題的路徑。我知道你說的是這種情況,但正如我已經證明,這似乎不是peon用戶的問題,而是底層引擎寫入文件系統的能力。如果你嘗試了上面備份命令不增加peondb_backupoperator角色,你得到這個錯誤(它不會讓你得到實際的備份命令附近的任何地方或驗證磁盤上的所有權限):

Msg 262, Level 14, State 1, Line 1 
BACKUP DATABASE permission denied in database 'splunge'. 
Msg 3013, Level 16, State 1, Line 1 
BACKUP DATABASE is terminating abnormally. 

如果這是一個Windows登錄名,然後請驗證用戶確實對該文件夾具有寫入權限。嘗試使用C:\Program Files\...下的層次結構以外的其他文件夾,並且不要嘗試直接寫入根目錄(例如C:\file.bak)。

+1

好吧,讓我解釋一下:我創建了一個登錄名,即SQL Server身份驗證控件,並授予了db_backupoperator等的權限。要點是:它可以將備份寫入磁盤,但不能顯示文件結構(在對話框上的樹視圖)到系統,甚至用戶有權限的路徑(記錄的Windows用戶和服務帳戶)。我會嘗試你的程序,看看我得到了什麼.....感謝方式... – 2012-04-30 10:56:54

+0

檢查您的用戶是否可以執行xp_fixeddrives,xp_dirtree和xp_fileexist - 這是對話在幕後執行的操作。就我個人而言,我會創建一個存儲過程,將數據庫作爲參數進行備份,並控制輸出位置,而不是讓用戶從對話框中選擇目標位置(或根本不使用UI)。位置對話框缺少一些非常基本的功能(如創建文件夾),並且多年來一直如此... – 2012-04-30 13:28:14

1

我的猜測是這是Windows身份驗證和集成安全性的問題。 SQL Server有時會模擬用戶登錄。嘗試爲正在登錄的Windows用戶添加Windows ACL權限。

+0

這種情況也發生在我登錄爲Windows管理員但使用「用戶」Sql登錄(而非Sa)時。這與集成安全性或角色/權限有關嗎?這是我目前的問題,我不知道問題出在哪裏=/ – 2012-04-28 19:59:26

12

db_backupoperator是數據庫角色,而不是服務器角色或Windows權限。它只授予用戶對數據庫進行必要的訪問以進行備份。它不會授予服務器文件結構的任何權限,這是實際製作備份文件所需的。

IIRC,要訪問文件結構以進行備份,用戶必須已具有Windows /域訪問權限,或者具有服務器角色sysadmin以獲取SQL Server自己的Windows訪問權限。

此外,要實際恢復數據庫,用戶將需要服務器角色dbcreator

+0

我添加了diskadmin,dbcreator和serveradmin,但沒有工作。 與sysadmin工作正常,但我不能讓該用戶是一個系統管理員。 – 2012-04-28 20:15:41

+0

那麼,diskadmin和serveradmin我不確定。查看系統管理員是否工作。 – RBarryYoung 2012-04-28 20:18:15

1

我正在運行Windows 10(x64),SQL Server Express 2014,嘗試將備份還原到x86 SQL Server 2005數據庫,以便我可以使用這些數據並幫助解決我們應用程序中的錯誤。在備份和恢復.bak文件時,我遇到了具有權限的相同方案。我假設(我的錯誤)SQL Server服務在我的Windows帳戶下運行(因爲我使用Windows憑據登錄到SQL Management)。

所以我做的是進入Windows服務,發現SQL Server,右鍵單擊到屬性,停止服務,然後去LogOn選項卡,並將「登錄爲」更改爲「本地系統帳戶」,並選中「允許服務與桌面交互」框。開始了這項服務,並且我正在路上。

由於我的環境已關閉 - 僅供開發 - 這對我來說是一個快速解決方案。我應該警告你,這不是最終用戶的最佳做法!只爲我們開發者。