Назад | Перейти на главную страницу

База данных, не связанная с ролью SA?

Если я правильно читаю электронную книгу, пользователь может восстановить существующую базу данных, если он является администратором базы данных этой базы данных; фактические слова:

Если восстанавливаемая база данных не существует, пользователь должен иметь разрешения CREATE DATABASE, чтобы иметь возможность выполнить RESTORE. Если база данных существует, разрешения RESTORE по умолчанию предоставляются членам фиксированных серверных ролей sysadmin и dbcreator и владельцу (dbo) базы данных (для параметра FROM DATABASE_SNAPSHOT база данных всегда существует).

К сожалению, это кажется не совсем правильным, или мне не хватает тонкости. Для конкретной базы данных я пытаюсь заставить это работать, но когда пользователь выполняет RESTORE FILELISTONLY чтобы получить файлы в резервном файле, получаем ошибку:

Msg 262, Level 14, State 1, Line 1
CREATE DATABASE permission denied in database 'master'.
Msg 3013, Level 16, State 1, Line 1
RESTORE FILELIST is terminating abnormally.

Это немного сбивающее с толку сообщение об ошибке, поскольку на данный момент все, что мы делаем, это пытаемся прочитать файл резервной копии, а не создавать и даже не восстанавливать существующую базу данных; поэтому я могу только предположить, что SQL Server пытается выполнить проверку разрешений, прежде чем разрешить RESTORE команда для выполнения.

Теперь BOL не упоминает о каких-либо дополнительных разрешениях, поэтому мне интересно, что правильно, или мне не хватает тонкости в тексте. Хотя я не сомневаюсь в точности сообщений об ошибках, что мне действительно нужно сделать, чтобы получить пользователя, который db_owner базы данных, чтобы иметь возможность восстановить эту базу данных, не повышая их права доступа?

В SQL Server 2008 и выше произошли изменения в этой области по сравнению с SQL Server 2005 и ниже. Некоторые из них описаны ниже.

http://msdn.microsoft.com/en-us/library/ms173778.aspx

http://msdn.microsoft.com/en-us/library/ms178569.aspx

Насколько я понимаю, вам необходимо членство в роли db_creator - по сути, SQL Server не может определить, являетесь ли вы владельцем db_owner базы данных, которую еще предстоит восстановить! Я понимаю, о чем вы говорите ...