2012-04-28 3 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.....................

ошибка показывает, для какого-либо другого пути в моей системе. Даже те, где пользователь и учетная запись службы имеют полные разрешения на управление.

НО, если я нахожу полный путь и нажимаю ok, он жалуется, что он не может показать, НО он выполняет резервное копирование или восстановление базы данных. Просто не отображается древовидное представление для пути.

Если я выполняю операцию с использованием учетной записи sa, диалоговое окно показывает все пути без жалоб.

PS: Уже добавлен пользователь к роли db_backoperator.

Какие разрешения необходимы?

ответ

13

Вы подключаетесь с использованием логина авторизации SQL или входа в систему Windows? Если SQL auth login, как вы даете этим «входам» права доступа для Windows в папку в Windows? Windows не знает о каких-либо входах для проверки подлинности SQL, которые вы создали в SQL Server. Пожалуйста, покажите нам, что вы подразумеваете под «Я создал пользователя на сервере» - какой пользователь? какой сервер? SQL Server или Windows?

В качестве обходного пути вы также можете создать хранимую процедуру, которая выполняется как sa или вход в систему Windows, входящий в группу sysadmin, и предоставить этому пользователю с меньшей привилегией возможность выполнить. Тем не менее, я был в состоянии сделать резервную копию базы данных путем добавления пользователя батрака без других разрешений на все и просто добавить их в 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, а скорее способность основного движка писать в файловую систему.Если вы пытаетесь вышеуказанной команда резервного копирования без добавления peon к db_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

Ok. Позвольте мне объяснить лучше: я создал логин, то есть элемент управления SQL Server Auth, и предоставил разрешения db_backupoperator и т. Д. Точка: он может записать резервную копию на диске, но он не может показать файловую структуру (древовидное представление в диалоговом окне) в систему, даже пути, в которых пользователь имеет разрешения (зарегистрированный пользователь Windows и учетная запись службы). Я попробую вашу процедуру и посмотрю, что я получу ..... Спасибо way ... –

+0

Проверьте, может ли ваш пользователь выполнить xp_fixeddrives, xp_dirtree и xp_fileexist - это то, что диалог делает за кулисами. Лично я бы создал хранимую процедуру, которая заставляла базу данных копировать в качестве аргумента и управляла местоположением вывода, а не позволяла пользователю выбирать адресата из диалогового окна (или вообще использовать интерфейс). В диалоговом окне местоположения отсутствуют некоторые довольно простые функциональные возможности (например, создать папку), и это было в течение многих лет ... –

1

Я предполагаю, что это проблема с аутентификацией Windows и интегрированной безопасностью. SQL Server иногда олицетворяет вход пользователя в систему. Попробуйте добавить разрешения Windows ACL для пользователя Windows, с которым вы входите.

+0

Это происходит также, когда я зарегистрирован как администратор Windows, но используя «User» Sql Login (Not Sa). Это связано с интегрированной безопасностью или ролями/разрешениями? Это моя текущая проблема прямо сейчас, я не знаю, где проблема =/ –

12

db_backupoperator - это роль базы данных, а не роль сервера или разрешение Windows. Он только предоставляет пользователю необходимый доступ к базе данных , чтобы сделать резервную копию. Он не предоставляет никаких прав файловой структуре сервера, которые необходимы для создания файла резервной копии.

IIRC, чтобы получить доступ к файловой структуре, чтобы сделать резервную копию, пользователь должен либо уже имеет окно/право домена для доступа к нему, или роли сервера сисадмина чтобы забрать ее собственные права доступа в SQL Server для Windows.

Кроме того, чтобы фактически восстановить базу данных, пользователю потребуется роль сервера dbcreator.

+0

Я добавил diskadmin, dbcreator и serveradmin, но не работал. С sysadmin отлично работает, но я не могу позволить этому пользователю быть системным администратором. –

+0

Ну, diskadmin и serveradmin Я не был уверен. Посмотрите, работает ли sysadmin. – RBarryYoung

1

Я запускаю Windows 10 (x64), SQL Server Express 2014, пытаясь восстановить резервную копию базы данных x86 SQL Server 2005, чтобы я мог использовать данные и помочь решить проблему в нашем приложении. Я столкнулся с тем же сценарием с разрешениями при резервном копировании и восстановлении файла .bak.

То же самое, я являюсь администратором на своем ПК, я предположил (моя ошибка), что служба SQL Server работает под моей учетной записью Windows (потому что я входил в SQL Management с учетными данными Windows).

Итак, что я сделал, это войти в «Службы Windows», найти SQL Server, щелкнуть правой кнопкой мыши по «Свойствам», остановить службу, затем перейти на вкладку «LogOn» и изменить «Войти в систему» ​​на «Локальная учетная запись системы» и проверить в поле «Разрешить службе взаимодействовать с рабочим столом». Начал службу, и я был в пути.

Поскольку моя среда закрыта - только для развития - это было быстрым решением для меня. Я должен предупредить вас, это не лучшая практика для конечных пользователей! Просто для нас разработчиков.

Смежные вопросы